PR c++/37276
[official-gcc.git] / gcc / cp / decl.c
blob045e99b2080db6e7fc6af09a1d3a52f4fea86b5f
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* Process declarations and symbol lookup for C++ front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-iterator.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "intl.h"
42 #include "toplev.h"
43 #include "hashtab.h"
44 #include "tm_p.h"
45 #include "target.h"
46 #include "c-family/c-common.h"
47 #include "c-family/c-objc.h"
48 #include "c-family/c-pragma.h"
49 #include "diagnostic.h"
50 #include "intl.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "pointer-set.h"
54 #include "splay-tree.h"
55 #include "plugin.h"
56 #include "cgraph.h"
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60 BSP_VAR, /* variable */
61 BSP_PARM, /* parameter */
62 BSP_TYPE, /* type */
63 BSP_FIELD /* field */
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, int);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76 int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static tree build_library_fn_1 (tree, enum tree_code, tree);
81 static int member_function_or_else (tree, tree, enum overload_flags);
82 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
83 int);
84 static void check_for_uninitialized_const_var (tree);
85 static hashval_t typename_hash (const void *);
86 static int typename_compare (const void *, const void *);
87 static tree local_variable_p_walkfn (tree *, int *, void *);
88 static tree record_builtin_java_type (const char *, int);
89 static const char *tag_name (enum tag_types);
90 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
91 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static tree check_initializer (tree, tree, int, VEC(tree,gc) **);
95 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
96 static void save_function_data (tree);
97 static void copy_type_enum (tree , tree);
98 static void check_function_type (tree, tree);
99 static void finish_constructor_body (void);
100 static void begin_destructor_body (void);
101 static void finish_destructor_body (void);
102 static void record_key_method_defined (tree);
103 static tree create_array_type_for_decl (tree, tree, tree);
104 static tree get_atexit_node (void);
105 static tree get_dso_handle_node (void);
106 static tree start_cleanup_fn (void);
107 static void end_cleanup_fn (void);
108 static tree cp_make_fname_decl (location_t, tree, int);
109 static void initialize_predefined_identifiers (void);
110 static tree check_special_function_return_type
111 (special_function_kind, tree, tree);
112 static tree push_cp_library_fn (enum tree_code, tree);
113 static tree build_cp_library_fn (tree, enum tree_code, tree);
114 static void store_parm_decls (tree);
115 static void initialize_local_var (tree, tree);
116 static void expand_static_init (tree, tree);
118 /* The following symbols are subsumed in the cp_global_trees array, and
119 listed here individually for documentation purposes.
121 C++ extensions
122 tree wchar_decl_node;
124 tree vtable_entry_type;
125 tree delta_type_node;
126 tree __t_desc_type_node;
128 tree class_type_node;
129 tree unknown_type_node;
131 Array type `vtable_entry_type[]'
133 tree vtbl_type_node;
134 tree vtbl_ptr_type_node;
136 Namespaces,
138 tree std_node;
139 tree abi_node;
141 A FUNCTION_DECL which can call `abort'. Not necessarily the
142 one that the user will declare, but sufficient to be called
143 by routines that want to abort the program.
145 tree abort_fndecl;
147 The FUNCTION_DECL for the default `::operator delete'.
149 tree global_delete_fndecl;
151 Used by RTTI
152 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153 tree tinfo_var_id; */
155 tree cp_global_trees[CPTI_MAX];
157 /* Indicates that there is a type value in some namespace, although
158 that is not necessarily in scope at the moment. */
160 tree global_type_node;
162 /* The node that holds the "name" of the global scope. */
163 tree global_scope_name;
165 #define local_names cp_function_chain->x_local_names
167 /* A list of objects which have constructors or destructors
168 which reside in the global scope. The decl is stored in
169 the TREE_VALUE slot and the initializer is stored
170 in the TREE_PURPOSE slot. */
171 tree static_aggregates;
173 /* Like static_aggregates, but for thread_local variables. */
174 tree tls_aggregates;
176 /* -- end of C++ */
178 /* A node for the integer constant 2. */
180 tree integer_two_node;
182 /* Used only for jumps to as-yet undefined labels, since jumps to
183 defined labels can have their validity checked immediately. */
185 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
186 struct named_label_use_entry *next;
187 /* The binding level to which this entry is *currently* attached.
188 This is initially the binding level in which the goto appeared,
189 but is modified as scopes are closed. */
190 cp_binding_level *binding_level;
191 /* The head of the names list that was current when the goto appeared,
192 or the inner scope popped. These are the decls that will *not* be
193 skipped when jumping to the label. */
194 tree names_in_scope;
195 /* The location of the goto, for error reporting. */
196 location_t o_goto_locus;
197 /* True if an OpenMP structured block scope has been closed since
198 the goto appeared. This means that the branch from the label will
199 illegally exit an OpenMP scope. */
200 bool in_omp_scope;
203 /* A list of all LABEL_DECLs in the function that have names. Here so
204 we can clear out their names' definitions at the end of the
205 function, and so we can check the validity of jumps to these labels. */
207 struct GTY(()) named_label_entry {
208 /* The decl itself. */
209 tree label_decl;
211 /* The binding level to which the label is *currently* attached.
212 This is initially set to the binding level in which the label
213 is defined, but is modified as scopes are closed. */
214 cp_binding_level *binding_level;
215 /* The head of the names list that was current when the label was
216 defined, or the inner scope popped. These are the decls that will
217 be skipped when jumping to the label. */
218 tree names_in_scope;
219 /* A vector of all decls from all binding levels that would be
220 crossed by a backward branch to the label. */
221 VEC(tree,gc) *bad_decls;
223 /* A list of uses of the label, before the label is defined. */
224 struct named_label_use_entry *uses;
226 /* The following bits are set after the label is defined, and are
227 updated as scopes are popped. They indicate that a backward jump
228 to the label will illegally enter a scope of the given flavor. */
229 bool in_try_scope;
230 bool in_catch_scope;
231 bool in_omp_scope;
234 #define named_labels cp_function_chain->x_named_labels
236 /* The number of function bodies which we are currently processing.
237 (Zero if we are at namespace scope, one inside the body of a
238 function, two inside the body of a function in a local class, etc.) */
239 int function_depth;
241 /* To avoid unwanted recursion, finish_function defers all mark_used calls
242 encountered during its execution until it finishes. */
243 bool defer_mark_used_calls;
244 VEC(tree, gc) *deferred_mark_used_calls;
246 /* States indicating how grokdeclarator() should handle declspecs marked
247 with __attribute__((deprecated)). An object declared as
248 __attribute__((deprecated)) suppresses warnings of uses of other
249 deprecated items. */
250 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
253 /* A list of VAR_DECLs whose type was incomplete at the time the
254 variable was declared. */
256 typedef struct GTY(()) incomplete_var_d {
257 tree decl;
258 tree incomplete_type;
259 } incomplete_var;
261 DEF_VEC_O(incomplete_var);
262 DEF_VEC_ALLOC_O(incomplete_var,gc);
264 static GTY(()) VEC(incomplete_var,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; /* FIXME want (input_filename, (line)0) */
378 /* Avoid crashing later. */
379 define_label (location, DECL_NAME (label));
381 else
382 warn_for_unused_label (label);
385 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
388 /* At the end of a function, all labels declared within the function
389 go out of scope. BLOCK is the top-level block for the
390 function. */
392 static int
393 pop_labels_1 (void **slot, void *data)
395 struct named_label_entry *ent = (struct named_label_entry *) *slot;
396 tree block = (tree) data;
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 htab_clear_slot (named_labels, slot);
407 return 1;
410 static void
411 pop_labels (tree block)
413 if (named_labels)
415 htab_traverse (named_labels, 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;
426 void **slot;
428 pop_label (label, old_value);
430 dummy.label_decl = label;
431 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
432 htab_clear_slot (named_labels, slot);
435 /* The following two routines are used to interface to Objective-C++.
436 The binding level is purposely treated as an opaque type. */
438 void *
439 objc_get_current_scope (void)
441 return current_binding_level;
444 /* The following routine is used by the NeXT-style SJLJ exceptions;
445 variables get marked 'volatile' so as to not be clobbered by
446 _setjmp()/_longjmp() calls. All variables in the current scope,
447 as well as parent scopes up to (but not including) ENCLOSING_BLK
448 shall be thusly marked. */
450 void
451 objc_mark_locals_volatile (void *enclosing_blk)
453 cp_binding_level *scope;
455 for (scope = current_binding_level;
456 scope && scope != enclosing_blk;
457 scope = scope->level_chain)
459 tree decl;
461 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
462 objc_volatilize_decl (decl);
464 /* Do not climb up past the current function. */
465 if (scope->kind == sk_function_parms)
466 break;
470 /* Update data for defined and undefined labels when leaving a scope. */
472 static int
473 poplevel_named_label_1 (void **slot, void *data)
475 struct named_label_entry *ent = (struct named_label_entry *) *slot;
476 cp_binding_level *bl = (cp_binding_level *) data;
477 cp_binding_level *obl = bl->level_chain;
479 if (ent->binding_level == bl)
481 tree decl;
483 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
484 TREE_LISTs representing OVERLOADs, so be careful. */
485 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
486 ? DECL_CHAIN (decl)
487 : TREE_CHAIN (decl)))
488 if (decl_jump_unsafe (decl))
489 VEC_safe_push (tree, gc, ent->bad_decls, decl);
491 ent->binding_level = obl;
492 ent->names_in_scope = obl->names;
493 switch (bl->kind)
495 case sk_try:
496 ent->in_try_scope = true;
497 break;
498 case sk_catch:
499 ent->in_catch_scope = true;
500 break;
501 case sk_omp:
502 ent->in_omp_scope = true;
503 break;
504 default:
505 break;
508 else if (ent->uses)
510 struct named_label_use_entry *use;
512 for (use = ent->uses; use ; use = use->next)
513 if (use->binding_level == bl)
515 use->binding_level = obl;
516 use->names_in_scope = obl->names;
517 if (bl->kind == sk_omp)
518 use->in_omp_scope = true;
522 return 1;
525 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
526 when errors were reported, except for -Werror-unused-but-set-*. */
527 static int unused_but_set_errorcount;
529 /* Exit a binding level.
530 Pop the level off, and restore the state of the identifier-decl mappings
531 that were in effect when this level was entered.
533 If KEEP == 1, this level had explicit declarations, so
534 and create a "block" (a BLOCK node) for the level
535 to record its declarations and subblocks for symbol table output.
537 If FUNCTIONBODY is nonzero, this level is the body of a function,
538 so create a block as if KEEP were set and also clear out all
539 label names.
541 If REVERSE is nonzero, reverse the order of decls before putting
542 them into the BLOCK. */
544 tree
545 poplevel (int keep, int reverse, int functionbody)
547 tree link;
548 /* The chain of decls was accumulated in reverse order.
549 Put it into forward order, just for cleanliness. */
550 tree decls;
551 tree subblocks;
552 tree block;
553 tree decl;
554 int leaving_for_scope;
555 scope_kind kind;
556 unsigned ix;
557 cp_label_binding *label_bind;
559 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
560 restart:
562 block = NULL_TREE;
564 gcc_assert (current_binding_level->kind != sk_class);
566 if (current_binding_level->kind == sk_cleanup)
567 functionbody = 0;
568 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
570 gcc_assert (!VEC_length(cp_class_binding,
571 current_binding_level->class_shadowed));
573 /* We used to use KEEP == 2 to indicate that the new block should go
574 at the beginning of the list of blocks at this binding level,
575 rather than the end. This hack is no longer used. */
576 gcc_assert (keep == 0 || keep == 1);
578 if (current_binding_level->keep)
579 keep = 1;
581 /* Any uses of undefined labels, and any defined labels, now operate
582 under constraints of next binding contour. */
583 if (cfun && !functionbody && named_labels)
584 htab_traverse (named_labels, poplevel_named_label_1,
585 current_binding_level);
587 /* Get the decls in the order they were written.
588 Usually current_binding_level->names is in reverse order.
589 But parameter decls were previously put in forward order. */
591 if (reverse)
592 current_binding_level->names
593 = decls = nreverse (current_binding_level->names);
594 else
595 decls = current_binding_level->names;
597 /* If there were any declarations or structure tags in that level,
598 or if this level is a function body,
599 create a BLOCK to record them for the life of this function. */
600 block = NULL_TREE;
601 if (keep == 1 || functionbody)
602 block = make_node (BLOCK);
603 if (block != NULL_TREE)
605 BLOCK_VARS (block) = decls;
606 BLOCK_SUBBLOCKS (block) = subblocks;
609 /* In each subblock, record that this is its superior. */
610 if (keep >= 0)
611 for (link = subblocks; link; link = BLOCK_CHAIN (link))
612 BLOCK_SUPERCONTEXT (link) = block;
614 /* We still support the old for-scope rules, whereby the variables
615 in a for-init statement were in scope after the for-statement
616 ended. We only use the new rules if flag_new_for_scope is
617 nonzero. */
618 leaving_for_scope
619 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
621 /* Before we remove the declarations first check for unused variables. */
622 if ((warn_unused_variable || warn_unused_but_set_variable)
623 && !processing_template_decl)
624 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
626 /* There are cases where D itself is a TREE_LIST. See in
627 push_local_binding where the list of decls returned by
628 getdecls is built. */
629 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
630 if (TREE_CODE (decl) == VAR_DECL
631 && (! TREE_USED (decl) || !DECL_READ_P (decl))
632 && ! DECL_IN_SYSTEM_HEADER (decl)
633 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
634 && TREE_TYPE (decl) != error_mark_node
635 && (!CLASS_TYPE_P (TREE_TYPE (decl))
636 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
638 if (! TREE_USED (decl))
639 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
640 else if (DECL_CONTEXT (decl) == current_function_decl
641 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
642 && errorcount == unused_but_set_errorcount)
644 warning (OPT_Wunused_but_set_variable,
645 "variable %q+D set but not used", decl);
646 unused_but_set_errorcount = errorcount;
651 /* Remove declarations for all the DECLs in this level. */
652 for (link = decls; link; link = TREE_CHAIN (link))
654 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
655 /* It's hard to make this ARM compatibility hack play nicely with
656 lambdas, and it really isn't necessary in C++11 mode. */
657 && cxx_dialect < cxx0x
658 && DECL_NAME (link))
660 tree name = DECL_NAME (link);
661 cxx_binding *ob;
662 tree ns_binding;
664 ob = outer_binding (name,
665 IDENTIFIER_BINDING (name),
666 /*class_p=*/true);
667 if (!ob)
668 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
669 else
670 ns_binding = NULL_TREE;
672 if (ob && ob->scope == current_binding_level->level_chain)
673 /* We have something like:
675 int i;
676 for (int i; ;);
678 and we are leaving the `for' scope. There's no reason to
679 keep the binding of the inner `i' in this case. */
680 pop_binding (name, link);
681 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
682 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
683 /* Here, we have something like:
685 typedef int I;
687 void f () {
688 for (int I; ;);
691 We must pop the for-scope binding so we know what's a
692 type and what isn't. */
693 pop_binding (name, link);
694 else
696 /* Mark this VAR_DECL as dead so that we can tell we left it
697 there only for backward compatibility. */
698 DECL_DEAD_FOR_LOCAL (link) = 1;
700 /* Keep track of what should have happened when we
701 popped the binding. */
702 if (ob && ob->value)
704 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
705 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
708 /* Add it to the list of dead variables in the next
709 outermost binding to that we can remove these when we
710 leave that binding. */
711 VEC_safe_push (tree, gc,
712 current_binding_level->level_chain->dead_vars_from_for,
713 link);
715 /* Although we don't pop the cxx_binding, we do clear
716 its SCOPE since the scope is going away now. */
717 IDENTIFIER_BINDING (name)->scope
718 = current_binding_level->level_chain;
721 else
723 tree name;
725 /* Remove the binding. */
726 decl = link;
728 if (TREE_CODE (decl) == TREE_LIST)
729 decl = TREE_VALUE (decl);
730 name = decl;
732 if (TREE_CODE (name) == OVERLOAD)
733 name = OVL_FUNCTION (name);
735 gcc_assert (DECL_P (name));
736 pop_binding (DECL_NAME (name), decl);
740 /* Remove declarations for any `for' variables from inner scopes
741 that we kept around. */
742 FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
743 ix, decl)
744 pop_binding (DECL_NAME (decl), decl);
746 /* Restore the IDENTIFIER_TYPE_VALUEs. */
747 for (link = current_binding_level->type_shadowed;
748 link; link = TREE_CHAIN (link))
749 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
751 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
752 FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
753 current_binding_level->shadowed_labels,
754 ix, label_bind)
755 pop_local_label (label_bind->label, label_bind->prev_value);
757 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
758 list if a `using' declaration put them there. The debugging
759 back ends won't understand OVERLOAD, so we remove them here.
760 Because the BLOCK_VARS are (temporarily) shared with
761 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
762 popped all the bindings. */
763 if (block)
765 tree* d;
767 for (d = &BLOCK_VARS (block); *d; )
769 if (TREE_CODE (*d) == TREE_LIST)
770 *d = TREE_CHAIN (*d);
771 else
772 d = &DECL_CHAIN (*d);
776 /* If the level being exited is the top level of a function,
777 check over all the labels. */
778 if (functionbody)
780 /* Since this is the top level block of a function, the vars are
781 the function's parameters. Don't leave them in the BLOCK
782 because they are found in the FUNCTION_DECL instead. */
783 BLOCK_VARS (block) = 0;
784 pop_labels (block);
787 kind = current_binding_level->kind;
788 if (kind == sk_cleanup)
790 tree stmt;
792 /* If this is a temporary binding created for a cleanup, then we'll
793 have pushed a statement list level. Pop that, create a new
794 BIND_EXPR for the block, and insert it into the stream. */
795 stmt = pop_stmt_list (current_binding_level->statement_list);
796 stmt = c_build_bind_expr (input_location, block, stmt);
797 add_stmt (stmt);
800 leave_scope ();
801 if (functionbody)
803 /* The current function is being defined, so its DECL_INITIAL
804 should be error_mark_node. */
805 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
806 DECL_INITIAL (current_function_decl) = block;
808 else if (block)
809 current_binding_level->blocks
810 = block_chainon (current_binding_level->blocks, block);
812 /* If we did not make a block for the level just exited,
813 any blocks made for inner levels
814 (since they cannot be recorded as subblocks in that level)
815 must be carried forward so they will later become subblocks
816 of something else. */
817 else if (subblocks)
818 current_binding_level->blocks
819 = block_chainon (current_binding_level->blocks, subblocks);
821 /* Each and every BLOCK node created here in `poplevel' is important
822 (e.g. for proper debugging information) so if we created one
823 earlier, mark it as "used". */
824 if (block)
825 TREE_USED (block) = 1;
827 /* All temporary bindings created for cleanups are popped silently. */
828 if (kind == sk_cleanup)
829 goto restart;
831 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
832 return block;
835 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
836 itself, calling F for each. The DATA is passed to F as well. */
838 static int
839 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
841 int result = 0;
842 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
844 result |= (*f) (name_space, data);
846 for (; current; current = DECL_CHAIN (current))
847 result |= walk_namespaces_r (current, f, data);
849 return result;
852 /* Walk all the namespaces, calling F for each. The DATA is passed to
853 F as well. */
856 walk_namespaces (walk_namespaces_fn f, void* data)
858 return walk_namespaces_r (global_namespace, f, data);
861 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
862 DATA is non-NULL, this is the last time we will call
863 wrapup_global_declarations for this NAMESPACE. */
866 wrapup_globals_for_namespace (tree name_space, void* data)
868 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
869 VEC(tree,gc) *statics = level->static_decls;
870 tree *vec = VEC_address (tree, statics);
871 int len = VEC_length (tree, statics);
872 int last_time = (data != 0);
874 if (last_time)
876 check_global_declarations (vec, len);
877 emit_debug_global_declarations (vec, len);
878 return 0;
881 /* Write out any globals that need to be output. */
882 return wrapup_global_declarations (vec, len);
886 /* In C++, you don't have to write `struct S' to refer to `S'; you
887 can just use `S'. We accomplish this by creating a TYPE_DECL as
888 if the user had written `typedef struct S S'. Create and return
889 the TYPE_DECL for TYPE. */
891 tree
892 create_implicit_typedef (tree name, tree type)
894 tree decl;
896 decl = build_decl (input_location, TYPE_DECL, name, type);
897 DECL_ARTIFICIAL (decl) = 1;
898 /* There are other implicit type declarations, like the one *within*
899 a class that allows you to write `S::S'. We must distinguish
900 amongst these. */
901 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
902 TYPE_NAME (type) = decl;
903 TYPE_STUB_DECL (type) = decl;
905 return decl;
908 /* Remember a local name for name-mangling purposes. */
910 static void
911 push_local_name (tree decl)
913 size_t i, nelts;
914 tree t, name;
916 timevar_start (TV_NAME_LOOKUP);
918 name = DECL_NAME (decl);
920 nelts = VEC_length (tree, local_names);
921 for (i = 0; i < nelts; i++)
923 t = VEC_index (tree, local_names, i);
924 if (DECL_NAME (t) == name)
926 if (!DECL_LANG_SPECIFIC (decl))
927 retrofit_lang_decl (decl);
928 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
929 if (DECL_LANG_SPECIFIC (t))
930 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
931 else
932 DECL_DISCRIMINATOR (decl) = 1;
934 VEC_replace (tree, local_names, i, decl);
935 timevar_stop (TV_NAME_LOOKUP);
936 return;
940 VEC_safe_push (tree, gc, local_names, decl);
941 timevar_stop (TV_NAME_LOOKUP);
944 /* Subroutine of duplicate_decls: return truthvalue of whether
945 or not types of these decls match.
947 For C++, we must compare the parameter list so that `int' can match
948 `int&' in a parameter position, but `int&' is not confused with
949 `const int&'. */
952 decls_match (tree newdecl, tree olddecl)
954 int types_match;
956 if (newdecl == olddecl)
957 return 1;
959 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
960 /* If the two DECLs are not even the same kind of thing, we're not
961 interested in their types. */
962 return 0;
964 gcc_assert (DECL_P (newdecl));
966 if (TREE_CODE (newdecl) == FUNCTION_DECL)
968 tree f1 = TREE_TYPE (newdecl);
969 tree f2 = TREE_TYPE (olddecl);
970 tree p1 = TYPE_ARG_TYPES (f1);
971 tree p2 = TYPE_ARG_TYPES (f2);
972 tree r2;
974 /* Specializations of different templates are different functions
975 even if they have the same type. */
976 tree t1 = (DECL_USE_TEMPLATE (newdecl)
977 ? DECL_TI_TEMPLATE (newdecl)
978 : NULL_TREE);
979 tree t2 = (DECL_USE_TEMPLATE (olddecl)
980 ? DECL_TI_TEMPLATE (olddecl)
981 : NULL_TREE);
982 if (t1 != t2)
983 return 0;
985 /* The decls dont match if they correspond to two different versions
986 of the same function. Disallow extern "C" functions to be
987 versions for now. */
988 if (compparms (p1, p2)
989 && same_type_p (TREE_TYPE (f1), TREE_TYPE (f2))
990 && !DECL_EXTERN_C_P (newdecl)
991 && !DECL_EXTERN_C_P (olddecl)
992 && targetm.target_option.function_versions (newdecl, olddecl))
994 /* Mark functions as versions if necessary. Modify the mangled decl
995 name if necessary. */
996 if (DECL_FUNCTION_VERSIONED (newdecl)
997 && DECL_FUNCTION_VERSIONED (olddecl))
998 return 0;
999 if (!DECL_FUNCTION_VERSIONED (newdecl))
1001 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1002 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1003 mangle_decl (newdecl);
1005 if (!DECL_FUNCTION_VERSIONED (olddecl))
1007 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1008 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1009 mangle_decl (olddecl);
1011 record_function_versions (olddecl, newdecl);
1012 return 0;
1015 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1016 && ! (DECL_EXTERN_C_P (newdecl)
1017 && DECL_EXTERN_C_P (olddecl)))
1018 return 0;
1020 /* A new declaration doesn't match a built-in one unless it
1021 is also extern "C". */
1022 if (DECL_IS_BUILTIN (olddecl)
1023 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1024 return 0;
1026 if (TREE_CODE (f1) != TREE_CODE (f2))
1027 return 0;
1029 /* A declaration with deduced return type should use its pre-deduction
1030 type for declaration matching. */
1031 if (FNDECL_USED_AUTO (olddecl))
1032 r2 = DECL_STRUCT_FUNCTION (olddecl)->language->x_auto_return_pattern;
1033 else
1034 r2 = TREE_TYPE (f2);
1036 if (same_type_p (TREE_TYPE (f1), r2))
1038 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1039 && (DECL_BUILT_IN (olddecl)
1040 #ifndef NO_IMPLICIT_EXTERN_C
1041 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1042 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1043 #endif
1046 types_match = self_promoting_args_p (p1);
1047 if (p1 == void_list_node)
1048 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1050 #ifndef NO_IMPLICIT_EXTERN_C
1051 else if (!prototype_p (f1)
1052 && (DECL_EXTERN_C_P (olddecl)
1053 && DECL_IN_SYSTEM_HEADER (olddecl)
1054 && !DECL_CLASS_SCOPE_P (olddecl))
1055 && (DECL_EXTERN_C_P (newdecl)
1056 && DECL_IN_SYSTEM_HEADER (newdecl)
1057 && !DECL_CLASS_SCOPE_P (newdecl)))
1059 types_match = self_promoting_args_p (p2);
1060 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1062 #endif
1063 else
1064 types_match =
1065 compparms (p1, p2)
1066 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1067 || comp_type_attributes (TREE_TYPE (newdecl),
1068 TREE_TYPE (olddecl)) != 0);
1070 else
1071 types_match = 0;
1073 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1075 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1076 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1077 return 0;
1079 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1080 DECL_TEMPLATE_PARMS (olddecl)))
1081 return 0;
1083 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1084 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1085 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1086 else
1087 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1088 DECL_TEMPLATE_RESULT (newdecl));
1090 else
1092 /* Need to check scope for variable declaration (VAR_DECL).
1093 For typedef (TYPE_DECL), scope is ignored. */
1094 if (TREE_CODE (newdecl) == VAR_DECL
1095 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1096 /* [dcl.link]
1097 Two declarations for an object with C language linkage
1098 with the same name (ignoring the namespace that qualify
1099 it) that appear in different namespace scopes refer to
1100 the same object. */
1101 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1102 return 0;
1104 if (TREE_TYPE (newdecl) == error_mark_node)
1105 types_match = TREE_TYPE (olddecl) == error_mark_node;
1106 else if (TREE_TYPE (olddecl) == NULL_TREE)
1107 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1108 else if (TREE_TYPE (newdecl) == NULL_TREE)
1109 types_match = 0;
1110 else
1111 types_match = comptypes (TREE_TYPE (newdecl),
1112 TREE_TYPE (olddecl),
1113 COMPARE_REDECLARATION);
1116 return types_match;
1119 /* If NEWDECL is `static' and an `extern' was seen previously,
1120 warn about it. OLDDECL is the previous declaration.
1122 Note that this does not apply to the C++ case of declaring
1123 a variable `extern const' and then later `const'.
1125 Don't complain about built-in functions, since they are beyond
1126 the user's control. */
1128 void
1129 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1131 if (TREE_CODE (newdecl) == TYPE_DECL
1132 || TREE_CODE (newdecl) == TEMPLATE_DECL
1133 || TREE_CODE (newdecl) == CONST_DECL
1134 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1135 return;
1137 /* Don't get confused by static member functions; that's a different
1138 use of `static'. */
1139 if (TREE_CODE (newdecl) == FUNCTION_DECL
1140 && DECL_STATIC_FUNCTION_P (newdecl))
1141 return;
1143 /* If the old declaration was `static', or the new one isn't, then
1144 everything is OK. */
1145 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1146 return;
1148 /* It's OK to declare a builtin function as `static'. */
1149 if (TREE_CODE (olddecl) == FUNCTION_DECL
1150 && DECL_ARTIFICIAL (olddecl))
1151 return;
1153 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1154 permerror (input_location, "previous declaration of %q+D", olddecl);
1157 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1158 function templates. If their exception specifications do not
1159 match, issue a diagnostic. */
1161 static void
1162 check_redeclaration_exception_specification (tree new_decl,
1163 tree old_decl)
1165 tree new_type;
1166 tree old_type;
1167 tree new_exceptions;
1168 tree old_exceptions;
1170 new_type = TREE_TYPE (new_decl);
1171 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1172 old_type = TREE_TYPE (old_decl);
1173 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1175 /* [except.spec]
1177 If any declaration of a function has an exception-specification,
1178 all declarations, including the definition and an explicit
1179 specialization, of that function shall have an
1180 exception-specification with the same set of type-ids. */
1181 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1182 && ! DECL_IS_BUILTIN (old_decl)
1183 && flag_exceptions
1184 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1186 error ("declaration of %qF has a different exception specifier",
1187 new_decl);
1188 error ("from previous declaration %q+F", old_decl);
1192 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1193 Otherwise issue diagnostics. */
1195 static bool
1196 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1198 old_decl = STRIP_TEMPLATE (old_decl);
1199 new_decl = STRIP_TEMPLATE (new_decl);
1200 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1201 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1202 return true;
1203 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1204 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1205 return true;
1206 if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1208 /* Hide a built-in declaration. */
1209 DECL_DECLARED_CONSTEXPR_P (old_decl)
1210 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1211 return true;
1213 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1214 error ("from previous declaration %q+D", old_decl);
1215 return false;
1218 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1219 && lookup_attribute ("gnu_inline", \
1220 DECL_ATTRIBUTES (fn)))
1222 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1223 If the redeclaration is invalid, a diagnostic is issued, and the
1224 error_mark_node is returned. Otherwise, OLDDECL is returned.
1226 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1227 returned.
1229 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1231 tree
1232 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1234 unsigned olddecl_uid = DECL_UID (olddecl);
1235 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1236 int new_defines_function = 0;
1237 tree new_template_info;
1239 if (newdecl == olddecl)
1240 return olddecl;
1242 types_match = decls_match (newdecl, olddecl);
1244 /* If either the type of the new decl or the type of the old decl is an
1245 error_mark_node, then that implies that we have already issued an
1246 error (earlier) for some bogus type specification, and in that case,
1247 it is rather pointless to harass the user with yet more error message
1248 about the same declaration, so just pretend the types match here. */
1249 if (TREE_TYPE (newdecl) == error_mark_node
1250 || TREE_TYPE (olddecl) == error_mark_node)
1251 return error_mark_node;
1253 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1254 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1256 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1257 && TREE_CODE (olddecl) != TEMPLATE_DECL
1258 && check_raw_literal_operator (olddecl))
1259 error ("literal operator template %q+D conflicts with"
1260 " raw literal operator %qD", newdecl, olddecl);
1261 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1262 && TREE_CODE (olddecl) == TEMPLATE_DECL
1263 && check_raw_literal_operator (newdecl))
1264 error ("raw literal operator %q+D conflicts with"
1265 " literal operator template %qD", newdecl, olddecl);
1268 if (DECL_P (olddecl)
1269 && TREE_CODE (newdecl) == FUNCTION_DECL
1270 && TREE_CODE (olddecl) == FUNCTION_DECL
1271 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1273 if (DECL_DECLARED_INLINE_P (newdecl)
1274 && DECL_UNINLINABLE (newdecl)
1275 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1276 /* Already warned elsewhere. */;
1277 else if (DECL_DECLARED_INLINE_P (olddecl)
1278 && DECL_UNINLINABLE (olddecl)
1279 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1280 /* Already warned. */;
1281 else if (DECL_DECLARED_INLINE_P (newdecl)
1282 && DECL_UNINLINABLE (olddecl)
1283 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1285 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1286 newdecl);
1287 warning (OPT_Wattributes, "previous declaration of %q+D "
1288 "with attribute noinline", olddecl);
1290 else if (DECL_DECLARED_INLINE_P (olddecl)
1291 && DECL_UNINLINABLE (newdecl)
1292 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1294 warning (OPT_Wattributes, "function %q+D redeclared with "
1295 "attribute noinline", newdecl);
1296 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1297 olddecl);
1301 /* Check for redeclaration and other discrepancies. */
1302 if (TREE_CODE (olddecl) == FUNCTION_DECL
1303 && DECL_ARTIFICIAL (olddecl))
1305 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1306 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1308 /* Avoid warnings redeclaring built-ins which have not been
1309 explicitly declared. */
1310 if (DECL_ANTICIPATED (olddecl))
1311 return NULL_TREE;
1313 /* If you declare a built-in or predefined function name as static,
1314 the old definition is overridden, but optionally warn this was a
1315 bad choice of name. */
1316 if (! TREE_PUBLIC (newdecl))
1318 warning (OPT_Wshadow,
1319 DECL_BUILT_IN (olddecl)
1320 ? G_("shadowing built-in function %q#D")
1321 : G_("shadowing library function %q#D"), olddecl);
1322 /* Discard the old built-in function. */
1323 return NULL_TREE;
1325 /* If the built-in is not ansi, then programs can override
1326 it even globally without an error. */
1327 else if (! DECL_BUILT_IN (olddecl))
1328 warning (0, "library function %q#D redeclared as non-function %q#D",
1329 olddecl, newdecl);
1330 else
1332 error ("declaration of %q#D", newdecl);
1333 error ("conflicts with built-in declaration %q#D",
1334 olddecl);
1336 return NULL_TREE;
1338 else if (!types_match)
1340 /* Avoid warnings redeclaring built-ins which have not been
1341 explicitly declared. */
1342 if (DECL_ANTICIPATED (olddecl))
1344 /* Deal with fileptr_type_node. FILE type is not known
1345 at the time we create the builtins. */
1346 tree t1, t2;
1348 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1349 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1350 t1 || t2;
1351 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1352 if (!t1 || !t2)
1353 break;
1354 else if (TREE_VALUE (t2) == fileptr_type_node)
1356 tree t = TREE_VALUE (t1);
1358 if (TREE_CODE (t) == POINTER_TYPE
1359 && TYPE_NAME (TREE_TYPE (t))
1360 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1361 == get_identifier ("FILE")
1362 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1364 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1366 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1367 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1368 types_match = decls_match (newdecl, olddecl);
1369 if (types_match)
1370 return duplicate_decls (newdecl, olddecl,
1371 newdecl_is_friend);
1372 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1375 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1376 break;
1378 else if ((DECL_EXTERN_C_P (newdecl)
1379 && DECL_EXTERN_C_P (olddecl))
1380 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1381 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1383 /* A near match; override the builtin. */
1385 if (TREE_PUBLIC (newdecl))
1387 warning (0, "new declaration %q#D", newdecl);
1388 warning (0, "ambiguates built-in declaration %q#D",
1389 olddecl);
1391 else
1392 warning (OPT_Wshadow,
1393 DECL_BUILT_IN (olddecl)
1394 ? G_("shadowing built-in function %q#D")
1395 : G_("shadowing library function %q#D"), olddecl);
1397 else
1398 /* Discard the old built-in function. */
1399 return NULL_TREE;
1401 /* Replace the old RTL to avoid problems with inlining. */
1402 COPY_DECL_RTL (newdecl, olddecl);
1404 /* Even if the types match, prefer the new declarations type for
1405 built-ins which have not been explicitly declared, for
1406 exception lists, etc... */
1407 else if (DECL_IS_BUILTIN (olddecl))
1409 tree type = TREE_TYPE (newdecl);
1410 tree attribs = (*targetm.merge_type_attributes)
1411 (TREE_TYPE (olddecl), type);
1413 type = cp_build_type_attribute_variant (type, attribs);
1414 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1417 /* If a function is explicitly declared "throw ()", propagate that to
1418 the corresponding builtin. */
1419 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1420 && DECL_ANTICIPATED (olddecl)
1421 && TREE_NOTHROW (newdecl)
1422 && !TREE_NOTHROW (olddecl))
1424 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1425 tree tmpdecl = builtin_decl_explicit (fncode);
1426 if (tmpdecl && tmpdecl != olddecl && types_match)
1427 TREE_NOTHROW (tmpdecl) = 1;
1430 /* Whether or not the builtin can throw exceptions has no
1431 bearing on this declarator. */
1432 TREE_NOTHROW (olddecl) = 0;
1434 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1436 /* If a builtin function is redeclared as `static', merge
1437 the declarations, but make the original one static. */
1438 DECL_THIS_STATIC (olddecl) = 1;
1439 TREE_PUBLIC (olddecl) = 0;
1441 /* Make the old declaration consistent with the new one so
1442 that all remnants of the builtin-ness of this function
1443 will be banished. */
1444 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1445 COPY_DECL_RTL (newdecl, olddecl);
1448 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1450 /* C++ Standard, 3.3, clause 4:
1451 "[Note: a namespace name or a class template name must be unique
1452 in its declarative region (7.3.2, clause 14). ]" */
1453 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1454 && TREE_CODE (newdecl) != NAMESPACE_DECL
1455 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1456 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1457 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1458 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1460 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1461 && TREE_CODE (newdecl) != TYPE_DECL)
1462 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1463 && TREE_CODE (olddecl) != TYPE_DECL))
1465 /* We do nothing special here, because C++ does such nasty
1466 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1467 get shadowed, and know that if we need to find a TYPE_DECL
1468 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1469 slot of the identifier. */
1470 return NULL_TREE;
1473 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1474 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1475 || (TREE_CODE (olddecl) == FUNCTION_DECL
1476 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1477 return NULL_TREE;
1480 error ("%q#D redeclared as different kind of symbol", newdecl);
1481 if (TREE_CODE (olddecl) == TREE_LIST)
1482 olddecl = TREE_VALUE (olddecl);
1483 error ("previous declaration of %q+#D", olddecl);
1485 return error_mark_node;
1487 else if (!types_match)
1489 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1490 /* These are certainly not duplicate declarations; they're
1491 from different scopes. */
1492 return NULL_TREE;
1494 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1496 /* The name of a class template may not be declared to refer to
1497 any other template, class, function, object, namespace, value,
1498 or type in the same scope. */
1499 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1500 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1502 error ("declaration of template %q#D", newdecl);
1503 error ("conflicts with previous declaration %q+#D", olddecl);
1504 return error_mark_node;
1506 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1507 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1508 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1509 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1510 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1511 DECL_TEMPLATE_PARMS (olddecl))
1512 /* Template functions can be disambiguated by
1513 return type. */
1514 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1515 TREE_TYPE (TREE_TYPE (olddecl))))
1517 error ("new declaration %q#D", newdecl);
1518 error ("ambiguates old declaration %q+#D", olddecl);
1520 return NULL_TREE;
1522 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1524 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1526 error ("declaration of C function %q#D conflicts with",
1527 newdecl);
1528 error ("previous declaration %q+#D here", olddecl);
1529 return NULL_TREE;
1531 /* For function versions, params and types match, but they
1532 are not ambiguous. */
1533 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1534 && !DECL_FUNCTION_VERSIONED (olddecl))
1535 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1536 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1538 error ("new declaration %q#D", newdecl);
1539 if (FNDECL_USED_AUTO (olddecl))
1540 error_at (DECL_SOURCE_LOCATION (olddecl), "ambiguates old "
1541 "declaration with deduced return type");
1542 else
1543 error ("ambiguates old declaration %q+#D", olddecl);
1544 return error_mark_node;
1546 else
1547 return NULL_TREE;
1549 else
1551 error ("conflicting declaration %q#D", newdecl);
1552 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1553 return error_mark_node;
1556 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1557 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1558 && (!DECL_TEMPLATE_INFO (newdecl)
1559 || (DECL_TI_TEMPLATE (newdecl)
1560 != DECL_TI_TEMPLATE (olddecl))))
1561 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1562 && (!DECL_TEMPLATE_INFO (olddecl)
1563 || (DECL_TI_TEMPLATE (olddecl)
1564 != DECL_TI_TEMPLATE (newdecl))))))
1565 /* It's OK to have a template specialization and a non-template
1566 with the same type, or to have specializations of two
1567 different templates with the same type. Note that if one is a
1568 specialization, and the other is an instantiation of the same
1569 template, that we do not exit at this point. That situation
1570 can occur if we instantiate a template class, and then
1571 specialize one of its methods. This situation is valid, but
1572 the declarations must be merged in the usual way. */
1573 return NULL_TREE;
1574 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1575 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1576 && !DECL_USE_TEMPLATE (newdecl))
1577 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1578 && !DECL_USE_TEMPLATE (olddecl))))
1579 /* One of the declarations is a template instantiation, and the
1580 other is not a template at all. That's OK. */
1581 return NULL_TREE;
1582 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1584 /* In [namespace.alias] we have:
1586 In a declarative region, a namespace-alias-definition can be
1587 used to redefine a namespace-alias declared in that declarative
1588 region to refer only to the namespace to which it already
1589 refers.
1591 Therefore, if we encounter a second alias directive for the same
1592 alias, we can just ignore the second directive. */
1593 if (DECL_NAMESPACE_ALIAS (newdecl)
1594 && (DECL_NAMESPACE_ALIAS (newdecl)
1595 == DECL_NAMESPACE_ALIAS (olddecl)))
1596 return olddecl;
1597 /* [namespace.alias]
1599 A namespace-name or namespace-alias shall not be declared as
1600 the name of any other entity in the same declarative region.
1601 A namespace-name defined at global scope shall not be
1602 declared as the name of any other entity in any global scope
1603 of the program. */
1604 error ("declaration of namespace %qD conflicts with", newdecl);
1605 error ("previous declaration of namespace %q+D here", olddecl);
1606 return error_mark_node;
1608 else
1610 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1611 if (errmsg)
1613 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1614 if (DECL_NAME (olddecl) != NULL_TREE)
1615 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1616 ? G_("%q+#D previously defined here")
1617 : G_("%q+#D previously declared here"), olddecl);
1618 return error_mark_node;
1620 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1621 && DECL_INITIAL (olddecl) != NULL_TREE
1622 && !prototype_p (TREE_TYPE (olddecl))
1623 && prototype_p (TREE_TYPE (newdecl)))
1625 /* Prototype decl follows defn w/o prototype. */
1626 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1627 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1628 "follows non-prototype definition here");
1630 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1631 || TREE_CODE (olddecl) == VAR_DECL)
1632 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1634 /* [dcl.link]
1635 If two declarations of the same function or object
1636 specify different linkage-specifications ..., the program
1637 is ill-formed.... Except for functions with C++ linkage,
1638 a function declaration without a linkage specification
1639 shall not precede the first linkage specification for
1640 that function. A function can be declared without a
1641 linkage specification after an explicit linkage
1642 specification has been seen; the linkage explicitly
1643 specified in the earlier declaration is not affected by
1644 such a function declaration.
1646 DR 563 raises the question why the restrictions on
1647 functions should not also apply to objects. Older
1648 versions of G++ silently ignore the linkage-specification
1649 for this example:
1651 namespace N {
1652 extern int i;
1653 extern "C" int i;
1656 which is clearly wrong. Therefore, we now treat objects
1657 like functions. */
1658 if (current_lang_depth () == 0)
1660 /* There is no explicit linkage-specification, so we use
1661 the linkage from the previous declaration. */
1662 if (!DECL_LANG_SPECIFIC (newdecl))
1663 retrofit_lang_decl (newdecl);
1664 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1666 else
1668 error ("previous declaration of %q+#D with %qL linkage",
1669 olddecl, DECL_LANGUAGE (olddecl));
1670 error ("conflicts with new declaration with %qL linkage",
1671 DECL_LANGUAGE (newdecl));
1675 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1677 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1679 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1680 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1681 int i = 1;
1683 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1684 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1686 for (; t1 && t1 != void_list_node;
1687 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1688 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1690 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1691 TREE_PURPOSE (t2)))
1693 permerror (input_location, "default argument given for parameter %d of %q#D",
1694 i, newdecl);
1695 permerror (input_location, "after previous specification in %q+#D", olddecl);
1697 else
1699 error ("default argument given for parameter %d of %q#D",
1700 i, newdecl);
1701 error ("after previous specification in %q+#D",
1702 olddecl);
1708 /* Do not merge an implicit typedef with an explicit one. In:
1710 class A;
1712 typedef class A A __attribute__ ((foo));
1714 the attribute should apply only to the typedef. */
1715 if (TREE_CODE (olddecl) == TYPE_DECL
1716 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1717 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1718 return NULL_TREE;
1720 /* If new decl is `static' and an `extern' was seen previously,
1721 warn about it. */
1722 warn_extern_redeclared_static (newdecl, olddecl);
1724 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1725 return error_mark_node;
1727 /* We have committed to returning 1 at this point. */
1728 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1730 /* Now that functions must hold information normally held
1731 by field decls, there is extra work to do so that
1732 declaration information does not get destroyed during
1733 definition. */
1734 if (DECL_VINDEX (olddecl))
1735 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1736 if (DECL_CONTEXT (olddecl))
1737 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1738 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1739 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1740 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1741 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1742 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1743 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1744 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1745 SET_OVERLOADED_OPERATOR_CODE
1746 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1747 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1749 /* Optionally warn about more than one declaration for the same
1750 name, but don't warn about a function declaration followed by a
1751 definition. */
1752 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1753 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1754 /* Don't warn about extern decl followed by definition. */
1755 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1756 /* Don't warn about friends, let add_friend take care of it. */
1757 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1758 /* Don't warn about declaration followed by specialization. */
1759 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1760 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1762 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1763 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1766 if (DECL_DELETED_FN (newdecl))
1768 error ("deleted definition of %qD", newdecl);
1769 error ("after previous declaration %q+D", olddecl);
1771 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1774 /* Deal with C++: must preserve virtual function table size. */
1775 if (TREE_CODE (olddecl) == TYPE_DECL)
1777 tree newtype = TREE_TYPE (newdecl);
1778 tree oldtype = TREE_TYPE (olddecl);
1780 if (newtype != error_mark_node && oldtype != error_mark_node
1781 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1782 CLASSTYPE_FRIEND_CLASSES (newtype)
1783 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1785 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1788 /* Copy all the DECL_... slots specified in the new decl
1789 except for any that we copy here from the old type. */
1790 DECL_ATTRIBUTES (newdecl)
1791 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1793 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1795 tree old_result;
1796 tree new_result;
1797 old_result = DECL_TEMPLATE_RESULT (olddecl);
1798 new_result = DECL_TEMPLATE_RESULT (newdecl);
1799 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1800 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1801 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1802 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1804 DECL_ATTRIBUTES (old_result)
1805 = (*targetm.merge_decl_attributes) (old_result, new_result);
1807 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1809 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1810 && DECL_INITIAL (new_result))
1812 if (DECL_INITIAL (old_result))
1813 DECL_UNINLINABLE (old_result) = 1;
1814 else
1815 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1816 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1817 DECL_NOT_REALLY_EXTERN (old_result)
1818 = DECL_NOT_REALLY_EXTERN (new_result);
1819 DECL_INTERFACE_KNOWN (old_result)
1820 = DECL_INTERFACE_KNOWN (new_result);
1821 DECL_DECLARED_INLINE_P (old_result)
1822 = DECL_DECLARED_INLINE_P (new_result);
1823 DECL_DISREGARD_INLINE_LIMITS (old_result)
1824 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1827 else
1829 DECL_DECLARED_INLINE_P (old_result)
1830 |= DECL_DECLARED_INLINE_P (new_result);
1831 DECL_DISREGARD_INLINE_LIMITS (old_result)
1832 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1833 check_redeclaration_exception_specification (newdecl, olddecl);
1837 /* If the new declaration is a definition, update the file and
1838 line information on the declaration, and also make
1839 the old declaration the same definition. */
1840 if (DECL_INITIAL (new_result) != NULL_TREE)
1842 DECL_SOURCE_LOCATION (olddecl)
1843 = DECL_SOURCE_LOCATION (old_result)
1844 = DECL_SOURCE_LOCATION (newdecl);
1845 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1846 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1848 tree parm;
1849 DECL_ARGUMENTS (old_result)
1850 = DECL_ARGUMENTS (new_result);
1851 for (parm = DECL_ARGUMENTS (old_result); parm;
1852 parm = DECL_CHAIN (parm))
1853 DECL_CONTEXT (parm) = old_result;
1857 return olddecl;
1860 if (types_match)
1862 /* Automatically handles default parameters. */
1863 tree oldtype = TREE_TYPE (olddecl);
1864 tree newtype;
1866 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1867 maybe_instantiate_noexcept (olddecl);
1869 /* Merge the data types specified in the two decls. */
1870 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1872 /* If merge_types produces a non-typedef type, just use the old type. */
1873 if (TREE_CODE (newdecl) == TYPE_DECL
1874 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1875 newtype = oldtype;
1877 if (TREE_CODE (newdecl) == VAR_DECL)
1879 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1880 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1881 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1882 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1883 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1884 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1886 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1887 if (DECL_LANG_SPECIFIC (olddecl)
1888 && CP_DECL_THREADPRIVATE_P (olddecl))
1890 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1891 if (!DECL_LANG_SPECIFIC (newdecl))
1892 retrofit_lang_decl (newdecl);
1894 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1895 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1899 /* Do this after calling `merge_types' so that default
1900 parameters don't confuse us. */
1901 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1902 check_redeclaration_exception_specification (newdecl, olddecl);
1903 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1905 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1906 check_default_args (newdecl);
1908 /* Lay the type out, unless already done. */
1909 if (! same_type_p (newtype, oldtype)
1910 && TREE_TYPE (newdecl) != error_mark_node
1911 && !(processing_template_decl && uses_template_parms (newdecl)))
1912 layout_type (TREE_TYPE (newdecl));
1914 if ((TREE_CODE (newdecl) == VAR_DECL
1915 || TREE_CODE (newdecl) == PARM_DECL
1916 || TREE_CODE (newdecl) == RESULT_DECL
1917 || TREE_CODE (newdecl) == FIELD_DECL
1918 || TREE_CODE (newdecl) == TYPE_DECL)
1919 && !(processing_template_decl && uses_template_parms (newdecl)))
1920 layout_decl (newdecl, 0);
1922 /* Merge the type qualifiers. */
1923 if (TREE_READONLY (newdecl))
1924 TREE_READONLY (olddecl) = 1;
1925 if (TREE_THIS_VOLATILE (newdecl))
1926 TREE_THIS_VOLATILE (olddecl) = 1;
1927 if (TREE_NOTHROW (newdecl))
1928 TREE_NOTHROW (olddecl) = 1;
1930 /* Merge deprecatedness. */
1931 if (TREE_DEPRECATED (newdecl))
1932 TREE_DEPRECATED (olddecl) = 1;
1934 /* Preserve function specific target and optimization options */
1935 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1937 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1938 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1939 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1940 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1942 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1943 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1944 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1945 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1948 /* Merge the initialization information. */
1949 if (DECL_INITIAL (newdecl) == NULL_TREE
1950 && DECL_INITIAL (olddecl) != NULL_TREE)
1952 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1953 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1954 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1956 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1957 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1961 /* Merge the section attribute.
1962 We want to issue an error if the sections conflict but that must be
1963 done later in decl_attributes since we are called before attributes
1964 are assigned. */
1965 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1966 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1968 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1970 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1971 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1972 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1973 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1974 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1975 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1976 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1977 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1978 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1979 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1980 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1981 /* Keep the old RTL. */
1982 COPY_DECL_RTL (olddecl, newdecl);
1984 else if (TREE_CODE (newdecl) == VAR_DECL
1985 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1987 /* Keep the old RTL. We cannot keep the old RTL if the old
1988 declaration was for an incomplete object and the new
1989 declaration is not since many attributes of the RTL will
1990 change. */
1991 COPY_DECL_RTL (olddecl, newdecl);
1994 /* If cannot merge, then use the new type and qualifiers,
1995 and don't preserve the old rtl. */
1996 else
1998 /* Clean out any memory we had of the old declaration. */
1999 tree oldstatic = value_member (olddecl, static_aggregates);
2000 if (oldstatic)
2001 TREE_VALUE (oldstatic) = error_mark_node;
2003 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2004 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2005 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2006 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2009 /* Merge the storage class information. */
2010 merge_weak (newdecl, olddecl);
2012 if (DECL_ONE_ONLY (olddecl))
2013 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
2015 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2016 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2017 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2018 if (! DECL_EXTERNAL (olddecl))
2019 DECL_EXTERNAL (newdecl) = 0;
2021 new_template_info = NULL_TREE;
2022 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2024 bool new_redefines_gnu_inline = false;
2026 if (new_defines_function
2027 && ((DECL_INTERFACE_KNOWN (olddecl)
2028 && TREE_CODE (olddecl) == FUNCTION_DECL)
2029 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2030 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2031 == FUNCTION_DECL))))
2033 tree fn = olddecl;
2035 if (TREE_CODE (fn) == TEMPLATE_DECL)
2036 fn = DECL_TEMPLATE_RESULT (olddecl);
2038 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2041 if (!new_redefines_gnu_inline)
2043 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2044 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2045 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2047 DECL_TEMPLATE_INSTANTIATED (newdecl)
2048 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2049 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2051 /* If the OLDDECL is an instantiation and/or specialization,
2052 then the NEWDECL must be too. But, it may not yet be marked
2053 as such if the caller has created NEWDECL, but has not yet
2054 figured out that it is a redeclaration. */
2055 if (!DECL_USE_TEMPLATE (newdecl))
2056 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2058 /* Don't really know how much of the language-specific
2059 values we should copy from old to new. */
2060 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2061 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2062 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2063 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2065 if (LANG_DECL_HAS_MIN (newdecl))
2067 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2068 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2069 if (DECL_TEMPLATE_INFO (newdecl))
2070 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2071 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2073 /* Only functions have these fields. */
2074 if (TREE_CODE (newdecl) == FUNCTION_DECL
2075 || DECL_FUNCTION_TEMPLATE_P (newdecl))
2077 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2078 olddecl_friend = DECL_FRIEND_P (olddecl);
2079 hidden_friend = (DECL_ANTICIPATED (olddecl)
2080 && DECL_HIDDEN_FRIEND_P (olddecl)
2081 && newdecl_is_friend);
2082 DECL_BEFRIENDING_CLASSES (newdecl)
2083 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2084 DECL_BEFRIENDING_CLASSES (olddecl));
2085 /* DECL_THUNKS is only valid for virtual functions,
2086 otherwise it is a DECL_FRIEND_CONTEXT. */
2087 if (DECL_VIRTUAL_P (newdecl))
2088 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2090 /* Only variables have this field. */
2091 else if (TREE_CODE (newdecl) == VAR_DECL
2092 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2093 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2096 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2098 tree parm;
2100 /* Merge parameter attributes. */
2101 tree oldarg, newarg;
2102 for (oldarg = DECL_ARGUMENTS(olddecl),
2103 newarg = DECL_ARGUMENTS(newdecl);
2104 oldarg && newarg;
2105 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2106 DECL_ATTRIBUTES (newarg)
2107 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2108 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2111 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2112 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2114 /* If newdecl is not a specialization, then it is not a
2115 template-related function at all. And that means that we
2116 should have exited above, returning 0. */
2117 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2119 if (DECL_ODR_USED (olddecl))
2120 /* From [temp.expl.spec]:
2122 If a template, a member template or the member of a class
2123 template is explicitly specialized then that
2124 specialization shall be declared before the first use of
2125 that specialization that would cause an implicit
2126 instantiation to take place, in every translation unit in
2127 which such a use occurs. */
2128 error ("explicit specialization of %qD after first use",
2129 olddecl);
2131 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2133 /* Don't propagate visibility from the template to the
2134 specialization here. We'll do that in determine_visibility if
2135 appropriate. */
2136 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2138 /* [temp.expl.spec/14] We don't inline explicit specialization
2139 just because the primary template says so. */
2141 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2142 the always_inline attribute. */
2143 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2144 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2146 if (DECL_DECLARED_INLINE_P (newdecl))
2147 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2148 else
2149 DECL_ATTRIBUTES (newdecl)
2150 = remove_attribute ("always_inline",
2151 DECL_ATTRIBUTES (newdecl));
2154 else if (new_defines_function && DECL_INITIAL (olddecl))
2156 /* Never inline re-defined extern inline functions.
2157 FIXME: this could be better handled by keeping both
2158 function as separate declarations. */
2159 DECL_UNINLINABLE (newdecl) = 1;
2161 else
2163 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2164 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2166 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2168 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2169 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2171 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2172 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2173 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2174 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2177 /* Preserve abstractness on cloned [cd]tors. */
2178 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2180 /* Update newdecl's parms to point at olddecl. */
2181 for (parm = DECL_ARGUMENTS (newdecl); parm;
2182 parm = DECL_CHAIN (parm))
2183 DECL_CONTEXT (parm) = olddecl;
2185 if (! types_match)
2187 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2188 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2189 COPY_DECL_RTL (newdecl, olddecl);
2191 if (! types_match || new_defines_function)
2193 /* These need to be copied so that the names are available.
2194 Note that if the types do match, we'll preserve inline
2195 info and other bits, but if not, we won't. */
2196 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2197 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2199 /* If redeclaring a builtin function, it stays built in
2200 if newdecl is a gnu_inline definition, or if newdecl is just
2201 a declaration. */
2202 if (DECL_BUILT_IN (olddecl)
2203 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2205 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2206 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2207 /* If we're keeping the built-in definition, keep the rtl,
2208 regardless of declaration matches. */
2209 COPY_DECL_RTL (olddecl, newdecl);
2210 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2212 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2213 switch (fncode)
2215 /* If a compatible prototype of these builtin functions
2216 is seen, assume the runtime implements it with the
2217 expected semantics. */
2218 case BUILT_IN_STPCPY:
2219 if (builtin_decl_explicit_p (fncode))
2220 set_builtin_decl_implicit_p (fncode, true);
2221 break;
2222 default:
2223 break;
2227 if (new_defines_function)
2228 /* If defining a function declared with other language
2229 linkage, use the previously declared language linkage. */
2230 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2231 else if (types_match)
2233 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2234 /* Don't clear out the arguments if we're just redeclaring a
2235 function. */
2236 if (DECL_ARGUMENTS (olddecl))
2237 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2240 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2241 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2243 /* Now preserve various other info from the definition. */
2244 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2245 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2246 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2247 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2249 /* Warn about conflicting visibility specifications. */
2250 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2251 && DECL_VISIBILITY_SPECIFIED (newdecl)
2252 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2254 warning_at (input_location, OPT_Wattributes,
2255 "%q+D: visibility attribute ignored because it", newdecl);
2256 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2257 "conflicts with previous declaration here");
2259 /* Choose the declaration which specified visibility. */
2260 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2262 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2263 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2265 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2266 so keep this behavior. */
2267 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2269 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2270 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2272 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2273 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2275 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2276 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2278 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2279 if (TREE_CODE (newdecl) == FIELD_DECL)
2280 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2282 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2283 with that from NEWDECL below. */
2284 if (DECL_LANG_SPECIFIC (olddecl))
2286 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2287 != DECL_LANG_SPECIFIC (newdecl));
2288 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2291 /* Merge the USED information. */
2292 if (TREE_USED (olddecl))
2293 TREE_USED (newdecl) = 1;
2294 else if (TREE_USED (newdecl))
2295 TREE_USED (olddecl) = 1;
2296 if (TREE_CODE (newdecl) == VAR_DECL)
2298 if (DECL_READ_P (olddecl))
2299 DECL_READ_P (newdecl) = 1;
2300 else if (DECL_READ_P (newdecl))
2301 DECL_READ_P (olddecl) = 1;
2303 if (DECL_PRESERVE_P (olddecl))
2304 DECL_PRESERVE_P (newdecl) = 1;
2305 else if (DECL_PRESERVE_P (newdecl))
2306 DECL_PRESERVE_P (olddecl) = 1;
2308 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2309 to olddecl and deleted. */
2310 if (TREE_CODE (newdecl) == FUNCTION_DECL
2311 && DECL_FUNCTION_VERSIONED (olddecl))
2313 /* Set the flag for newdecl so that it gets copied to olddecl. */
2314 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2315 /* newdecl will be purged after copying to olddecl and is no longer
2316 a version. */
2317 delete_function_version (newdecl);
2320 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2322 int function_size;
2324 function_size = sizeof (struct tree_decl_common);
2326 memcpy ((char *) olddecl + sizeof (struct tree_common),
2327 (char *) newdecl + sizeof (struct tree_common),
2328 function_size - sizeof (struct tree_common));
2330 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2331 (char *) newdecl + sizeof (struct tree_decl_common),
2332 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2333 if (new_template_info)
2334 /* If newdecl is a template instantiation, it is possible that
2335 the following sequence of events has occurred:
2337 o A friend function was declared in a class template. The
2338 class template was instantiated.
2340 o The instantiation of the friend declaration was
2341 recorded on the instantiation list, and is newdecl.
2343 o Later, however, instantiate_class_template called pushdecl
2344 on the newdecl to perform name injection. But, pushdecl in
2345 turn called duplicate_decls when it discovered that another
2346 declaration of a global function with the same name already
2347 existed.
2349 o Here, in duplicate_decls, we decided to clobber newdecl.
2351 If we're going to do that, we'd better make sure that
2352 olddecl, and not newdecl, is on the list of
2353 instantiations so that if we try to do the instantiation
2354 again we won't get the clobbered declaration. */
2355 reregister_specialization (newdecl,
2356 new_template_info,
2357 olddecl);
2359 else
2361 size_t size = tree_code_size (TREE_CODE (olddecl));
2362 memcpy ((char *) olddecl + sizeof (struct tree_common),
2363 (char *) newdecl + sizeof (struct tree_common),
2364 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2365 switch (TREE_CODE (olddecl))
2367 case LABEL_DECL:
2368 case VAR_DECL:
2369 case RESULT_DECL:
2370 case PARM_DECL:
2371 case FIELD_DECL:
2372 case TYPE_DECL:
2373 case CONST_DECL:
2375 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2376 (char *) newdecl + sizeof (struct tree_decl_common),
2377 size - sizeof (struct tree_decl_common)
2378 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2380 break;
2381 default:
2382 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2383 (char *) newdecl + sizeof (struct tree_decl_common),
2384 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2385 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2386 break;
2389 DECL_UID (olddecl) = olddecl_uid;
2390 if (olddecl_friend)
2391 DECL_FRIEND_P (olddecl) = 1;
2392 if (hidden_friend)
2394 DECL_ANTICIPATED (olddecl) = 1;
2395 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2398 /* NEWDECL contains the merged attribute lists.
2399 Update OLDDECL to be the same. */
2400 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2402 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2403 so that encode_section_info has a chance to look at the new decl
2404 flags and attributes. */
2405 if (DECL_RTL_SET_P (olddecl)
2406 && (TREE_CODE (olddecl) == FUNCTION_DECL
2407 || (TREE_CODE (olddecl) == VAR_DECL
2408 && TREE_STATIC (olddecl))))
2409 make_decl_rtl (olddecl);
2411 /* The NEWDECL will no longer be needed. Because every out-of-class
2412 declaration of a member results in a call to duplicate_decls,
2413 freeing these nodes represents in a significant savings. */
2414 ggc_free (newdecl);
2416 return olddecl;
2419 /* Return zero if the declaration NEWDECL is valid
2420 when the declaration OLDDECL (assumed to be for the same name)
2421 has already been seen.
2422 Otherwise return an error message format string with a %s
2423 where the identifier should go. */
2425 static const char *
2426 redeclaration_error_message (tree newdecl, tree olddecl)
2428 if (TREE_CODE (newdecl) == TYPE_DECL)
2430 /* Because C++ can put things into name space for free,
2431 constructs like "typedef struct foo { ... } foo"
2432 would look like an erroneous redeclaration. */
2433 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2434 return NULL;
2435 else
2436 return G_("redefinition of %q#D");
2438 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2440 /* If this is a pure function, its olddecl will actually be
2441 the original initialization to `0' (which we force to call
2442 abort()). Don't complain about redefinition in this case. */
2443 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2444 && DECL_INITIAL (olddecl) == NULL_TREE)
2445 return NULL;
2447 /* If both functions come from different namespaces, this is not
2448 a redeclaration - this is a conflict with a used function. */
2449 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2450 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2451 && ! decls_match (olddecl, newdecl))
2452 return G_("%qD conflicts with used function");
2454 /* We'll complain about linkage mismatches in
2455 warn_extern_redeclared_static. */
2457 /* Defining the same name twice is no good. */
2458 if (DECL_INITIAL (olddecl) != NULL_TREE
2459 && DECL_INITIAL (newdecl) != NULL_TREE)
2461 if (DECL_NAME (olddecl) == NULL_TREE)
2462 return G_("%q#D not declared in class");
2463 else if (!GNU_INLINE_P (olddecl)
2464 || GNU_INLINE_P (newdecl))
2465 return G_("redefinition of %q#D");
2468 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2470 bool olda = GNU_INLINE_P (olddecl);
2471 bool newa = GNU_INLINE_P (newdecl);
2473 if (olda != newa)
2475 if (newa)
2476 return G_("%q+D redeclared inline with "
2477 "%<gnu_inline%> attribute");
2478 else
2479 return G_("%q+D redeclared inline without "
2480 "%<gnu_inline%> attribute");
2484 check_abi_tag_redeclaration
2485 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2486 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2488 return NULL;
2490 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2492 tree nt, ot;
2494 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2496 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2497 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2498 return G_("redefinition of %q#D");
2499 return NULL;
2502 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2503 || (DECL_TEMPLATE_RESULT (newdecl)
2504 == DECL_TEMPLATE_RESULT (olddecl)))
2505 return NULL;
2507 nt = DECL_TEMPLATE_RESULT (newdecl);
2508 if (DECL_TEMPLATE_INFO (nt))
2509 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2510 ot = DECL_TEMPLATE_RESULT (olddecl);
2511 if (DECL_TEMPLATE_INFO (ot))
2512 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2513 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2514 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2515 return G_("redefinition of %q#D");
2517 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2519 bool olda = GNU_INLINE_P (ot);
2520 bool newa = GNU_INLINE_P (nt);
2522 if (olda != newa)
2524 if (newa)
2525 return G_("%q+D redeclared inline with "
2526 "%<gnu_inline%> attribute");
2527 else
2528 return G_("%q+D redeclared inline without "
2529 "%<gnu_inline%> attribute");
2533 /* Core issue #226 (C++0x):
2535 If a friend function template declaration specifies a
2536 default template-argument, that declaration shall be a
2537 definition and shall be the only declaration of the
2538 function template in the translation unit. */
2539 if ((cxx_dialect != cxx98)
2540 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2541 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2542 /*is_primary=*/true,
2543 /*is_partial=*/false,
2544 /*is_friend_decl=*/2))
2545 return G_("redeclaration of friend %q#D "
2546 "may not have default template arguments");
2548 return NULL;
2550 else if (TREE_CODE (newdecl) == VAR_DECL
2551 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2552 && (! DECL_LANG_SPECIFIC (olddecl)
2553 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2554 || DECL_THREAD_LOCAL_P (newdecl)))
2556 /* Only variables can be thread-local, and all declarations must
2557 agree on this property. */
2558 if (DECL_THREAD_LOCAL_P (newdecl))
2559 return G_("thread-local declaration of %q#D follows "
2560 "non-thread-local declaration");
2561 else
2562 return G_("non-thread-local declaration of %q#D follows "
2563 "thread-local declaration");
2565 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2567 /* The objects have been declared at namespace scope. If either
2568 is a member of an anonymous union, then this is an invalid
2569 redeclaration. For example:
2571 int i;
2572 union { int i; };
2574 is invalid. */
2575 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2576 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2577 return G_("redeclaration of %q#D");
2578 /* If at least one declaration is a reference, there is no
2579 conflict. For example:
2581 int i = 3;
2582 extern int i;
2584 is valid. */
2585 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2586 return NULL;
2587 /* Reject two definitions. */
2588 return G_("redefinition of %q#D");
2590 else
2592 /* Objects declared with block scope: */
2593 /* Reject two definitions, and reject a definition
2594 together with an external reference. */
2595 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2596 return G_("redeclaration of %q#D");
2597 return NULL;
2601 /* Hash and equality functions for the named_label table. */
2603 static hashval_t
2604 named_label_entry_hash (const void *data)
2606 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2607 return DECL_UID (ent->label_decl);
2610 static int
2611 named_label_entry_eq (const void *a, const void *b)
2613 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2614 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2615 return ent_a->label_decl == ent_b->label_decl;
2618 /* Create a new label, named ID. */
2620 static tree
2621 make_label_decl (tree id, int local_p)
2623 struct named_label_entry *ent;
2624 void **slot;
2625 tree decl;
2627 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2629 DECL_CONTEXT (decl) = current_function_decl;
2630 DECL_MODE (decl) = VOIDmode;
2631 C_DECLARED_LABEL_FLAG (decl) = local_p;
2633 /* Say where one reference is to the label, for the sake of the
2634 error if it is not defined. */
2635 DECL_SOURCE_LOCATION (decl) = input_location;
2637 /* Record the fact that this identifier is bound to this label. */
2638 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2640 /* Create the label htab for the function on demand. */
2641 if (!named_labels)
2642 named_labels = htab_create_ggc (13, named_label_entry_hash,
2643 named_label_entry_eq, NULL);
2645 /* Record this label on the list of labels used in this function.
2646 We do this before calling make_label_decl so that we get the
2647 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2648 ent = ggc_alloc_cleared_named_label_entry ();
2649 ent->label_decl = decl;
2651 slot = htab_find_slot (named_labels, ent, INSERT);
2652 gcc_assert (*slot == NULL);
2653 *slot = ent;
2655 return decl;
2658 /* Look for a label named ID in the current function. If one cannot
2659 be found, create one. (We keep track of used, but undefined,
2660 labels, and complain about them at the end of a function.) */
2662 static tree
2663 lookup_label_1 (tree id)
2665 tree decl;
2667 /* You can't use labels at global scope. */
2668 if (current_function_decl == NULL_TREE)
2670 error ("label %qE referenced outside of any function", id);
2671 return NULL_TREE;
2674 /* See if we've already got this label. */
2675 decl = IDENTIFIER_LABEL_VALUE (id);
2676 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2677 return decl;
2679 decl = make_label_decl (id, /*local_p=*/0);
2680 return decl;
2683 /* Wrapper for lookup_label_1. */
2685 tree
2686 lookup_label (tree id)
2688 tree ret;
2689 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2690 ret = lookup_label_1 (id);
2691 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2692 return ret;
2695 /* Declare a local label named ID. */
2697 tree
2698 declare_local_label (tree id)
2700 tree decl;
2701 cp_label_binding bind;
2703 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2704 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2705 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2707 decl = make_label_decl (id, /*local_p=*/1);
2708 bind.label = decl;
2709 VEC_safe_push (cp_label_binding, gc, current_binding_level->shadowed_labels,
2710 bind);
2712 return decl;
2715 /* Returns nonzero if it is ill-formed to jump past the declaration of
2716 DECL. Returns 2 if it's also a real problem. */
2718 static int
2719 decl_jump_unsafe (tree decl)
2721 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2722 with automatic storage duration is not in scope to a point where it is
2723 in scope is ill-formed unless the variable has scalar type, class type
2724 with a trivial default constructor and a trivial destructor, a
2725 cv-qualified version of one of these types, or an array of one of the
2726 preceding types and is declared without an initializer (8.5). */
2727 tree type = TREE_TYPE (decl);
2729 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2730 || type == error_mark_node)
2731 return 0;
2733 type = strip_array_types (type);
2735 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2736 return 2;
2738 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2739 return 1;
2741 return 0;
2744 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2746 static void
2747 identify_goto (tree decl, const location_t *locus)
2749 if (decl)
2750 permerror (input_location, "jump to label %qD", decl);
2751 else
2752 permerror (input_location, "jump to case label");
2753 if (locus)
2754 permerror (*locus, " from here");
2757 /* Check that a single previously seen jump to a newly defined label
2758 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2759 the jump context; NAMES are the names in scope in LEVEL at the jump
2760 context; LOCUS is the source position of the jump or 0. Returns
2761 true if all is well. */
2763 static bool
2764 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2765 bool exited_omp, const location_t *locus)
2767 cp_binding_level *b;
2768 bool identified = false, saw_eh = false, saw_omp = false;
2770 if (exited_omp)
2772 identify_goto (decl, locus);
2773 error (" exits OpenMP structured block");
2774 identified = saw_omp = true;
2777 for (b = current_binding_level; b ; b = b->level_chain)
2779 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2781 for (new_decls = b->names; new_decls != old_decls;
2782 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2783 : TREE_CHAIN (new_decls)))
2785 int problem = decl_jump_unsafe (new_decls);
2786 if (! problem)
2787 continue;
2789 if (!identified)
2791 identify_goto (decl, locus);
2792 identified = true;
2794 if (problem > 1)
2795 error (" crosses initialization of %q+#D", new_decls);
2796 else
2797 permerror (input_location, " enters scope of %q+#D which has "
2798 "non-trivial destructor", new_decls);
2801 if (b == level)
2802 break;
2803 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2805 if (!identified)
2807 identify_goto (decl, locus);
2808 identified = true;
2810 if (b->kind == sk_try)
2811 error (" enters try block");
2812 else
2813 error (" enters catch block");
2814 saw_eh = true;
2816 if (b->kind == sk_omp && !saw_omp)
2818 if (!identified)
2820 identify_goto (decl, locus);
2821 identified = true;
2823 error (" enters OpenMP structured block");
2824 saw_omp = true;
2828 return !identified;
2831 static void
2832 check_previous_goto (tree decl, struct named_label_use_entry *use)
2834 check_previous_goto_1 (decl, use->binding_level,
2835 use->names_in_scope, use->in_omp_scope,
2836 &use->o_goto_locus);
2839 static bool
2840 check_switch_goto (cp_binding_level* level)
2842 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2845 /* Check that a new jump to a label DECL is OK. Called by
2846 finish_goto_stmt. */
2848 void
2849 check_goto (tree decl)
2851 struct named_label_entry *ent, dummy;
2852 bool saw_catch = false, identified = false;
2853 tree bad;
2854 unsigned ix;
2856 /* We can't know where a computed goto is jumping.
2857 So we assume that it's OK. */
2858 if (TREE_CODE (decl) != LABEL_DECL)
2859 return;
2861 /* We didn't record any information about this label when we created it,
2862 and there's not much point since it's trivial to analyze as a return. */
2863 if (decl == cdtor_label)
2864 return;
2866 dummy.label_decl = decl;
2867 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2868 gcc_assert (ent != NULL);
2870 /* If the label hasn't been defined yet, defer checking. */
2871 if (! DECL_INITIAL (decl))
2873 struct named_label_use_entry *new_use;
2875 /* Don't bother creating another use if the last goto had the
2876 same data, and will therefore create the same set of errors. */
2877 if (ent->uses
2878 && ent->uses->names_in_scope == current_binding_level->names)
2879 return;
2881 new_use = ggc_alloc_named_label_use_entry ();
2882 new_use->binding_level = current_binding_level;
2883 new_use->names_in_scope = current_binding_level->names;
2884 new_use->o_goto_locus = input_location;
2885 new_use->in_omp_scope = false;
2887 new_use->next = ent->uses;
2888 ent->uses = new_use;
2889 return;
2892 if (ent->in_try_scope || ent->in_catch_scope
2893 || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2895 permerror (input_location, "jump to label %q+D", decl);
2896 permerror (input_location, " from here");
2897 identified = true;
2900 FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2902 int u = decl_jump_unsafe (bad);
2904 if (u > 1 && DECL_ARTIFICIAL (bad))
2906 /* Can't skip init of __exception_info. */
2907 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
2908 saw_catch = true;
2910 else if (u > 1)
2911 error (" skips initialization of %q+#D", bad);
2912 else
2913 permerror (input_location, " enters scope of %q+#D which has "
2914 "non-trivial destructor", bad);
2917 if (ent->in_try_scope)
2918 error (" enters try block");
2919 else if (ent->in_catch_scope && !saw_catch)
2920 error (" enters catch block");
2922 if (ent->in_omp_scope)
2923 error (" enters OpenMP structured block");
2924 else if (flag_openmp)
2926 cp_binding_level *b;
2927 for (b = current_binding_level; b ; b = b->level_chain)
2929 if (b == ent->binding_level)
2930 break;
2931 if (b->kind == sk_omp)
2933 if (!identified)
2935 permerror (input_location, "jump to label %q+D", decl);
2936 permerror (input_location, " from here");
2937 identified = true;
2939 error (" exits OpenMP structured block");
2940 break;
2946 /* Check that a return is ok wrt OpenMP structured blocks.
2947 Called by finish_return_stmt. Returns true if all is well. */
2949 bool
2950 check_omp_return (void)
2952 cp_binding_level *b;
2953 for (b = current_binding_level; b ; b = b->level_chain)
2954 if (b->kind == sk_omp)
2956 error ("invalid exit from OpenMP structured block");
2957 return false;
2959 else if (b->kind == sk_function_parms)
2960 break;
2961 return true;
2964 /* Define a label, specifying the location in the source file.
2965 Return the LABEL_DECL node for the label. */
2967 static tree
2968 define_label_1 (location_t location, tree name)
2970 struct named_label_entry *ent, dummy;
2971 cp_binding_level *p;
2972 tree decl;
2974 decl = lookup_label (name);
2976 dummy.label_decl = decl;
2977 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2978 gcc_assert (ent != NULL);
2980 /* After labels, make any new cleanups in the function go into their
2981 own new (temporary) binding contour. */
2982 for (p = current_binding_level;
2983 p->kind != sk_function_parms;
2984 p = p->level_chain)
2985 p->more_cleanups_ok = 0;
2987 if (name == get_identifier ("wchar_t"))
2988 permerror (input_location, "label named wchar_t");
2990 if (DECL_INITIAL (decl) != NULL_TREE)
2992 error ("duplicate label %qD", decl);
2993 return error_mark_node;
2995 else
2997 struct named_label_use_entry *use;
2999 /* Mark label as having been defined. */
3000 DECL_INITIAL (decl) = error_mark_node;
3001 /* Say where in the source. */
3002 DECL_SOURCE_LOCATION (decl) = location;
3004 ent->binding_level = current_binding_level;
3005 ent->names_in_scope = current_binding_level->names;
3007 for (use = ent->uses; use ; use = use->next)
3008 check_previous_goto (decl, use);
3009 ent->uses = NULL;
3012 return decl;
3015 /* Wrapper for define_label_1. */
3017 tree
3018 define_label (location_t location, tree name)
3020 tree ret;
3021 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3022 ret = define_label_1 (location, name);
3023 timevar_cond_stop (TV_NAME_LOOKUP, running);
3024 return ret;
3028 struct cp_switch
3030 cp_binding_level *level;
3031 struct cp_switch *next;
3032 /* The SWITCH_STMT being built. */
3033 tree switch_stmt;
3034 /* A splay-tree mapping the low element of a case range to the high
3035 element, or NULL_TREE if there is no high element. Used to
3036 determine whether or not a new case label duplicates an old case
3037 label. We need a tree, rather than simply a hash table, because
3038 of the GNU case range extension. */
3039 splay_tree cases;
3042 /* A stack of the currently active switch statements. The innermost
3043 switch statement is on the top of the stack. There is no need to
3044 mark the stack for garbage collection because it is only active
3045 during the processing of the body of a function, and we never
3046 collect at that point. */
3048 static struct cp_switch *switch_stack;
3050 /* Called right after a switch-statement condition is parsed.
3051 SWITCH_STMT is the switch statement being parsed. */
3053 void
3054 push_switch (tree switch_stmt)
3056 struct cp_switch *p = XNEW (struct cp_switch);
3057 p->level = current_binding_level;
3058 p->next = switch_stack;
3059 p->switch_stmt = switch_stmt;
3060 p->cases = splay_tree_new (case_compare, NULL, NULL);
3061 switch_stack = p;
3064 void
3065 pop_switch (void)
3067 struct cp_switch *cs = switch_stack;
3068 location_t switch_location;
3070 /* Emit warnings as needed. */
3071 switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3072 if (!processing_template_decl)
3073 c_do_switch_warnings (cs->cases, switch_location,
3074 SWITCH_STMT_TYPE (cs->switch_stmt),
3075 SWITCH_STMT_COND (cs->switch_stmt));
3077 splay_tree_delete (cs->cases);
3078 switch_stack = switch_stack->next;
3079 free (cs);
3082 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3083 condition. Note that if TYPE and VALUE are already integral we don't
3084 really do the conversion because the language-independent
3085 warning/optimization code will work better that way. */
3087 static tree
3088 case_conversion (tree type, tree value)
3090 if (value == NULL_TREE)
3091 return value;
3093 if (cxx_dialect >= cxx0x
3094 && (SCOPED_ENUM_P (type)
3095 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3097 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3098 type = type_promotes_to (type);
3099 value = perform_implicit_conversion (type, value, tf_warning_or_error);
3101 return cxx_constant_value (value);
3104 /* Note that we've seen a definition of a case label, and complain if this
3105 is a bad place for one. */
3107 tree
3108 finish_case_label (location_t loc, tree low_value, tree high_value)
3110 tree cond, r;
3111 cp_binding_level *p;
3112 tree type;
3114 if (processing_template_decl)
3116 tree label;
3118 /* For templates, just add the case label; we'll do semantic
3119 analysis at instantiation-time. */
3120 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3121 return add_stmt (build_case_label (low_value, high_value, label));
3124 /* Find the condition on which this switch statement depends. */
3125 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3126 if (cond && TREE_CODE (cond) == TREE_LIST)
3127 cond = TREE_VALUE (cond);
3129 if (!check_switch_goto (switch_stack->level))
3130 return error_mark_node;
3132 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3134 low_value = case_conversion (type, low_value);
3135 high_value = case_conversion (type, high_value);
3137 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3138 low_value, high_value);
3140 /* After labels, make any new cleanups in the function go into their
3141 own new (temporary) binding contour. */
3142 for (p = current_binding_level;
3143 p->kind != sk_function_parms;
3144 p = p->level_chain)
3145 p->more_cleanups_ok = 0;
3147 return r;
3150 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3152 static hashval_t
3153 typename_hash (const void* k)
3155 hashval_t hash;
3156 const_tree const t = (const_tree) k;
3158 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3159 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3161 return hash;
3164 typedef struct typename_info {
3165 tree scope;
3166 tree name;
3167 tree template_id;
3168 bool enum_p;
3169 bool class_p;
3170 } typename_info;
3172 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3173 really of type `typename_info*' */
3175 static int
3176 typename_compare (const void * k1, const void * k2)
3178 const_tree const t1 = (const_tree) k1;
3179 const typename_info *const t2 = (const typename_info *) k2;
3181 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3182 && TYPE_CONTEXT (t1) == t2->scope
3183 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3184 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3185 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3188 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3189 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3191 Returns the new TYPENAME_TYPE. */
3193 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3195 static tree
3196 build_typename_type (tree context, tree name, tree fullname,
3197 enum tag_types tag_type)
3199 tree t;
3200 tree d;
3201 typename_info ti;
3202 void **e;
3203 hashval_t hash;
3205 if (typename_htab == NULL)
3206 typename_htab = htab_create_ggc (61, &typename_hash,
3207 &typename_compare, NULL);
3209 ti.scope = FROB_CONTEXT (context);
3210 ti.name = name;
3211 ti.template_id = fullname;
3212 ti.enum_p = tag_type == enum_type;
3213 ti.class_p = (tag_type == class_type
3214 || tag_type == record_type
3215 || tag_type == union_type);
3216 hash = (htab_hash_pointer (ti.scope)
3217 ^ htab_hash_pointer (ti.name));
3219 /* See if we already have this type. */
3220 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3221 if (*e)
3222 t = (tree) *e;
3223 else
3225 /* Build the TYPENAME_TYPE. */
3226 t = cxx_make_type (TYPENAME_TYPE);
3227 TYPE_CONTEXT (t) = ti.scope;
3228 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3229 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3230 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3232 /* Build the corresponding TYPE_DECL. */
3233 d = build_decl (input_location, TYPE_DECL, name, t);
3234 TYPE_NAME (TREE_TYPE (d)) = d;
3235 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3236 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3237 DECL_ARTIFICIAL (d) = 1;
3239 /* Store it in the hash table. */
3240 *e = t;
3242 /* TYPENAME_TYPEs must always be compared structurally, because
3243 they may or may not resolve down to another type depending on
3244 the currently open classes. */
3245 SET_TYPE_STRUCTURAL_EQUALITY (t);
3248 return t;
3251 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3252 provided to name the type. Returns an appropriate type, unless an
3253 error occurs, in which case error_mark_node is returned. If we
3254 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3255 return that, rather than the _TYPE it corresponds to, in other
3256 cases we look through the type decl. If TF_ERROR is set, complain
3257 about errors, otherwise be quiet. */
3259 tree
3260 make_typename_type (tree context, tree name, enum tag_types tag_type,
3261 tsubst_flags_t complain)
3263 tree fullname;
3264 tree t;
3265 bool want_template;
3267 if (name == error_mark_node
3268 || context == NULL_TREE
3269 || context == error_mark_node)
3270 return error_mark_node;
3272 if (TYPE_P (name))
3274 if (!(TYPE_LANG_SPECIFIC (name)
3275 && (CLASSTYPE_IS_TEMPLATE (name)
3276 || CLASSTYPE_USE_TEMPLATE (name))))
3277 name = TYPE_IDENTIFIER (name);
3278 else
3279 /* Create a TEMPLATE_ID_EXPR for the type. */
3280 name = build_nt (TEMPLATE_ID_EXPR,
3281 CLASSTYPE_TI_TEMPLATE (name),
3282 CLASSTYPE_TI_ARGS (name));
3284 else if (TREE_CODE (name) == TYPE_DECL)
3285 name = DECL_NAME (name);
3287 fullname = name;
3289 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3291 name = TREE_OPERAND (name, 0);
3292 if (TREE_CODE (name) == TEMPLATE_DECL)
3293 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3294 else if (TREE_CODE (name) == OVERLOAD)
3296 if (complain & tf_error)
3297 error ("%qD is not a type", name);
3298 return error_mark_node;
3301 if (TREE_CODE (name) == TEMPLATE_DECL)
3303 if (complain & tf_error)
3304 error ("%qD used without template parameters", name);
3305 return error_mark_node;
3307 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3308 gcc_assert (TYPE_P (context));
3310 if (!MAYBE_CLASS_TYPE_P (context))
3312 if (complain & tf_error)
3313 error ("%q#T is not a class", context);
3314 return error_mark_node;
3317 /* When the CONTEXT is a dependent type, NAME could refer to a
3318 dependent base class of CONTEXT. But look inside it anyway
3319 if CONTEXT is a currently open scope, in case it refers to a
3320 member of the current instantiation or a non-dependent base;
3321 lookup will stop when we hit a dependent base. */
3322 if (!dependent_scope_p (context))
3323 /* We should only set WANT_TYPE when we're a nested typename type.
3324 Then we can give better diagnostics if we find a non-type. */
3325 t = lookup_field (context, name, 2, /*want_type=*/true);
3326 else
3327 t = NULL_TREE;
3329 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3330 return build_typename_type (context, name, fullname, tag_type);
3332 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3334 if (!t)
3336 if (complain & tf_error)
3337 error (want_template ? G_("no class template named %q#T in %q#T")
3338 : G_("no type named %q#T in %q#T"), name, context);
3339 return error_mark_node;
3342 /* Pull out the template from an injected-class-name (or multiple). */
3343 if (want_template)
3344 t = maybe_get_template_decl_from_type_decl (t);
3346 if (TREE_CODE (t) == TREE_LIST)
3348 if (complain & tf_error)
3350 error ("lookup of %qT in %qT is ambiguous", name, context);
3351 print_candidates (t);
3353 return error_mark_node;
3356 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3358 if (complain & tf_error)
3359 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3360 context, name, t);
3361 return error_mark_node;
3363 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3365 if (complain & tf_error)
3366 error ("%<typename %T::%D%> names %q#T, which is not a type",
3367 context, name, t);
3368 return error_mark_node;
3371 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3372 return error_mark_node;
3374 /* If we are currently parsing a template and if T is a typedef accessed
3375 through CONTEXT then we need to remember and check access of T at
3376 template instantiation time. */
3377 add_typedef_to_current_template_for_access_check (t, context, input_location);
3379 if (want_template)
3380 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3381 NULL_TREE, context,
3382 /*entering_scope=*/0,
3383 tf_warning_or_error | tf_user);
3385 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3386 t = TREE_TYPE (t);
3388 maybe_record_typedef_use (t);
3390 return t;
3393 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3394 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3395 in which case error_mark_node is returned.
3397 If PARM_LIST is non-NULL, also make sure that the template parameter
3398 list of TEMPLATE_DECL matches.
3400 If COMPLAIN zero, don't complain about any errors that occur. */
3402 tree
3403 make_unbound_class_template (tree context, tree name, tree parm_list,
3404 tsubst_flags_t complain)
3406 tree t;
3407 tree d;
3409 if (TYPE_P (name))
3410 name = TYPE_IDENTIFIER (name);
3411 else if (DECL_P (name))
3412 name = DECL_NAME (name);
3413 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3415 if (!dependent_type_p (context)
3416 || currently_open_class (context))
3418 tree tmpl = NULL_TREE;
3420 if (MAYBE_CLASS_TYPE_P (context))
3421 tmpl = lookup_field (context, name, 0, false);
3423 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3424 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3426 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3428 if (complain & tf_error)
3429 error ("no class template named %q#T in %q#T", name, context);
3430 return error_mark_node;
3433 if (parm_list
3434 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3436 if (complain & tf_error)
3438 error ("template parameters do not match template");
3439 error ("%q+D declared here", tmpl);
3441 return error_mark_node;
3444 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3445 complain))
3446 return error_mark_node;
3448 return tmpl;
3451 /* Build the UNBOUND_CLASS_TEMPLATE. */
3452 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3453 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3454 TREE_TYPE (t) = NULL_TREE;
3455 SET_TYPE_STRUCTURAL_EQUALITY (t);
3457 /* Build the corresponding TEMPLATE_DECL. */
3458 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3459 TYPE_NAME (TREE_TYPE (d)) = d;
3460 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3461 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3462 DECL_ARTIFICIAL (d) = 1;
3463 DECL_TEMPLATE_PARMS (d) = parm_list;
3465 return t;
3470 /* Push the declarations of builtin types into the namespace.
3471 RID_INDEX is the index of the builtin type in the array
3472 RID_POINTERS. NAME is the name used when looking up the builtin
3473 type. TYPE is the _TYPE node for the builtin type. */
3475 void
3476 record_builtin_type (enum rid rid_index,
3477 const char* name,
3478 tree type)
3480 tree rname = NULL_TREE, tname = NULL_TREE;
3481 tree tdecl = NULL_TREE;
3483 if ((int) rid_index < (int) RID_MAX)
3484 rname = ridpointers[(int) rid_index];
3485 if (name)
3486 tname = get_identifier (name);
3488 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3489 eliminated. Built-in types should not be looked up name; their
3490 names are keywords that the parser can recognize. However, there
3491 is code in c-common.c that uses identifier_global_value to look
3492 up built-in types by name. */
3493 if (tname)
3495 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3496 DECL_ARTIFICIAL (tdecl) = 1;
3497 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3499 if (rname)
3501 if (!tdecl)
3503 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3504 DECL_ARTIFICIAL (tdecl) = 1;
3506 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3509 if (!TYPE_NAME (type))
3510 TYPE_NAME (type) = tdecl;
3512 if (tdecl)
3513 debug_hooks->type_decl (tdecl, 0);
3516 /* Record one of the standard Java types.
3517 * Declare it as having the given NAME.
3518 * If SIZE > 0, it is the size of one of the integral types;
3519 * otherwise it is the negative of the size of one of the other types. */
3521 static tree
3522 record_builtin_java_type (const char* name, int size)
3524 tree type, decl;
3525 if (size > 0)
3527 type = build_nonstandard_integer_type (size, 0);
3528 type = build_distinct_type_copy (type);
3530 else if (size > -32)
3532 tree stype;
3533 /* "__java_char" or ""__java_boolean". */
3534 type = build_nonstandard_integer_type (-size, 1);
3535 type = build_distinct_type_copy (type);
3536 /* Get the signed type cached and attached to the unsigned type,
3537 so it doesn't get garbage-collected at "random" times,
3538 causing potential codegen differences out of different UIDs
3539 and different alias set numbers. */
3540 stype = build_nonstandard_integer_type (-size, 0);
3541 stype = build_distinct_type_copy (stype);
3542 TREE_CHAIN (type) = stype;
3543 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3545 else
3546 { /* "__java_float" or ""__java_double". */
3547 type = make_node (REAL_TYPE);
3548 TYPE_PRECISION (type) = - size;
3549 layout_type (type);
3551 record_builtin_type (RID_MAX, name, type);
3552 decl = TYPE_NAME (type);
3554 /* Suppress generate debug symbol entries for these types,
3555 since for normal C++ they are just clutter.
3556 However, push_lang_context undoes this if extern "Java" is seen. */
3557 DECL_IGNORED_P (decl) = 1;
3559 TYPE_FOR_JAVA (type) = 1;
3560 return type;
3563 /* Push a type into the namespace so that the back ends ignore it. */
3565 static void
3566 record_unknown_type (tree type, const char* name)
3568 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3569 TYPE_DECL, get_identifier (name), type));
3570 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3571 DECL_IGNORED_P (decl) = 1;
3572 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3573 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3574 TYPE_ALIGN (type) = 1;
3575 TYPE_USER_ALIGN (type) = 0;
3576 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3579 /* A string for which we should create an IDENTIFIER_NODE at
3580 startup. */
3582 typedef struct predefined_identifier
3584 /* The name of the identifier. */
3585 const char *const name;
3586 /* The place where the IDENTIFIER_NODE should be stored. */
3587 tree *const node;
3588 /* Nonzero if this is the name of a constructor or destructor. */
3589 const int ctor_or_dtor_p;
3590 } predefined_identifier;
3592 /* Create all the predefined identifiers. */
3594 static void
3595 initialize_predefined_identifiers (void)
3597 const predefined_identifier *pid;
3599 /* A table of identifiers to create at startup. */
3600 static const predefined_identifier predefined_identifiers[] = {
3601 { "C++", &lang_name_cplusplus, 0 },
3602 { "C", &lang_name_c, 0 },
3603 { "Java", &lang_name_java, 0 },
3604 /* Some of these names have a trailing space so that it is
3605 impossible for them to conflict with names written by users. */
3606 { "__ct ", &ctor_identifier, 1 },
3607 { "__base_ctor ", &base_ctor_identifier, 1 },
3608 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3609 { "__dt ", &dtor_identifier, 1 },
3610 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3611 { "__base_dtor ", &base_dtor_identifier, 1 },
3612 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3613 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3614 { "nelts", &nelts_identifier, 0 },
3615 { THIS_NAME, &this_identifier, 0 },
3616 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3617 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3618 { "_vptr", &vptr_identifier, 0 },
3619 { "__vtt_parm", &vtt_parm_identifier, 0 },
3620 { "::", &global_scope_name, 0 },
3621 { "std", &std_identifier, 0 },
3622 { NULL, NULL, 0 }
3625 for (pid = predefined_identifiers; pid->name; ++pid)
3627 *pid->node = get_identifier (pid->name);
3628 if (pid->ctor_or_dtor_p)
3629 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3633 /* Create the predefined scalar types of C,
3634 and some nodes representing standard constants (0, 1, (void *)0).
3635 Initialize the global binding level.
3636 Make definitions for built-in primitive functions. */
3638 void
3639 cxx_init_decl_processing (void)
3641 tree void_ftype;
3642 tree void_ftype_ptr;
3644 /* Create all the identifiers we need. */
3645 initialize_predefined_identifiers ();
3647 /* Create the global variables. */
3648 push_to_top_level ();
3650 current_function_decl = NULL_TREE;
3651 current_binding_level = NULL;
3652 /* Enter the global namespace. */
3653 gcc_assert (global_namespace == NULL_TREE);
3654 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3655 void_type_node);
3656 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3657 TREE_PUBLIC (global_namespace) = 1;
3658 begin_scope (sk_namespace, global_namespace);
3660 if (flag_visibility_ms_compat)
3661 default_visibility = VISIBILITY_HIDDEN;
3663 /* Initially, C. */
3664 current_lang_name = lang_name_c;
3666 /* Create the `std' namespace. */
3667 push_namespace (std_identifier);
3668 std_node = current_namespace;
3669 pop_namespace ();
3671 c_common_nodes_and_builtins ();
3673 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3674 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3675 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3676 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3677 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3678 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3679 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3680 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3682 integer_two_node = build_int_cst (NULL_TREE, 2);
3684 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3685 truthvalue_type_node = boolean_type_node;
3686 truthvalue_false_node = boolean_false_node;
3687 truthvalue_true_node = boolean_true_node;
3689 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3690 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3691 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3693 #if 0
3694 record_builtin_type (RID_MAX, NULL, string_type_node);
3695 #endif
3697 delta_type_node = ptrdiff_type_node;
3698 vtable_index_type = ptrdiff_type_node;
3700 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3701 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3702 void_ftype_ptr = build_function_type_list (void_type_node,
3703 ptr_type_node, NULL_TREE);
3704 void_ftype_ptr
3705 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3707 /* C++ extensions */
3709 unknown_type_node = make_node (LANG_TYPE);
3710 record_unknown_type (unknown_type_node, "unknown type");
3712 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3713 TREE_TYPE (unknown_type_node) = unknown_type_node;
3715 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3716 result. */
3717 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3718 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3720 init_list_type_node = make_node (LANG_TYPE);
3721 record_unknown_type (init_list_type_node, "init list");
3724 /* Make sure we get a unique function type, so we can give
3725 its pointer type a name. (This wins for gdb.) */
3726 tree vfunc_type = make_node (FUNCTION_TYPE);
3727 TREE_TYPE (vfunc_type) = integer_type_node;
3728 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3729 layout_type (vfunc_type);
3731 vtable_entry_type = build_pointer_type (vfunc_type);
3733 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3735 vtbl_type_node
3736 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3737 layout_type (vtbl_type_node);
3738 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3739 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3740 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3741 layout_type (vtbl_ptr_type_node);
3742 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3744 push_namespace (get_identifier ("__cxxabiv1"));
3745 abi_node = current_namespace;
3746 pop_namespace ();
3748 global_type_node = make_node (LANG_TYPE);
3749 record_unknown_type (global_type_node, "global type");
3751 /* Now, C++. */
3752 current_lang_name = lang_name_cplusplus;
3755 tree newattrs, extvisattr;
3756 tree newtype, deltype;
3757 tree ptr_ftype_sizetype;
3758 tree new_eh_spec;
3760 ptr_ftype_sizetype
3761 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3762 if (cxx_dialect == cxx98)
3764 tree bad_alloc_id;
3765 tree bad_alloc_type_node;
3766 tree bad_alloc_decl;
3768 push_namespace (std_identifier);
3769 bad_alloc_id = get_identifier ("bad_alloc");
3770 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3771 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3772 bad_alloc_decl
3773 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3774 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3775 pop_namespace ();
3777 new_eh_spec
3778 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3780 else
3781 new_eh_spec = noexcept_false_spec;
3783 /* Ensure attribs.c is initialized. */
3784 init_attributes ();
3785 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3786 NULL_TREE);
3787 newattrs = tree_cons (get_identifier ("alloc_size"),
3788 build_tree_list (NULL_TREE, integer_one_node),
3789 extvisattr);
3790 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3791 newtype = build_exception_variant (newtype, new_eh_spec);
3792 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3793 deltype = build_exception_variant (deltype, empty_except_spec);
3794 push_cp_library_fn (NEW_EXPR, newtype);
3795 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3796 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3797 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3799 nullptr_type_node = make_node (NULLPTR_TYPE);
3800 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3801 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3802 TYPE_UNSIGNED (nullptr_type_node) = 1;
3803 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3804 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3805 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3806 nullptr_node = build_int_cst (nullptr_type_node, 0);
3809 abort_fndecl
3810 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3812 /* Perform other language dependent initializations. */
3813 init_class_processing ();
3814 init_rtti_processing ();
3815 init_template_processing ();
3817 if (flag_exceptions)
3818 init_exception_processing ();
3820 if (! supports_one_only ())
3821 flag_weak = 0;
3823 make_fname_decl = cp_make_fname_decl;
3824 start_fname_decls ();
3826 /* Show we use EH for cleanups. */
3827 if (flag_exceptions)
3828 using_eh_for_cleanups ();
3831 /* Generate an initializer for a function naming variable from
3832 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3833 filled in with the type of the init. */
3835 tree
3836 cp_fname_init (const char* name, tree *type_p)
3838 tree domain = NULL_TREE;
3839 tree type;
3840 tree init = NULL_TREE;
3841 size_t length = 0;
3843 if (name)
3845 length = strlen (name);
3846 domain = build_index_type (size_int (length));
3847 init = build_string (length + 1, name);
3850 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3851 type = build_cplus_array_type (type, domain);
3853 *type_p = type;
3855 if (init)
3856 TREE_TYPE (init) = type;
3857 else
3858 init = error_mark_node;
3860 return init;
3863 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3864 the decl, LOC is the location to give the decl, NAME is the
3865 initialization string and TYPE_DEP indicates whether NAME depended
3866 on the type of the function. We make use of that to detect
3867 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3868 at the point of first use, so we mustn't push the decl now. */
3870 static tree
3871 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3873 const char *const name = (type_dep && processing_template_decl
3874 ? NULL : fname_as_string (type_dep));
3875 tree type;
3876 tree init = cp_fname_init (name, &type);
3877 tree decl = build_decl (loc, VAR_DECL, id, type);
3879 if (name)
3880 free (CONST_CAST (char *, name));
3882 /* As we're using pushdecl_with_scope, we must set the context. */
3883 DECL_CONTEXT (decl) = current_function_decl;
3885 TREE_STATIC (decl) = 1;
3886 TREE_READONLY (decl) = 1;
3887 DECL_ARTIFICIAL (decl) = 1;
3889 TREE_USED (decl) = 1;
3891 if (current_function_decl)
3893 cp_binding_level *b = current_binding_level;
3894 if (b->kind == sk_function_parms)
3895 return error_mark_node;
3896 while (b->level_chain->kind != sk_function_parms)
3897 b = b->level_chain;
3898 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3899 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3900 LOOKUP_ONLYCONVERTING);
3902 else
3904 DECL_THIS_STATIC (decl) = true;
3905 pushdecl_top_level_and_finish (decl, init);
3908 return decl;
3911 static tree
3912 builtin_function_1 (tree decl, tree context, bool is_global)
3914 tree id = DECL_NAME (decl);
3915 const char *name = IDENTIFIER_POINTER (id);
3917 retrofit_lang_decl (decl);
3919 DECL_ARTIFICIAL (decl) = 1;
3920 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3921 SET_DECL_LANGUAGE (decl, lang_c);
3922 /* Runtime library routines are, by definition, available in an
3923 external shared object. */
3924 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3925 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3927 DECL_CONTEXT (decl) = context;
3929 if (is_global)
3930 pushdecl_top_level (decl);
3931 else
3932 pushdecl (decl);
3934 /* A function in the user's namespace should have an explicit
3935 declaration before it is used. Mark the built-in function as
3936 anticipated but not actually declared. */
3937 if (name[0] != '_' || name[1] != '_')
3938 DECL_ANTICIPATED (decl) = 1;
3939 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3941 size_t len = strlen (name);
3943 /* Treat __*_chk fortification functions as anticipated as well,
3944 unless they are __builtin_*. */
3945 if (len > strlen ("___chk")
3946 && memcmp (name + len - strlen ("_chk"),
3947 "_chk", strlen ("_chk") + 1) == 0)
3948 DECL_ANTICIPATED (decl) = 1;
3951 return decl;
3954 tree
3955 cxx_builtin_function (tree decl)
3957 tree id = DECL_NAME (decl);
3958 const char *name = IDENTIFIER_POINTER (id);
3959 /* All builtins that don't begin with an '_' should additionally
3960 go in the 'std' namespace. */
3961 if (name[0] != '_')
3963 tree decl2 = copy_node(decl);
3964 push_namespace (std_identifier);
3965 builtin_function_1 (decl2, std_node, false);
3966 pop_namespace ();
3969 return builtin_function_1 (decl, NULL_TREE, false);
3972 /* Like cxx_builtin_function, but guarantee the function is added to the global
3973 scope. This is to allow function specific options to add new machine
3974 dependent builtins when the target ISA changes via attribute((target(...)))
3975 which saves space on program startup if the program does not use non-generic
3976 ISAs. */
3978 tree
3979 cxx_builtin_function_ext_scope (tree decl)
3982 tree id = DECL_NAME (decl);
3983 const char *name = IDENTIFIER_POINTER (id);
3984 /* All builtins that don't begin with an '_' should additionally
3985 go in the 'std' namespace. */
3986 if (name[0] != '_')
3988 tree decl2 = copy_node(decl);
3989 push_namespace (std_identifier);
3990 builtin_function_1 (decl2, std_node, true);
3991 pop_namespace ();
3994 return builtin_function_1 (decl, NULL_TREE, true);
3997 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3998 function. Not called directly. */
4000 static tree
4001 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
4003 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4004 DECL_EXTERNAL (fn) = 1;
4005 TREE_PUBLIC (fn) = 1;
4006 DECL_ARTIFICIAL (fn) = 1;
4007 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4008 SET_DECL_LANGUAGE (fn, lang_c);
4009 /* Runtime library routines are, by definition, available in an
4010 external shared object. */
4011 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4012 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4013 return fn;
4016 /* Returns the _DECL for a library function with C linkage.
4017 We assume that such functions never throw; if this is incorrect,
4018 callers should unset TREE_NOTHROW. */
4020 static tree
4021 build_library_fn (tree name, tree type)
4023 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
4024 TREE_NOTHROW (fn) = 1;
4025 return fn;
4028 /* Returns the _DECL for a library function with C++ linkage. */
4030 static tree
4031 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
4033 tree fn = build_library_fn_1 (name, operator_code, type);
4034 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
4035 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4036 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4037 return fn;
4040 /* Like build_library_fn, but takes a C string instead of an
4041 IDENTIFIER_NODE. */
4043 tree
4044 build_library_fn_ptr (const char* name, tree type)
4046 return build_library_fn (get_identifier (name), type);
4049 /* Like build_cp_library_fn, but takes a C string instead of an
4050 IDENTIFIER_NODE. */
4052 tree
4053 build_cp_library_fn_ptr (const char* name, tree type)
4055 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
4058 /* Like build_library_fn, but also pushes the function so that we will
4059 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4060 may throw exceptions listed in RAISES. */
4062 tree
4063 push_library_fn (tree name, tree type, tree raises)
4065 tree fn;
4067 if (raises)
4068 type = build_exception_variant (type, raises);
4070 fn = build_library_fn (name, type);
4071 pushdecl_top_level (fn);
4072 return fn;
4075 /* Like build_cp_library_fn, but also pushes the function so that it
4076 will be found by normal lookup. */
4078 static tree
4079 push_cp_library_fn (enum tree_code operator_code, tree type)
4081 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4082 operator_code,
4083 type);
4084 pushdecl (fn);
4085 if (flag_tm)
4086 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4087 return fn;
4090 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4091 a FUNCTION_TYPE. */
4093 tree
4094 push_void_library_fn (tree name, tree parmtypes)
4096 tree type = build_function_type (void_type_node, parmtypes);
4097 return push_library_fn (name, type, NULL_TREE);
4100 /* Like push_library_fn, but also note that this function throws
4101 and does not return. Used for __throw_foo and the like. */
4103 tree
4104 push_throw_library_fn (tree name, tree type)
4106 tree fn = push_library_fn (name, type, NULL_TREE);
4107 TREE_THIS_VOLATILE (fn) = 1;
4108 TREE_NOTHROW (fn) = 0;
4109 return fn;
4112 /* When we call finish_struct for an anonymous union, we create
4113 default copy constructors and such. But, an anonymous union
4114 shouldn't have such things; this function undoes the damage to the
4115 anonymous union type T.
4117 (The reason that we create the synthesized methods is that we don't
4118 distinguish `union { int i; }' from `typedef union { int i; } U'.
4119 The first is an anonymous union; the second is just an ordinary
4120 union type.) */
4122 void
4123 fixup_anonymous_aggr (tree t)
4125 tree *q;
4127 /* Wipe out memory of synthesized methods. */
4128 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4129 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4130 TYPE_HAS_COPY_CTOR (t) = 0;
4131 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4132 TYPE_HAS_COPY_ASSIGN (t) = 0;
4133 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4135 /* Splice the implicitly generated functions out of the TYPE_METHODS
4136 list. */
4137 q = &TYPE_METHODS (t);
4138 while (*q)
4140 if (DECL_ARTIFICIAL (*q))
4141 *q = TREE_CHAIN (*q);
4142 else
4143 q = &DECL_CHAIN (*q);
4146 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4147 if (TYPE_METHODS (t))
4149 tree decl = TYPE_MAIN_DECL (t);
4151 if (TREE_CODE (t) != UNION_TYPE)
4152 error_at (DECL_SOURCE_LOCATION (decl),
4153 "an anonymous struct cannot have function members");
4154 else
4155 error_at (DECL_SOURCE_LOCATION (decl),
4156 "an anonymous union cannot have function members");
4159 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4160 assignment operators (because they cannot have these methods themselves).
4161 For anonymous unions this is already checked because they are not allowed
4162 in any union, otherwise we have to check it. */
4163 if (TREE_CODE (t) != UNION_TYPE)
4165 tree field, type;
4167 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4168 if (TREE_CODE (field) == FIELD_DECL)
4170 type = TREE_TYPE (field);
4171 if (CLASS_TYPE_P (type))
4173 if (TYPE_NEEDS_CONSTRUCTING (type))
4174 error ("member %q+#D with constructor not allowed "
4175 "in anonymous aggregate", field);
4176 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4177 error ("member %q+#D with destructor not allowed "
4178 "in anonymous aggregate", field);
4179 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4180 error ("member %q+#D with copy assignment operator "
4181 "not allowed in anonymous aggregate", field);
4187 /* Warn for an attribute located at LOCATION that appertains to the
4188 class type CLASS_TYPE that has not been properly placed after its
4189 class-key, in it class-specifier. */
4191 void
4192 warn_misplaced_attr_for_class_type (source_location location,
4193 tree class_type)
4195 gcc_assert (TAGGED_TYPE_P (class_type));
4197 warning_at (location, OPT_Wattributes,
4198 "attribute ignored in declaration "
4199 "of %q#T", class_type);
4200 inform (location,
4201 "attribute for %q#T must follow the %qs keyword",
4202 class_type, class_key_or_enum_as_string (class_type));
4205 /* Make sure that a declaration with no declarator is well-formed, i.e.
4206 just declares a tagged type or anonymous union.
4208 Returns the type declared; or NULL_TREE if none. */
4210 tree
4211 check_tag_decl (cp_decl_specifier_seq *declspecs,
4212 bool explicit_type_instantiation_p)
4214 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4215 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4216 /* If a class, struct, or enum type is declared by the DECLSPECS
4217 (i.e, if a class-specifier, enum-specifier, or non-typename
4218 elaborated-type-specifier appears in the DECLSPECS),
4219 DECLARED_TYPE is set to the corresponding type. */
4220 tree declared_type = NULL_TREE;
4221 bool error_p = false;
4223 if (declspecs->multiple_types_p)
4224 error ("multiple types in one declaration");
4225 else if (declspecs->redefined_builtin_type)
4227 if (!in_system_header)
4228 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4229 "redeclaration of C++ built-in type %qT",
4230 declspecs->redefined_builtin_type);
4231 return NULL_TREE;
4234 if (declspecs->type
4235 && TYPE_P (declspecs->type)
4236 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4237 && MAYBE_CLASS_TYPE_P (declspecs->type))
4238 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4239 declared_type = declspecs->type;
4240 else if (declspecs->type == error_mark_node)
4241 error_p = true;
4242 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4243 permerror (input_location, "declaration does not declare anything");
4244 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4246 error ("%<auto%> can only be specified for variables "
4247 "or function declarations");
4248 return error_mark_node;
4250 /* Check for an anonymous union. */
4251 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4252 && TYPE_ANONYMOUS_P (declared_type))
4254 /* 7/3 In a simple-declaration, the optional init-declarator-list
4255 can be omitted only when declaring a class (clause 9) or
4256 enumeration (7.2), that is, when the decl-specifier-seq contains
4257 either a class-specifier, an elaborated-type-specifier with
4258 a class-key (9.1), or an enum-specifier. In these cases and
4259 whenever a class-specifier or enum-specifier is present in the
4260 decl-specifier-seq, the identifiers in these specifiers are among
4261 the names being declared by the declaration (as class-name,
4262 enum-names, or enumerators, depending on the syntax). In such
4263 cases, and except for the declaration of an unnamed bit-field (9.6),
4264 the decl-specifier-seq shall introduce one or more names into the
4265 program, or shall redeclare a name introduced by a previous
4266 declaration. [Example:
4267 enum { }; // ill-formed
4268 typedef class { }; // ill-formed
4269 --end example] */
4270 if (saw_typedef)
4272 error ("missing type-name in typedef-declaration");
4273 return NULL_TREE;
4275 /* Anonymous unions are objects, so they can have specifiers. */;
4276 SET_ANON_AGGR_TYPE_P (declared_type);
4278 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4279 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4282 else
4284 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4285 || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4286 error ("%qs can only be specified for functions",
4287 decl_spec_seq_has_spec_p (declspecs, ds_inline)
4288 ? "inline" : "virtual");
4289 else if (saw_friend
4290 && (!current_class_type
4291 || current_scope () != current_class_type))
4292 error ("%<friend%> can only be specified inside a class");
4293 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4294 error ("%<explicit%> can only be specified for constructors");
4295 else if (declspecs->storage_class)
4296 error ("a storage class can only be specified for objects "
4297 "and functions");
4298 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4299 || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4300 || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4301 || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4302 error ("qualifiers can only be specified for objects "
4303 "and functions");
4304 else if (saw_typedef)
4305 warning (0, "%<typedef%> was ignored in this declaration");
4306 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4307 error ("%<constexpr%> cannot be used for type declarations");
4310 if (declspecs->attributes && warn_attributes && declared_type)
4312 location_t loc;
4313 if (!CLASS_TYPE_P (declared_type)
4314 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4315 /* For a non-template class, use the name location. */
4316 loc = location_of (declared_type);
4317 else
4318 /* For a template class (an explicit instantiation), use the
4319 current location. */
4320 loc = input_location;
4322 if (explicit_type_instantiation_p)
4323 /* [dcl.attr.grammar]/4:
4325 No attribute-specifier-seq shall appertain to an explicit
4326 instantiation. */
4328 warning_at (loc, OPT_Wattributes,
4329 "attribute ignored in explicit instantiation %q#T",
4330 declared_type);
4331 inform (loc,
4332 "no attribute can be applied to "
4333 "an explicit instantiation");
4335 else
4336 warn_misplaced_attr_for_class_type (loc, declared_type);
4339 return declared_type;
4342 /* Called when a declaration is seen that contains no names to declare.
4343 If its type is a reference to a structure, union or enum inherited
4344 from a containing scope, shadow that tag name for the current scope
4345 with a forward reference.
4346 If its type defines a new named structure or union
4347 or defines an enum, it is valid but we need not do anything here.
4348 Otherwise, it is an error.
4350 C++: may have to grok the declspecs to learn about static,
4351 complain for anonymous unions.
4353 Returns the TYPE declared -- or NULL_TREE if none. */
4355 tree
4356 shadow_tag (cp_decl_specifier_seq *declspecs)
4358 tree t = check_tag_decl (declspecs,
4359 /*explicit_type_instantiation_p=*/false);
4361 if (!t)
4362 return NULL_TREE;
4364 if (maybe_process_partial_specialization (t) == error_mark_node)
4365 return NULL_TREE;
4367 /* This is where the variables in an anonymous union are
4368 declared. An anonymous union declaration looks like:
4369 union { ... } ;
4370 because there is no declarator after the union, the parser
4371 sends that declaration here. */
4372 if (ANON_AGGR_TYPE_P (t))
4374 fixup_anonymous_aggr (t);
4376 if (TYPE_FIELDS (t))
4378 tree decl = grokdeclarator (/*declarator=*/NULL,
4379 declspecs, NORMAL, 0, NULL);
4380 finish_anon_union (decl);
4384 return t;
4387 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4389 tree
4390 groktypename (cp_decl_specifier_seq *type_specifiers,
4391 const cp_declarator *declarator,
4392 bool is_template_arg)
4394 tree attrs;
4395 tree type;
4396 enum decl_context context
4397 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4398 attrs = type_specifiers->attributes;
4399 type_specifiers->attributes = NULL_TREE;
4400 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4401 if (attrs && type != error_mark_node)
4403 if (CLASS_TYPE_P (type))
4404 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4405 "outside of definition", type);
4406 else if (MAYBE_CLASS_TYPE_P (type))
4407 /* A template type parameter or other dependent type. */
4408 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4409 "type %qT without an associated declaration", type);
4410 else
4411 cplus_decl_attributes (&type, attrs, 0);
4413 return type;
4416 /* Process a DECLARATOR for a function-scope variable declaration,
4417 namespace-scope variable declaration, or function declaration.
4418 (Function definitions go through start_function; class member
4419 declarations appearing in the body of the class go through
4420 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4421 If an error occurs, the error_mark_node is returned instead.
4423 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4424 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4425 for an explicitly defaulted function, or SD_DELETED for an explicitly
4426 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4427 implicitly initialized via a default constructor. ATTRIBUTES and
4428 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4430 The scope represented by the context of the returned DECL is pushed
4431 (if it is not the global namespace) and is assigned to
4432 *PUSHED_SCOPE_P. The caller is then responsible for calling
4433 pop_scope on *PUSHED_SCOPE_P if it is set. */
4435 tree
4436 start_decl (const cp_declarator *declarator,
4437 cp_decl_specifier_seq *declspecs,
4438 int initialized,
4439 tree attributes,
4440 tree prefix_attributes,
4441 tree *pushed_scope_p)
4443 tree decl;
4444 tree context;
4445 bool was_public;
4446 int flags;
4447 bool alias;
4449 *pushed_scope_p = NULL_TREE;
4451 /* An object declared as __attribute__((deprecated)) suppresses
4452 warnings of uses of other deprecated items. */
4453 if (lookup_attribute ("deprecated", attributes))
4454 deprecated_state = DEPRECATED_SUPPRESS;
4456 attributes = chainon (attributes, prefix_attributes);
4458 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4459 &attributes);
4461 deprecated_state = DEPRECATED_NORMAL;
4463 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4464 || decl == error_mark_node)
4465 return error_mark_node;
4467 context = CP_DECL_CONTEXT (decl);
4468 if (context != global_namespace)
4469 *pushed_scope_p = push_scope (context);
4471 if (initialized)
4472 /* Is it valid for this decl to have an initializer at all?
4473 If not, set INITIALIZED to zero, which will indirectly
4474 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4475 switch (TREE_CODE (decl))
4477 case TYPE_DECL:
4478 error ("typedef %qD is initialized (use decltype instead)", decl);
4479 return error_mark_node;
4481 case FUNCTION_DECL:
4482 if (initialized == SD_DELETED)
4483 /* We'll handle the rest of the semantics later, but we need to
4484 set this now so it's visible to duplicate_decls. */
4485 DECL_DELETED_FN (decl) = 1;
4486 break;
4488 default:
4489 break;
4492 if (initialized)
4494 if (! toplevel_bindings_p ()
4495 && DECL_EXTERNAL (decl))
4496 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4497 decl);
4498 DECL_EXTERNAL (decl) = 0;
4499 if (toplevel_bindings_p ())
4500 TREE_STATIC (decl) = 1;
4502 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4504 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4505 record_key_method_defined (decl);
4507 /* If this is a typedef that names the class for linkage purposes
4508 (7.1.3p8), apply any attributes directly to the type. */
4509 if (TREE_CODE (decl) == TYPE_DECL
4510 && TAGGED_TYPE_P (TREE_TYPE (decl))
4511 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4512 flags = ATTR_FLAG_TYPE_IN_PLACE;
4513 else
4514 flags = 0;
4516 /* Set attributes here so if duplicate decl, will have proper attributes. */
4517 cplus_decl_attributes (&decl, attributes, flags);
4519 /* Dllimported symbols cannot be defined. Static data members (which
4520 can be initialized in-class and dllimported) go through grokfield,
4521 not here, so we don't need to exclude those decls when checking for
4522 a definition. */
4523 if (initialized && DECL_DLLIMPORT_P (decl))
4525 error ("definition of %q#D is marked %<dllimport%>", decl);
4526 DECL_DLLIMPORT_P (decl) = 0;
4529 /* If #pragma weak was used, mark the decl weak now. */
4530 if (!processing_template_decl)
4531 maybe_apply_pragma_weak (decl);
4533 if (TREE_CODE (decl) == FUNCTION_DECL
4534 && DECL_DECLARED_INLINE_P (decl)
4535 && DECL_UNINLINABLE (decl)
4536 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4537 warning (0, "inline function %q+D given attribute noinline", decl);
4539 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4541 if (TREE_CODE (decl) == VAR_DECL)
4543 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4544 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4545 error ("%q#D is not a static member of %q#T", decl, context);
4546 else
4548 if (DECL_CONTEXT (field) != context)
4550 if (!same_type_p (DECL_CONTEXT (field), context))
4551 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4552 "to be defined as %<%T::%D%>",
4553 DECL_CONTEXT (field), DECL_NAME (decl),
4554 context, DECL_NAME (decl));
4555 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4557 /* Static data member are tricky; an in-class initialization
4558 still doesn't provide a definition, so the in-class
4559 declaration will have DECL_EXTERNAL set, but will have an
4560 initialization. Thus, duplicate_decls won't warn
4561 about this situation, and so we check here. */
4562 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4563 error ("duplicate initialization of %qD", decl);
4564 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4565 decl = field;
4566 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4567 && !DECL_DECLARED_CONSTEXPR_P (field))
4568 error ("%qD declared %<constexpr%> outside its class", field);
4571 else
4573 tree field = check_classfn (context, decl,
4574 (processing_template_decl
4575 > template_class_depth (context))
4576 ? current_template_parms
4577 : NULL_TREE);
4578 if (field && field != error_mark_node
4579 && duplicate_decls (decl, field,
4580 /*newdecl_is_friend=*/false))
4581 decl = field;
4584 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4585 DECL_IN_AGGR_P (decl) = 0;
4586 /* Do not mark DECL as an explicit specialization if it was not
4587 already marked as an instantiation; a declaration should
4588 never be marked as a specialization unless we know what
4589 template is being specialized. */
4590 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4592 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4594 /* [temp.expl.spec] An explicit specialization of a static data
4595 member of a template is a definition if the declaration
4596 includes an initializer; otherwise, it is a declaration.
4598 We check for processing_specialization so this only applies
4599 to the new specialization syntax. */
4600 if (!initialized && processing_specialization)
4601 DECL_EXTERNAL (decl) = 1;
4604 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4605 /* Aliases are definitions. */
4606 && !alias)
4607 permerror (input_location, "declaration of %q#D outside of class is not definition",
4608 decl);
4611 was_public = TREE_PUBLIC (decl);
4613 /* Enter this declaration into the symbol table. */
4614 decl = maybe_push_decl (decl);
4616 if (processing_template_decl)
4617 decl = push_template_decl (decl);
4618 if (decl == error_mark_node)
4619 return error_mark_node;
4621 if (TREE_CODE (decl) == VAR_DECL
4622 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4623 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4625 /* This is a const variable with implicit 'static'. Set
4626 DECL_THIS_STATIC so we can tell it from variables that are
4627 !TREE_PUBLIC because of the anonymous namespace. */
4628 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4629 DECL_THIS_STATIC (decl) = 1;
4632 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4633 start_decl_1 (decl, initialized);
4635 return decl;
4638 /* Process the declaration of a variable DECL. INITIALIZED is true
4639 iff DECL is explicitly initialized. (INITIALIZED is false if the
4640 variable is initialized via an implicitly-called constructor.)
4641 This function must be called for ordinary variables (including, for
4642 example, implicit instantiations of templates), but must not be
4643 called for template declarations. */
4645 void
4646 start_decl_1 (tree decl, bool initialized)
4648 tree type;
4649 bool complete_p;
4650 bool aggregate_definition_p;
4652 gcc_assert (!processing_template_decl);
4654 if (error_operand_p (decl))
4655 return;
4657 gcc_assert (TREE_CODE (decl) == VAR_DECL);
4659 type = TREE_TYPE (decl);
4660 complete_p = COMPLETE_TYPE_P (type);
4661 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4663 /* If an explicit initializer is present, or if this is a definition
4664 of an aggregate, then we need a complete type at this point.
4665 (Scalars are always complete types, so there is nothing to
4666 check.) This code just sets COMPLETE_P; errors (if necessary)
4667 are issued below. */
4668 if ((initialized || aggregate_definition_p)
4669 && !complete_p
4670 && COMPLETE_TYPE_P (complete_type (type)))
4672 complete_p = true;
4673 /* We will not yet have set TREE_READONLY on DECL if the type
4674 was "const", but incomplete, before this point. But, now, we
4675 have a complete type, so we can try again. */
4676 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4679 if (initialized)
4680 /* Is it valid for this decl to have an initializer at all? */
4682 /* Don't allow initializations for incomplete types except for
4683 arrays which might be completed by the initialization. */
4684 if (complete_p)
4685 ; /* A complete type is ok. */
4686 else if (type_uses_auto (type))
4687 ; /* An auto type is ok. */
4688 else if (TREE_CODE (type) != ARRAY_TYPE)
4690 error ("variable %q#D has initializer but incomplete type", decl);
4691 type = TREE_TYPE (decl) = error_mark_node;
4693 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4695 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4696 error ("elements of array %q#D have incomplete type", decl);
4697 /* else we already gave an error in start_decl. */
4700 else if (aggregate_definition_p && !complete_p)
4702 if (type_uses_auto (type))
4703 error ("declaration of %q#D has no initializer", decl);
4704 else
4705 error ("aggregate %q#D has incomplete type and cannot be defined",
4706 decl);
4707 /* Change the type so that assemble_variable will give
4708 DECL an rtl we can live with: (mem (const_int 0)). */
4709 type = TREE_TYPE (decl) = error_mark_node;
4712 /* Create a new scope to hold this declaration if necessary.
4713 Whether or not a new scope is necessary cannot be determined
4714 until after the type has been completed; if the type is a
4715 specialization of a class template it is not until after
4716 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4717 will be set correctly. */
4718 maybe_push_cleanup_level (type);
4721 /* Handle initialization of references. DECL, TYPE, and INIT have the
4722 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4723 but will be set to a new CLEANUP_STMT if a temporary is created
4724 that must be destroyed subsequently.
4726 Returns an initializer expression to use to initialize DECL, or
4727 NULL if the initialization can be performed statically.
4729 Quotes on semantics can be found in ARM 8.4.3. */
4731 static tree
4732 grok_reference_init (tree decl, tree type, tree init, int flags)
4734 if (init == NULL_TREE)
4736 if ((DECL_LANG_SPECIFIC (decl) == 0
4737 || DECL_IN_AGGR_P (decl) == 0)
4738 && ! DECL_THIS_EXTERN (decl))
4739 error ("%qD declared as reference but not initialized", decl);
4740 return NULL_TREE;
4743 if (TREE_CODE (init) == TREE_LIST)
4744 init = build_x_compound_expr_from_list (init, ELK_INIT,
4745 tf_warning_or_error);
4747 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4748 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4749 /* Note: default conversion is only called in very special cases. */
4750 init = decay_conversion (init, tf_warning_or_error);
4752 /* Convert INIT to the reference type TYPE. This may involve the
4753 creation of a temporary, whose lifetime must be the same as that
4754 of the reference. If so, a DECL_EXPR for the temporary will be
4755 added just after the DECL_EXPR for DECL. That's why we don't set
4756 DECL_INITIAL for local references (instead assigning to them
4757 explicitly); we need to allow the temporary to be initialized
4758 first. */
4759 return initialize_reference (type, init, flags,
4760 tf_warning_or_error);
4763 /* Designated initializers in arrays are not supported in GNU C++.
4764 The parser cannot detect this error since it does not know whether
4765 a given brace-enclosed initializer is for a class type or for an
4766 array. This function checks that CE does not use a designated
4767 initializer. If it does, an error is issued. Returns true if CE
4768 is valid, i.e., does not have a designated initializer. */
4770 static bool
4771 check_array_designated_initializer (const constructor_elt *ce,
4772 unsigned HOST_WIDE_INT index)
4774 /* Designated initializers for array elements are not supported. */
4775 if (ce->index)
4777 /* The parser only allows identifiers as designated
4778 initializers. */
4779 if (ce->index == error_mark_node)
4780 error ("name used in a GNU-style designated "
4781 "initializer for an array");
4782 else if (TREE_CODE (ce->index) == INTEGER_CST)
4784 /* A C99 designator is OK if it matches the current index. */
4785 if (TREE_INT_CST_LOW (ce->index) == index)
4786 return true;
4787 else
4788 sorry ("non-trivial designated initializers not supported");
4790 else
4792 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4793 error ("name %qD used in a GNU-style designated "
4794 "initializer for an array", ce->index);
4796 return false;
4799 return true;
4802 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4803 array until we finish parsing the initializer. If that's the
4804 situation we're in, update DECL accordingly. */
4806 static void
4807 maybe_deduce_size_from_array_init (tree decl, tree init)
4809 tree type = TREE_TYPE (decl);
4811 if (TREE_CODE (type) == ARRAY_TYPE
4812 && TYPE_DOMAIN (type) == NULL_TREE
4813 && TREE_CODE (decl) != TYPE_DECL)
4815 /* do_default is really a C-ism to deal with tentative definitions.
4816 But let's leave it here to ease the eventual merge. */
4817 int do_default = !DECL_EXTERNAL (decl);
4818 tree initializer = init ? init : DECL_INITIAL (decl);
4819 int failure = 0;
4821 /* Check that there are no designated initializers in INIT, as
4822 those are not supported in GNU C++, and as the middle-end
4823 will crash if presented with a non-numeric designated
4824 initializer. */
4825 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4827 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4828 constructor_elt *ce;
4829 HOST_WIDE_INT i;
4830 FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4831 if (!check_array_designated_initializer (ce, i))
4832 failure = 1;
4835 if (!failure)
4837 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4838 do_default);
4839 if (failure == 1)
4841 error ("initializer fails to determine size of %qD", decl);
4842 TREE_TYPE (decl) = error_mark_node;
4844 else if (failure == 2)
4846 if (do_default)
4848 error ("array size missing in %qD", decl);
4849 TREE_TYPE (decl) = error_mark_node;
4851 /* If a `static' var's size isn't known, make it extern as
4852 well as static, so it does not get allocated. If it's not
4853 `static', then don't mark it extern; finish_incomplete_decl
4854 will give it a default size and it will get allocated. */
4855 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4856 DECL_EXTERNAL (decl) = 1;
4858 else if (failure == 3)
4860 error ("zero-size array %qD", decl);
4861 TREE_TYPE (decl) = error_mark_node;
4865 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4867 relayout_decl (decl);
4871 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4872 any appropriate error messages regarding the layout. */
4874 static void
4875 layout_var_decl (tree decl)
4877 tree type;
4879 type = TREE_TYPE (decl);
4880 if (type == error_mark_node)
4881 return;
4883 /* If we haven't already layed out this declaration, do so now.
4884 Note that we must not call complete type for an external object
4885 because it's type might involve templates that we are not
4886 supposed to instantiate yet. (And it's perfectly valid to say
4887 `extern X x' for some incomplete type `X'.) */
4888 if (!DECL_EXTERNAL (decl))
4889 complete_type (type);
4890 if (!DECL_SIZE (decl)
4891 && TREE_TYPE (decl) != error_mark_node
4892 && (COMPLETE_TYPE_P (type)
4893 || (TREE_CODE (type) == ARRAY_TYPE
4894 && !TYPE_DOMAIN (type)
4895 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4896 layout_decl (decl, 0);
4898 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4900 /* An automatic variable with an incomplete type: that is an error.
4901 Don't talk about array types here, since we took care of that
4902 message in grokdeclarator. */
4903 error ("storage size of %qD isn%'t known", decl);
4904 TREE_TYPE (decl) = error_mark_node;
4906 #if 0
4907 /* Keep this code around in case we later want to control debug info
4908 based on whether a type is "used". (jason 1999-11-11) */
4910 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4911 /* Let debugger know it should output info for this type. */
4912 note_debug_info_needed (ttype);
4914 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4915 note_debug_info_needed (DECL_CONTEXT (decl));
4916 #endif
4918 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4919 && DECL_SIZE (decl) != NULL_TREE
4920 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4922 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4923 constant_expression_warning (DECL_SIZE (decl));
4924 else
4926 error ("storage size of %qD isn%'t constant", decl);
4927 TREE_TYPE (decl) = error_mark_node;
4932 /* If a local static variable is declared in an inline function, or if
4933 we have a weak definition, we must endeavor to create only one
4934 instance of the variable at link-time. */
4936 void
4937 maybe_commonize_var (tree decl)
4939 /* Static data in a function with comdat linkage also has comdat
4940 linkage. */
4941 if (TREE_STATIC (decl)
4942 /* Don't mess with __FUNCTION__. */
4943 && ! DECL_ARTIFICIAL (decl)
4944 && DECL_FUNCTION_SCOPE_P (decl)
4945 && vague_linkage_p (DECL_CONTEXT (decl)))
4947 if (flag_weak)
4949 /* With weak symbols, we simply make the variable COMDAT;
4950 that will cause copies in multiple translations units to
4951 be merged. */
4952 comdat_linkage (decl);
4954 else
4956 if (DECL_INITIAL (decl) == NULL_TREE
4957 || DECL_INITIAL (decl) == error_mark_node)
4959 /* Without weak symbols, we can use COMMON to merge
4960 uninitialized variables. */
4961 TREE_PUBLIC (decl) = 1;
4962 DECL_COMMON (decl) = 1;
4964 else
4966 /* While for initialized variables, we must use internal
4967 linkage -- which means that multiple copies will not
4968 be merged. */
4969 TREE_PUBLIC (decl) = 0;
4970 DECL_COMMON (decl) = 0;
4971 warning_at (input_location, 0,
4972 "sorry: semantics of inline function static "
4973 "data %q+#D are wrong (you%'ll wind up "
4974 "with multiple copies)", decl);
4975 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4976 " you can work around this by removing "
4977 "the initializer");
4981 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4982 /* Set it up again; we might have set DECL_INITIAL since the last
4983 time. */
4984 comdat_linkage (decl);
4987 /* Issue an error message if DECL is an uninitialized const variable. */
4989 static void
4990 check_for_uninitialized_const_var (tree decl)
4992 tree type = strip_array_types (TREE_TYPE (decl));
4994 /* ``Unless explicitly declared extern, a const object does not have
4995 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4996 7.1.6 */
4997 if (TREE_CODE (decl) == VAR_DECL
4998 && TREE_CODE (type) != REFERENCE_TYPE
4999 && CP_TYPE_CONST_P (type)
5000 && !DECL_INITIAL (decl))
5002 tree field = default_init_uninitialized_part (type);
5003 if (!field)
5004 return;
5006 permerror (DECL_SOURCE_LOCATION (decl),
5007 "uninitialized const %qD", decl);
5009 if (CLASS_TYPE_P (type))
5011 tree defaulted_ctor;
5013 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5014 "%q#T has no user-provided default constructor", type);
5015 defaulted_ctor = in_class_defaulted_default_constructor (type);
5016 if (defaulted_ctor)
5017 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5018 "constructor is not user-provided because it is "
5019 "explicitly defaulted in the class body");
5020 inform (0, "and the implicitly-defined constructor does not "
5021 "initialize %q+#D", field);
5026 /* Structure holding the current initializer being processed by reshape_init.
5027 CUR is a pointer to the current element being processed, END is a pointer
5028 after the last element present in the initializer. */
5029 typedef struct reshape_iterator_t
5031 constructor_elt *cur;
5032 constructor_elt *end;
5033 } reshape_iter;
5035 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5037 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5038 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5039 initialized. If there are no more such fields, the return value
5040 will be NULL. */
5042 tree
5043 next_initializable_field (tree field)
5045 while (field
5046 && (TREE_CODE (field) != FIELD_DECL
5047 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5048 || DECL_ARTIFICIAL (field)))
5049 field = DECL_CHAIN (field);
5051 return field;
5054 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5055 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5056 INTEGER_CST representing the size of the array minus one (the maximum index),
5057 or NULL_TREE if the array was declared without specifying the size. D is
5058 the iterator within the constructor. */
5060 static tree
5061 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5062 tsubst_flags_t complain)
5064 tree new_init;
5065 bool sized_array_p = (max_index != NULL_TREE);
5066 unsigned HOST_WIDE_INT max_index_cst = 0;
5067 unsigned HOST_WIDE_INT index;
5069 /* The initializer for an array is always a CONSTRUCTOR. */
5070 new_init = build_constructor (init_list_type_node, NULL);
5072 if (sized_array_p)
5074 /* Minus 1 is used for zero sized arrays. */
5075 if (integer_all_onesp (max_index))
5076 return new_init;
5078 if (host_integerp (max_index, 1))
5079 max_index_cst = tree_low_cst (max_index, 1);
5080 /* sizetype is sign extended, not zero extended. */
5081 else
5082 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
5086 /* Loop until there are no more initializers. */
5087 for (index = 0;
5088 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5089 ++index)
5091 tree elt_init;
5092 constructor_elt *old_cur = d->cur;
5094 check_array_designated_initializer (d->cur, index);
5095 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5096 complain);
5097 if (elt_init == error_mark_node)
5098 return error_mark_node;
5099 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5100 size_int (index), elt_init);
5101 if (!TREE_CONSTANT (elt_init))
5102 TREE_CONSTANT (new_init) = false;
5104 /* This can happen with an invalid initializer (c++/54501). */
5105 if (d->cur == old_cur && !sized_array_p)
5106 break;
5109 return new_init;
5112 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5113 Parameters are the same of reshape_init_r. */
5115 static tree
5116 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5118 tree max_index = NULL_TREE;
5120 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5122 if (TYPE_DOMAIN (type))
5123 max_index = array_type_nelts (type);
5125 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5128 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5129 Parameters are the same of reshape_init_r. */
5131 static tree
5132 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5134 tree max_index = NULL_TREE;
5136 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5138 if (COMPOUND_LITERAL_P (d->cur->value))
5140 tree value = d->cur->value;
5141 if (!same_type_p (TREE_TYPE (value), type))
5143 if (complain & tf_error)
5144 error ("invalid type %qT as initializer for a vector of type %qT",
5145 TREE_TYPE (d->cur->value), type);
5146 value = error_mark_node;
5148 ++d->cur;
5149 return value;
5152 /* For a vector, we initialize it as an array of the appropriate size. */
5153 if (TREE_CODE (type) == VECTOR_TYPE)
5154 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5156 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5159 /* Subroutine of reshape_init_r, processes the initializers for classes
5160 or union. Parameters are the same of reshape_init_r. */
5162 static tree
5163 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5164 tsubst_flags_t complain)
5166 tree field;
5167 tree new_init;
5169 gcc_assert (CLASS_TYPE_P (type));
5171 /* The initializer for a class is always a CONSTRUCTOR. */
5172 new_init = build_constructor (init_list_type_node, NULL);
5173 field = next_initializable_field (TYPE_FIELDS (type));
5175 if (!field)
5177 /* [dcl.init.aggr]
5179 An initializer for an aggregate member that is an
5180 empty class shall have the form of an empty
5181 initializer-list {}. */
5182 if (!first_initializer_p)
5184 if (complain & tf_error)
5185 error ("initializer for %qT must be brace-enclosed", type);
5186 return error_mark_node;
5188 return new_init;
5191 /* Loop through the initializable fields, gathering initializers. */
5192 while (d->cur != d->end)
5194 tree field_init;
5195 constructor_elt *old_cur = d->cur;
5197 /* Handle designated initializers, as an extension. */
5198 if (d->cur->index)
5200 if (TREE_CODE (d->cur->index) == INTEGER_CST)
5202 if (complain & tf_error)
5203 error ("%<[%E] =%> used in a GNU-style designated initializer"
5204 " for class %qT", d->cur->index, type);
5205 return error_mark_node;
5208 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5209 /* We already reshaped this. */
5210 gcc_assert (d->cur->index == field);
5211 else
5212 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5214 if (!field || TREE_CODE (field) != FIELD_DECL)
5216 if (complain & tf_error)
5217 error ("%qT has no non-static data member named %qD", type,
5218 d->cur->index);
5219 return error_mark_node;
5223 /* If we processed all the member of the class, we are done. */
5224 if (!field)
5225 break;
5227 field_init = reshape_init_r (TREE_TYPE (field), d,
5228 /*first_initializer_p=*/false, complain);
5229 if (field_init == error_mark_node)
5230 return error_mark_node;
5232 if (d->cur == old_cur && d->cur->index)
5234 /* This can happen with an invalid initializer for a flexible
5235 array member (c++/54441). */
5236 if (complain & tf_error)
5237 error ("invalid initializer for %q#D", field);
5238 return error_mark_node;
5241 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5243 /* [dcl.init.aggr]
5245 When a union is initialized with a brace-enclosed
5246 initializer, the braces shall only contain an
5247 initializer for the first member of the union. */
5248 if (TREE_CODE (type) == UNION_TYPE)
5249 break;
5251 field = next_initializable_field (DECL_CHAIN (field));
5254 return new_init;
5257 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5258 designators are not valid; either complain or return true to indicate
5259 that reshape_init_r should return error_mark_node. */
5261 static bool
5262 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5264 if (d->cur->index)
5266 if (complain & tf_error)
5267 error ("C99 designator %qE outside aggregate initializer",
5268 d->cur->index);
5269 else
5270 return true;
5272 return false;
5275 /* Subroutine of reshape_init, which processes a single initializer (part of
5276 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5277 iterator within the CONSTRUCTOR which points to the initializer to process.
5278 FIRST_INITIALIZER_P is true if this is the first initializer of the
5279 outermost CONSTRUCTOR node. */
5281 static tree
5282 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5283 tsubst_flags_t complain)
5285 tree init = d->cur->value;
5287 if (error_operand_p (init))
5288 return error_mark_node;
5290 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5291 && has_designator_problem (d, complain))
5292 return error_mark_node;
5294 if (TREE_CODE (type) == COMPLEX_TYPE)
5296 /* A complex type can be initialized from one or two initializers,
5297 but braces are not elided. */
5298 d->cur++;
5299 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5301 if (CONSTRUCTOR_NELTS (init) > 2)
5303 if (complain & tf_error)
5304 error ("too many initializers for %qT", type);
5305 else
5306 return error_mark_node;
5309 else if (first_initializer_p && d->cur != d->end)
5311 VEC(constructor_elt, gc) *v = 0;
5312 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5313 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5314 if (has_designator_problem (d, complain))
5315 return error_mark_node;
5316 d->cur++;
5317 init = build_constructor (init_list_type_node, v);
5319 return init;
5322 /* A non-aggregate type is always initialized with a single
5323 initializer. */
5324 if (!CP_AGGREGATE_TYPE_P (type))
5326 /* It is invalid to initialize a non-aggregate type with a
5327 brace-enclosed initializer before C++0x.
5328 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5329 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5330 a CONSTRUCTOR (with a record type). */
5331 if (TREE_CODE (init) == CONSTRUCTOR
5332 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5334 if (SCALAR_TYPE_P (type))
5336 if (complain & tf_error)
5337 error ("braces around scalar initializer for type %qT", type);
5338 init = error_mark_node;
5340 else
5341 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5344 d->cur++;
5345 return init;
5348 /* [dcl.init.aggr]
5350 All implicit type conversions (clause _conv_) are considered when
5351 initializing the aggregate member with an initializer from an
5352 initializer-list. If the initializer can initialize a member,
5353 the member is initialized. Otherwise, if the member is itself a
5354 non-empty subaggregate, brace elision is assumed and the
5355 initializer is considered for the initialization of the first
5356 member of the subaggregate. */
5357 if (TREE_CODE (init) != CONSTRUCTOR
5358 /* But don't try this for the first initializer, since that would be
5359 looking through the outermost braces; A a2 = { a1 }; is not a
5360 valid aggregate initialization. */
5361 && !first_initializer_p
5362 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5363 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5364 complain)))
5366 d->cur++;
5367 return init;
5370 /* [dcl.init.string]
5372 A char array (whether plain char, signed char, or unsigned char)
5373 can be initialized by a string-literal (optionally enclosed in
5374 braces); a wchar_t array can be initialized by a wide
5375 string-literal (optionally enclosed in braces). */
5376 if (TREE_CODE (type) == ARRAY_TYPE
5377 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5379 tree str_init = init;
5381 /* Strip one level of braces if and only if they enclose a single
5382 element (as allowed by [dcl.init.string]). */
5383 if (!first_initializer_p
5384 && TREE_CODE (str_init) == CONSTRUCTOR
5385 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5387 str_init = VEC_index (constructor_elt,
5388 CONSTRUCTOR_ELTS (str_init), 0).value;
5391 /* If it's a string literal, then it's the initializer for the array
5392 as a whole. Otherwise, continue with normal initialization for
5393 array types (one value per array element). */
5394 if (TREE_CODE (str_init) == STRING_CST)
5396 if (has_designator_problem (d, complain))
5397 return error_mark_node;
5398 d->cur++;
5399 return str_init;
5403 /* The following cases are about aggregates. If we are not within a full
5404 initializer already, and there is not a CONSTRUCTOR, it means that there
5405 is a missing set of braces (that is, we are processing the case for
5406 which reshape_init exists). */
5407 if (!first_initializer_p)
5409 if (TREE_CODE (init) == CONSTRUCTOR)
5411 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5412 /* There is no need to reshape pointer-to-member function
5413 initializers, as they are always constructed correctly
5414 by the front end. */
5416 else if (COMPOUND_LITERAL_P (init))
5417 /* For a nested compound literal, there is no need to reshape since
5418 brace elision is not allowed. Even if we decided to allow it,
5419 we should add a call to reshape_init in finish_compound_literal,
5420 before calling digest_init, so changing this code would still
5421 not be necessary. */
5422 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5423 else
5425 ++d->cur;
5426 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5427 return reshape_init (type, init, complain);
5431 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5432 type);
5435 /* Dispatch to specialized routines. */
5436 if (CLASS_TYPE_P (type))
5437 return reshape_init_class (type, d, first_initializer_p, complain);
5438 else if (TREE_CODE (type) == ARRAY_TYPE)
5439 return reshape_init_array (type, d, complain);
5440 else if (TREE_CODE (type) == VECTOR_TYPE)
5441 return reshape_init_vector (type, d, complain);
5442 else
5443 gcc_unreachable();
5446 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5447 brace-enclosed aggregate initializer.
5449 INIT is the CONSTRUCTOR containing the list of initializers describing
5450 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5451 It may not presently match the shape of the TYPE; for example:
5453 struct S { int a; int b; };
5454 struct S a[] = { 1, 2, 3, 4 };
5456 Here INIT will hold a VEC of four elements, rather than a
5457 VEC of two elements, each itself a VEC of two elements. This
5458 routine transforms INIT from the former form into the latter. The
5459 revised CONSTRUCTOR node is returned. */
5461 tree
5462 reshape_init (tree type, tree init, tsubst_flags_t complain)
5464 VEC(constructor_elt, gc) *v;
5465 reshape_iter d;
5466 tree new_init;
5468 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5470 v = CONSTRUCTOR_ELTS (init);
5472 /* An empty constructor does not need reshaping, and it is always a valid
5473 initializer. */
5474 if (VEC_empty (constructor_elt, v))
5475 return init;
5477 /* Recurse on this CONSTRUCTOR. */
5478 d.cur = &VEC_index (constructor_elt, v, 0);
5479 d.end = d.cur + VEC_length (constructor_elt, v);
5481 new_init = reshape_init_r (type, &d, true, complain);
5482 if (new_init == error_mark_node)
5483 return error_mark_node;
5485 /* Make sure all the element of the constructor were used. Otherwise,
5486 issue an error about exceeding initializers. */
5487 if (d.cur != d.end)
5489 if (complain & tf_error)
5490 error ("too many initializers for %qT", type);
5491 else
5492 return error_mark_node;
5495 return new_init;
5498 /* Verify array initializer. Returns true if errors have been reported. */
5500 bool
5501 check_array_initializer (tree decl, tree type, tree init)
5503 tree element_type = TREE_TYPE (type);
5505 /* The array type itself need not be complete, because the
5506 initializer may tell us how many elements are in the array.
5507 But, the elements of the array must be complete. */
5508 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5510 if (decl)
5511 error ("elements of array %q#D have incomplete type", decl);
5512 else
5513 error ("elements of array %q#T have incomplete type", type);
5514 return true;
5516 /* It is not valid to initialize a VLA. */
5517 if (init
5518 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5519 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5521 if (decl)
5522 error ("variable-sized object %qD may not be initialized", decl);
5523 else
5524 error ("variable-sized compound literal");
5525 return true;
5527 return false;
5530 /* Subroutine of check_initializer; args are passed down from that function.
5531 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5533 static tree
5534 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5537 gcc_assert (stmts_are_full_exprs_p ());
5538 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5541 /* Verify INIT (the initializer for DECL), and record the
5542 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5543 grok_reference_init.
5545 If the return value is non-NULL, it is an expression that must be
5546 evaluated dynamically to initialize DECL. */
5548 static tree
5549 check_initializer (tree decl, tree init, int flags, VEC(tree,gc) **cleanups)
5551 tree type = TREE_TYPE (decl);
5552 tree init_code = NULL;
5553 tree extra_init = NULL_TREE;
5554 tree core_type;
5556 /* Things that are going to be initialized need to have complete
5557 type. */
5558 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5560 if (DECL_HAS_VALUE_EXPR_P (decl))
5562 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5563 it doesn't have storage to be initialized. */
5564 gcc_assert (init == NULL_TREE);
5565 return NULL_TREE;
5568 if (type == error_mark_node)
5569 /* We will have already complained. */
5570 return NULL_TREE;
5572 if (TREE_CODE (type) == ARRAY_TYPE)
5574 if (check_array_initializer (decl, type, init))
5575 return NULL_TREE;
5577 else if (!COMPLETE_TYPE_P (type))
5579 error ("%q#D has incomplete type", decl);
5580 TREE_TYPE (decl) = error_mark_node;
5581 return NULL_TREE;
5583 else
5584 /* There is no way to make a variable-sized class type in GNU C++. */
5585 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5587 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5589 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5590 if (SCALAR_TYPE_P (type))
5592 if (init_len == 0)
5594 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5595 init = build_zero_init (type, NULL_TREE, false);
5597 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5599 error ("scalar object %qD requires one element in initializer",
5600 decl);
5601 TREE_TYPE (decl) = error_mark_node;
5602 return NULL_TREE;
5607 if (TREE_CODE (decl) == CONST_DECL)
5609 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5611 DECL_INITIAL (decl) = init;
5613 gcc_assert (init != NULL_TREE);
5614 init = NULL_TREE;
5616 else if (!init && DECL_REALLY_EXTERN (decl))
5618 else if (init || type_build_ctor_call (type)
5619 || TREE_CODE (type) == REFERENCE_TYPE)
5621 if (TREE_CODE (type) == REFERENCE_TYPE)
5623 init = grok_reference_init (decl, type, init, flags);
5624 flags |= LOOKUP_ALREADY_DIGESTED;
5626 else if (!init)
5627 check_for_uninitialized_const_var (decl);
5628 /* Do not reshape constructors of vectors (they don't need to be
5629 reshaped. */
5630 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5632 if (is_std_init_list (type))
5634 init = perform_implicit_conversion (type, init,
5635 tf_warning_or_error);
5636 flags |= LOOKUP_ALREADY_DIGESTED;
5638 else if (TYPE_NON_AGGREGATE_CLASS (type))
5640 /* Don't reshape if the class has constructors. */
5641 if (cxx_dialect == cxx98)
5642 error ("in C++98 %qD must be initialized by constructor, "
5643 "not by %<{...}%>",
5644 decl);
5646 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5648 error ("opaque vector types cannot be initialized");
5649 init = error_mark_node;
5651 else
5653 init = reshape_init (type, init, tf_warning_or_error);
5654 if (SCALAR_TYPE_P (type))
5655 check_narrowing (type, init);
5659 /* If DECL has an array type without a specific bound, deduce the
5660 array size from the initializer. */
5661 maybe_deduce_size_from_array_init (decl, init);
5662 type = TREE_TYPE (decl);
5663 if (type == error_mark_node)
5664 return NULL_TREE;
5666 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5667 && !(flags & LOOKUP_ALREADY_DIGESTED)
5668 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5669 && CP_AGGREGATE_TYPE_P (type)))
5671 init_code = build_aggr_init_full_exprs (decl, init, flags);
5673 /* A constructor call is a non-trivial initializer even if
5674 it isn't explicitly written. */
5675 if (TREE_SIDE_EFFECTS (init_code))
5676 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5678 /* If this is a constexpr initializer, expand_default_init will
5679 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5680 case, pull the initializer back out and pass it down into
5681 store_init_value. */
5682 while (TREE_CODE (init_code) == EXPR_STMT
5683 || TREE_CODE (init_code) == CONVERT_EXPR)
5684 init_code = TREE_OPERAND (init_code, 0);
5685 if (TREE_CODE (init_code) == INIT_EXPR)
5687 init = TREE_OPERAND (init_code, 1);
5688 init_code = NULL_TREE;
5689 /* Don't call digest_init; it's unnecessary and will complain
5690 about aggregate initialization of non-aggregate classes. */
5691 flags |= LOOKUP_ALREADY_DIGESTED;
5693 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5695 /* Declared constexpr, but no suitable initializer; massage
5696 init appropriately so we can pass it into store_init_value
5697 for the error. */
5698 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5699 init = finish_compound_literal (type, init,
5700 tf_warning_or_error);
5701 else if (CLASS_TYPE_P (type)
5702 && (!init || TREE_CODE (init) == TREE_LIST))
5704 init = build_functional_cast (type, init, tf_none);
5705 if (init != error_mark_node)
5706 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5708 init_code = NULL_TREE;
5710 else
5711 init = NULL_TREE;
5714 if (init && TREE_CODE (init) != TREE_VEC)
5716 /* In aggregate initialization of a variable, each element
5717 initialization is a full-expression because there is no
5718 enclosing expression. */
5719 gcc_assert (stmts_are_full_exprs_p ());
5721 init_code = store_init_value (decl, init, cleanups, flags);
5723 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5724 && DECL_INITIAL (decl)
5725 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5726 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5727 warning (0, "array %qD initialized by parenthesized string literal %qE",
5728 decl, DECL_INITIAL (decl));
5729 init = NULL;
5732 else
5734 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5735 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5736 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5737 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5738 /*complain=*/true);
5740 check_for_uninitialized_const_var (decl);
5743 if (init && init != error_mark_node)
5744 init_code = build2 (INIT_EXPR, type, decl, init);
5746 if (extra_init)
5747 init_code = add_stmt_to_compound (extra_init, init_code);
5749 if (init_code && DECL_IN_AGGR_P (decl))
5751 static int explained = 0;
5753 if (cxx_dialect < cxx0x)
5754 error ("initializer invalid for static member with constructor");
5755 else
5756 error ("non-constant in-class initialization invalid for static "
5757 "member %qD", decl);
5758 if (!explained)
5760 error ("(an out of class initialization is required)");
5761 explained = 1;
5765 return init_code;
5768 /* If DECL is not a local variable, give it RTL. */
5770 static void
5771 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5773 int toplev = toplevel_bindings_p ();
5774 int defer_p;
5775 const char *filename;
5777 /* Set the DECL_ASSEMBLER_NAME for the object. */
5778 if (asmspec)
5780 /* The `register' keyword, when used together with an
5781 asm-specification, indicates that the variable should be
5782 placed in a particular register. */
5783 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5785 set_user_assembler_name (decl, asmspec);
5786 DECL_HARD_REGISTER (decl) = 1;
5788 else
5790 if (TREE_CODE (decl) == FUNCTION_DECL
5791 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5792 set_builtin_user_assembler_name (decl, asmspec);
5793 set_user_assembler_name (decl, asmspec);
5797 /* Handle non-variables up front. */
5798 if (TREE_CODE (decl) != VAR_DECL)
5800 rest_of_decl_compilation (decl, toplev, at_eof);
5801 return;
5804 /* If we see a class member here, it should be a static data
5805 member. */
5806 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5808 gcc_assert (TREE_STATIC (decl));
5809 /* An in-class declaration of a static data member should be
5810 external; it is only a declaration, and not a definition. */
5811 if (init == NULL_TREE)
5812 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5815 /* We don't create any RTL for local variables. */
5816 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5817 return;
5819 /* We defer emission of local statics until the corresponding
5820 DECL_EXPR is expanded. */
5821 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5823 /* We try to defer namespace-scope static constants so that they are
5824 not emitted into the object file unnecessarily. */
5825 filename = input_filename;
5826 if (!DECL_VIRTUAL_P (decl)
5827 && TREE_READONLY (decl)
5828 && DECL_INITIAL (decl) != NULL_TREE
5829 && DECL_INITIAL (decl) != error_mark_node
5830 && filename != NULL
5831 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5832 && toplev
5833 && !TREE_PUBLIC (decl))
5835 /* Fool with the linkage of static consts according to #pragma
5836 interface. */
5837 struct c_fileinfo *finfo = get_fileinfo (filename);
5838 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5840 TREE_PUBLIC (decl) = 1;
5841 DECL_EXTERNAL (decl) = finfo->interface_only;
5844 defer_p = 1;
5846 /* Likewise for template instantiations. */
5847 else if (DECL_LANG_SPECIFIC (decl)
5848 && DECL_IMPLICIT_INSTANTIATION (decl))
5849 defer_p = 1;
5851 /* If we're not deferring, go ahead and assemble the variable. */
5852 if (!defer_p)
5853 rest_of_decl_compilation (decl, toplev, at_eof);
5856 /* walk_tree helper for wrap_temporary_cleanups, below. */
5858 static tree
5859 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5861 /* Stop at types or full-expression boundaries. */
5862 if (TYPE_P (*stmt_p)
5863 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5865 *walk_subtrees = 0;
5866 return NULL_TREE;
5869 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5871 tree guard = (tree)data;
5872 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5874 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5875 /* Tell honor_protect_cleanup_actions to handle this as a separate
5876 cleanup. */
5877 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5879 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5882 return NULL_TREE;
5885 /* We're initializing a local variable which has a cleanup GUARD. If there
5886 are any temporaries used in the initializer INIT of this variable, we
5887 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5888 variable will be cleaned up properly if one of them throws.
5890 Unfortunately, there's no way to express this properly in terms of
5891 nesting, as the regions for the temporaries overlap the region for the
5892 variable itself; if there are two temporaries, the variable needs to be
5893 the first thing destroyed if either of them throws. However, we only
5894 want to run the variable's cleanup if it actually got constructed. So
5895 we need to guard the temporary cleanups with the variable's cleanup if
5896 they are run on the normal path, but not if they are run on the
5897 exceptional path. We implement this by telling
5898 honor_protect_cleanup_actions to strip the variable cleanup from the
5899 exceptional path. */
5901 static void
5902 wrap_temporary_cleanups (tree init, tree guard)
5904 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5907 /* Generate code to initialize DECL (a local variable). */
5909 static void
5910 initialize_local_var (tree decl, tree init)
5912 tree type = TREE_TYPE (decl);
5913 tree cleanup;
5914 int already_used;
5916 gcc_assert (TREE_CODE (decl) == VAR_DECL
5917 || TREE_CODE (decl) == RESULT_DECL);
5918 gcc_assert (!TREE_STATIC (decl));
5920 if (DECL_SIZE (decl) == NULL_TREE)
5922 /* If we used it already as memory, it must stay in memory. */
5923 DECL_INITIAL (decl) = NULL_TREE;
5924 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5925 return;
5928 if (type == error_mark_node)
5929 return;
5931 /* Compute and store the initial value. */
5932 already_used = TREE_USED (decl) || TREE_USED (type);
5933 if (TREE_USED (type))
5934 DECL_READ_P (decl) = 1;
5936 /* Generate a cleanup, if necessary. */
5937 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5939 /* Perform the initialization. */
5940 if (init)
5942 if (TREE_CODE (init) == INIT_EXPR
5943 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5945 /* Stick simple initializers in DECL_INITIAL so that
5946 -Wno-init-self works (c++/34772). */
5947 gcc_assert (TREE_OPERAND (init, 0) == decl);
5948 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5950 else
5952 int saved_stmts_are_full_exprs_p;
5954 /* If we're only initializing a single object, guard the
5955 destructors of any temporaries used in its initializer with
5956 its destructor. This isn't right for arrays because each
5957 element initialization is a full-expression. */
5958 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5959 wrap_temporary_cleanups (init, cleanup);
5961 gcc_assert (building_stmt_list_p ());
5962 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5963 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5964 finish_expr_stmt (init);
5965 current_stmt_tree ()->stmts_are_full_exprs_p =
5966 saved_stmts_are_full_exprs_p;
5970 /* Set this to 0 so we can tell whether an aggregate which was
5971 initialized was ever used. Don't do this if it has a
5972 destructor, so we don't complain about the 'resource
5973 allocation is initialization' idiom. Now set
5974 attribute((unused)) on types so decls of that type will be
5975 marked used. (see TREE_USED, above.) */
5976 if (TYPE_NEEDS_CONSTRUCTING (type)
5977 && ! already_used
5978 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5979 && DECL_NAME (decl))
5980 TREE_USED (decl) = 0;
5981 else if (already_used)
5982 TREE_USED (decl) = 1;
5984 if (cleanup)
5985 finish_decl_cleanup (decl, cleanup);
5988 /* DECL is a VAR_DECL for a compiler-generated variable with static
5989 storage duration (like a virtual table) whose initializer is a
5990 compile-time constant. Initialize the variable and provide it to the
5991 back end. */
5993 void
5994 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5996 tree init;
5997 gcc_assert (DECL_ARTIFICIAL (decl));
5998 init = build_constructor (TREE_TYPE (decl), v);
5999 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6000 DECL_INITIAL (decl) = init;
6001 DECL_INITIALIZED_P (decl) = 1;
6002 determine_visibility (decl);
6003 layout_var_decl (decl);
6004 maybe_commonize_var (decl);
6005 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6008 /* INIT is the initializer for a variable, as represented by the
6009 parser. Returns true iff INIT is type-dependent. */
6011 static bool
6012 type_dependent_init_p (tree init)
6014 if (TREE_CODE (init) == TREE_LIST)
6015 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6016 return any_type_dependent_elements_p (init);
6017 else if (TREE_CODE (init) == CONSTRUCTOR)
6018 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6020 VEC(constructor_elt, gc) *elts;
6021 size_t nelts;
6022 size_t i;
6024 elts = CONSTRUCTOR_ELTS (init);
6025 nelts = VEC_length (constructor_elt, elts);
6026 for (i = 0; i < nelts; ++i)
6027 if (type_dependent_init_p (VEC_index (constructor_elt,
6028 elts, i).value))
6029 return true;
6031 else
6032 /* It must be a simple expression, e.g., int i = 3; */
6033 return type_dependent_expression_p (init);
6035 return false;
6038 /* INIT is the initializer for a variable, as represented by the
6039 parser. Returns true iff INIT is value-dependent. */
6041 static bool
6042 value_dependent_init_p (tree init)
6044 if (TREE_CODE (init) == TREE_LIST)
6045 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6046 return any_value_dependent_elements_p (init);
6047 else if (TREE_CODE (init) == CONSTRUCTOR)
6048 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6050 VEC(constructor_elt, gc) *elts;
6051 size_t nelts;
6052 size_t i;
6054 elts = CONSTRUCTOR_ELTS (init);
6055 nelts = VEC_length (constructor_elt, elts);
6056 for (i = 0; i < nelts; ++i)
6057 if (value_dependent_init_p (VEC_index (constructor_elt,
6058 elts, i).value))
6059 return true;
6061 else
6062 /* It must be a simple expression, e.g., int i = 3; */
6063 return value_dependent_expression_p (init);
6065 return false;
6068 /* Finish processing of a declaration;
6069 install its line number and initial value.
6070 If the length of an array type is not known before,
6071 it must be determined now, from the initial value, or it is an error.
6073 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6074 true, then INIT is an integral constant expression.
6076 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6077 if the (init) syntax was used. */
6079 void
6080 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6081 tree asmspec_tree, int flags)
6083 tree type;
6084 VEC(tree,gc) *cleanups = NULL;
6085 const char *asmspec = NULL;
6086 int was_readonly = 0;
6087 bool var_definition_p = false;
6088 tree auto_node;
6090 if (decl == error_mark_node)
6091 return;
6092 else if (! decl)
6094 if (init)
6095 error ("assignment (not initialization) in declaration");
6096 return;
6099 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6100 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6101 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6103 type = TREE_TYPE (decl);
6104 if (type == error_mark_node)
6105 return;
6107 /* If a name was specified, get the string. */
6108 if (at_namespace_scope_p ())
6109 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6110 if (asmspec_tree && asmspec_tree != error_mark_node)
6111 asmspec = TREE_STRING_POINTER (asmspec_tree);
6113 if (current_class_type
6114 && CP_DECL_CONTEXT (decl) == current_class_type
6115 && TYPE_BEING_DEFINED (current_class_type)
6116 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6117 && (DECL_INITIAL (decl) || init))
6118 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6120 if (TREE_CODE (decl) != FUNCTION_DECL
6121 && (auto_node = type_uses_auto (type)))
6123 tree d_init;
6124 if (init == NULL_TREE)
6126 error ("declaration of %q#D has no initializer", decl);
6127 TREE_TYPE (decl) = error_mark_node;
6128 return;
6130 d_init = init;
6131 if (TREE_CODE (d_init) == TREE_LIST)
6132 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6133 tf_warning_or_error);
6134 d_init = resolve_nondeduced_context (d_init);
6135 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6136 auto_node);
6137 if (type == error_mark_node)
6138 return;
6141 if (!ensure_literal_type_for_constexpr_object (decl))
6142 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6144 if (TREE_CODE (decl) == VAR_DECL
6145 && DECL_CLASS_SCOPE_P (decl)
6146 && DECL_INITIALIZED_IN_CLASS_P (decl))
6147 check_static_variable_definition (decl, type);
6149 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6151 tree clone;
6152 if (init == ridpointers[(int)RID_DELETE])
6154 /* FIXME check this is 1st decl. */
6155 DECL_DELETED_FN (decl) = 1;
6156 DECL_DECLARED_INLINE_P (decl) = 1;
6157 DECL_INITIAL (decl) = error_mark_node;
6158 FOR_EACH_CLONE (clone, decl)
6160 DECL_DELETED_FN (clone) = 1;
6161 DECL_DECLARED_INLINE_P (clone) = 1;
6162 DECL_INITIAL (clone) = error_mark_node;
6164 init = NULL_TREE;
6166 else if (init == ridpointers[(int)RID_DEFAULT])
6168 if (defaultable_fn_check (decl))
6169 DECL_DEFAULTED_FN (decl) = 1;
6170 else
6171 DECL_INITIAL (decl) = NULL_TREE;
6175 if (init && TREE_CODE (decl) == VAR_DECL)
6177 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6178 /* If DECL is a reference, then we want to know whether init is a
6179 reference constant; init_const_expr_p as passed tells us whether
6180 it's an rvalue constant. */
6181 if (TREE_CODE (type) == REFERENCE_TYPE)
6182 init_const_expr_p = potential_constant_expression (init);
6183 if (init_const_expr_p)
6185 /* Set these flags now for templates. We'll update the flags in
6186 store_init_value for instantiations. */
6187 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6188 if (decl_maybe_constant_var_p (decl))
6189 TREE_CONSTANT (decl) = 1;
6193 if (processing_template_decl)
6195 bool type_dependent_p;
6197 /* Add this declaration to the statement-tree. */
6198 if (at_function_scope_p ())
6199 add_decl_expr (decl);
6201 type_dependent_p = dependent_type_p (type);
6203 if (check_for_bare_parameter_packs (init))
6205 init = NULL_TREE;
6206 DECL_INITIAL (decl) = NULL_TREE;
6209 /* Generally, initializers in templates are expanded when the
6210 template is instantiated. But, if DECL is a variable constant
6211 then it can be used in future constant expressions, so its value
6212 must be available. */
6214 if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6215 /* We can't do anything if the decl has dependent type. */;
6216 else if (init
6217 && init_const_expr_p
6218 && !type_dependent_p
6219 && decl_maybe_constant_var_p (decl)
6220 && !type_dependent_init_p (init)
6221 && !value_dependent_init_p (init))
6223 /* This variable seems to be a non-dependent constant, so process
6224 its initializer. If check_initializer returns non-null the
6225 initialization wasn't constant after all. */
6226 tree init_code;
6227 cleanups = make_tree_vector ();
6228 init_code = check_initializer (decl, init, flags, &cleanups);
6229 if (init_code == NULL_TREE)
6230 init = NULL_TREE;
6231 release_tree_vector (cleanups);
6233 else if (!DECL_PRETTY_FUNCTION_P (decl))
6235 /* Deduce array size even if the initializer is dependent. */
6236 maybe_deduce_size_from_array_init (decl, init);
6237 /* And complain about multiple initializers. */
6238 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6239 && !MAYBE_CLASS_TYPE_P (type))
6240 init = build_x_compound_expr_from_list (init, ELK_INIT,
6241 tf_warning_or_error);
6244 if (init)
6245 DECL_INITIAL (decl) = init;
6246 return;
6249 /* Just store non-static data member initializers for later. */
6250 if (init && TREE_CODE (decl) == FIELD_DECL)
6251 DECL_INITIAL (decl) = init;
6253 /* Take care of TYPE_DECLs up front. */
6254 if (TREE_CODE (decl) == TYPE_DECL)
6256 if (type != error_mark_node
6257 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6259 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6260 warning (0, "shadowing previous type declaration of %q#D", decl);
6261 set_identifier_type_value (DECL_NAME (decl), decl);
6264 /* If we have installed this as the canonical typedef for this
6265 type, and that type has not been defined yet, delay emitting
6266 the debug information for it, as we will emit it later. */
6267 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6268 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6269 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6271 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6272 at_eof);
6273 return;
6276 /* A reference will be modified here, as it is initialized. */
6277 if (! DECL_EXTERNAL (decl)
6278 && TREE_READONLY (decl)
6279 && TREE_CODE (type) == REFERENCE_TYPE)
6281 was_readonly = 1;
6282 TREE_READONLY (decl) = 0;
6285 if (TREE_CODE (decl) == VAR_DECL)
6287 /* If this is a local variable that will need a mangled name,
6288 register it now. We must do this before processing the
6289 initializer for the variable, since the initialization might
6290 require a guard variable, and since the mangled name of the
6291 guard variable will depend on the mangled name of this
6292 variable. */
6293 if (DECL_FUNCTION_SCOPE_P (decl)
6294 && TREE_STATIC (decl)
6295 && !DECL_ARTIFICIAL (decl))
6297 push_local_name (decl);
6298 if (DECL_CONSTRUCTOR_P (current_function_decl)
6299 || DECL_DESTRUCTOR_P (current_function_decl))
6300 /* Normally local_decls is populated during GIMPLE lowering,
6301 but [cd]tors are never actually compiled directly. We need
6302 to put statics on the list so we can deal with the label
6303 address extension. FIXME. */
6304 add_local_decl (cfun, decl);
6307 /* Convert the initializer to the type of DECL, if we have not
6308 already initialized DECL. */
6309 if (!DECL_INITIALIZED_P (decl)
6310 /* If !DECL_EXTERNAL then DECL is being defined. In the
6311 case of a static data member initialized inside the
6312 class-specifier, there can be an initializer even if DECL
6313 is *not* defined. */
6314 && (!DECL_EXTERNAL (decl) || init))
6316 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6318 tree jclass
6319 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6320 /* Allow libjava/prims.cc define primitive classes. */
6321 if (init != NULL_TREE
6322 || jclass == NULL_TREE
6323 || TREE_CODE (jclass) != TYPE_DECL
6324 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6325 || !same_type_ignoring_top_level_qualifiers_p
6326 (type, TREE_TYPE (TREE_TYPE (jclass))))
6327 error ("Java object %qD not allocated with %<new%>", decl);
6328 init = NULL_TREE;
6330 cleanups = make_tree_vector ();
6331 init = check_initializer (decl, init, flags, &cleanups);
6333 /* Check that the initializer for a static data member was a
6334 constant. Although we check in the parser that the
6335 initializer is an integral constant expression, we do not
6336 simplify division-by-zero at the point at which it
6337 occurs. Therefore, in:
6339 struct S { static const int i = 7 / 0; };
6341 we issue an error at this point. It would
6342 probably be better to forbid division by zero in
6343 integral constant expressions. */
6344 if (DECL_EXTERNAL (decl) && init)
6346 error ("%qD cannot be initialized by a non-constant expression"
6347 " when being declared", decl);
6348 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6349 init = NULL_TREE;
6352 /* Handle:
6354 [dcl.init]
6356 The memory occupied by any object of static storage
6357 duration is zero-initialized at program startup before
6358 any other initialization takes place.
6360 We cannot create an appropriate initializer until after
6361 the type of DECL is finalized. If DECL_INITIAL is set,
6362 then the DECL is statically initialized, and any
6363 necessary zero-initialization has already been performed. */
6364 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6365 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6366 /*nelts=*/NULL_TREE,
6367 /*static_storage_p=*/true);
6368 /* Remember that the initialization for this variable has
6369 taken place. */
6370 DECL_INITIALIZED_P (decl) = 1;
6371 /* This declaration is the definition of this variable,
6372 unless we are initializing a static data member within
6373 the class specifier. */
6374 if (!DECL_EXTERNAL (decl))
6375 var_definition_p = true;
6377 /* If the variable has an array type, lay out the type, even if
6378 there is no initializer. It is valid to index through the
6379 array, and we must get TYPE_ALIGN set correctly on the array
6380 type. */
6381 else if (TREE_CODE (type) == ARRAY_TYPE)
6382 layout_type (type);
6384 if (TREE_STATIC (decl)
6385 && !at_function_scope_p ()
6386 && current_function_decl == NULL)
6387 /* So decl is a global variable or a static member of a
6388 non local class. Record the types it uses
6389 so that we can decide later to emit debug info for them. */
6390 record_types_used_by_current_var_decl (decl);
6392 else if (TREE_CODE (decl) == FIELD_DECL
6393 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6394 error ("non-static data member %qD has Java class type", decl);
6396 /* Add this declaration to the statement-tree. This needs to happen
6397 after the call to check_initializer so that the DECL_EXPR for a
6398 reference temp is added before the DECL_EXPR for the reference itself. */
6399 if (DECL_FUNCTION_SCOPE_P (decl))
6400 add_decl_expr (decl);
6402 /* Let the middle end know about variables and functions -- but not
6403 static data members in uninstantiated class templates. */
6404 if (TREE_CODE (decl) == VAR_DECL
6405 || TREE_CODE (decl) == FUNCTION_DECL)
6407 if (TREE_CODE (decl) == VAR_DECL)
6409 layout_var_decl (decl);
6410 maybe_commonize_var (decl);
6413 /* This needs to happen after the linkage is set. */
6414 determine_visibility (decl);
6416 if (var_definition_p && TREE_STATIC (decl))
6418 /* If a TREE_READONLY variable needs initialization
6419 at runtime, it is no longer readonly and we need to
6420 avoid MEM_READONLY_P being set on RTL created for it. */
6421 if (init)
6423 if (TREE_READONLY (decl))
6424 TREE_READONLY (decl) = 0;
6425 was_readonly = 0;
6427 else if (was_readonly)
6428 TREE_READONLY (decl) = 1;
6431 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6433 /* Check for abstractness of the type. Notice that there is no
6434 need to strip array types here since the check for those types
6435 is already done within create_array_type_for_decl. */
6436 if (TREE_CODE (type) == FUNCTION_TYPE
6437 || TREE_CODE (type) == METHOD_TYPE)
6438 abstract_virtuals_error (decl, TREE_TYPE (type));
6439 else
6440 abstract_virtuals_error (decl, type);
6442 if (TREE_TYPE (decl) == error_mark_node)
6443 /* No initialization required. */
6445 else if (TREE_CODE (decl) == FUNCTION_DECL)
6447 if (init)
6449 if (init == ridpointers[(int)RID_DEFAULT])
6451 /* An out-of-class default definition is defined at
6452 the point where it is explicitly defaulted. */
6453 if (DECL_DELETED_FN (decl))
6454 maybe_explain_implicit_delete (decl);
6455 else if (DECL_INITIAL (decl) == error_mark_node)
6456 synthesize_method (decl);
6458 else
6459 error ("function %q#D is initialized like a variable", decl);
6461 /* else no initialization required. */
6463 else if (DECL_EXTERNAL (decl)
6464 && ! (DECL_LANG_SPECIFIC (decl)
6465 && DECL_NOT_REALLY_EXTERN (decl)))
6467 if (init)
6468 DECL_INITIAL (decl) = init;
6470 /* A variable definition. */
6471 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6472 /* Initialize the local variable. */
6473 initialize_local_var (decl, init);
6475 /* If a variable is defined, and then a subsequent
6476 definition with external linkage is encountered, we will
6477 get here twice for the same variable. We want to avoid
6478 calling expand_static_init more than once. For variables
6479 that are not static data members, we can call
6480 expand_static_init only when we actually process the
6481 initializer. It is not legal to redeclare a static data
6482 member, so this issue does not arise in that case. */
6483 else if (var_definition_p && TREE_STATIC (decl))
6484 expand_static_init (decl, init);
6487 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6488 reference, insert it in the statement-tree now. */
6489 if (cleanups)
6491 unsigned i; tree t;
6492 FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6493 push_cleanup (decl, t, false);
6494 release_tree_vector (cleanups);
6497 if (was_readonly)
6498 TREE_READONLY (decl) = 1;
6500 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6503 /* Returns a declaration for a VAR_DECL as if:
6505 extern "C" TYPE NAME;
6507 had been seen. Used to create compiler-generated global
6508 variables. */
6510 static tree
6511 declare_global_var (tree name, tree type)
6513 tree decl;
6515 push_to_top_level ();
6516 decl = build_decl (input_location, VAR_DECL, name, type);
6517 TREE_PUBLIC (decl) = 1;
6518 DECL_EXTERNAL (decl) = 1;
6519 DECL_ARTIFICIAL (decl) = 1;
6520 /* If the user has explicitly declared this variable (perhaps
6521 because the code we are compiling is part of a low-level runtime
6522 library), then it is possible that our declaration will be merged
6523 with theirs by pushdecl. */
6524 decl = pushdecl (decl);
6525 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6526 pop_from_top_level ();
6528 return decl;
6531 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6532 if "__cxa_atexit" is not being used) corresponding to the function
6533 to be called when the program exits. */
6535 static tree
6536 get_atexit_fn_ptr_type (void)
6538 tree fn_type;
6540 if (!atexit_fn_ptr_type_node)
6542 tree arg_type;
6543 if (flag_use_cxa_atexit
6544 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6545 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6546 arg_type = ptr_type_node;
6547 else
6548 /* The parameter to "atexit" is "void (*)(void)". */
6549 arg_type = NULL_TREE;
6551 fn_type = build_function_type_list (void_type_node,
6552 arg_type, NULL_TREE);
6553 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6556 return atexit_fn_ptr_type_node;
6559 /* Returns a pointer to the `atexit' function. Note that if
6560 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6561 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6563 static tree
6564 get_atexit_node (void)
6566 tree atexit_fndecl;
6567 tree fn_type;
6568 tree fn_ptr_type;
6569 const char *name;
6570 bool use_aeabi_atexit;
6572 if (atexit_node)
6573 return atexit_node;
6575 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6577 /* The declaration for `__cxa_atexit' is:
6579 int __cxa_atexit (void (*)(void *), void *, void *)
6581 We build up the argument types and then the function type
6582 itself. */
6583 tree argtype0, argtype1, argtype2;
6585 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6586 /* First, build the pointer-to-function type for the first
6587 argument. */
6588 fn_ptr_type = get_atexit_fn_ptr_type ();
6589 /* Then, build the rest of the argument types. */
6590 argtype2 = ptr_type_node;
6591 if (use_aeabi_atexit)
6593 argtype1 = fn_ptr_type;
6594 argtype0 = ptr_type_node;
6596 else
6598 argtype1 = ptr_type_node;
6599 argtype0 = fn_ptr_type;
6601 /* And the final __cxa_atexit type. */
6602 fn_type = build_function_type_list (integer_type_node,
6603 argtype0, argtype1, argtype2,
6604 NULL_TREE);
6605 if (use_aeabi_atexit)
6606 name = "__aeabi_atexit";
6607 else
6608 name = "__cxa_atexit";
6610 else
6612 /* The declaration for `atexit' is:
6614 int atexit (void (*)());
6616 We build up the argument types and then the function type
6617 itself. */
6618 fn_ptr_type = get_atexit_fn_ptr_type ();
6619 /* Build the final atexit type. */
6620 fn_type = build_function_type_list (integer_type_node,
6621 fn_ptr_type, NULL_TREE);
6622 name = "atexit";
6625 /* Now, build the function declaration. */
6626 push_lang_context (lang_name_c);
6627 atexit_fndecl = build_library_fn_ptr (name, fn_type);
6628 mark_used (atexit_fndecl);
6629 pop_lang_context ();
6630 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6632 return atexit_node;
6635 /* Like get_atexit_node, but for thread-local cleanups. */
6637 static tree
6638 get_thread_atexit_node (void)
6640 /* The declaration for `__cxa_thread_atexit' is:
6642 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6643 tree fn_type = build_function_type_list (integer_type_node,
6644 get_atexit_fn_ptr_type (),
6645 ptr_type_node, ptr_type_node,
6646 NULL_TREE);
6648 /* Now, build the function declaration. */
6649 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type);
6650 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6653 /* Returns the __dso_handle VAR_DECL. */
6655 static tree
6656 get_dso_handle_node (void)
6658 if (dso_handle_node)
6659 return dso_handle_node;
6661 /* Declare the variable. */
6662 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6663 ptr_type_node);
6665 #ifdef HAVE_GAS_HIDDEN
6666 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6667 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6668 #endif
6670 return dso_handle_node;
6673 /* Begin a new function with internal linkage whose job will be simply
6674 to destroy some particular variable. */
6676 static GTY(()) int start_cleanup_cnt;
6678 static tree
6679 start_cleanup_fn (void)
6681 char name[32];
6682 tree fntype;
6683 tree fndecl;
6684 bool use_cxa_atexit = flag_use_cxa_atexit
6685 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6687 push_to_top_level ();
6689 /* No need to mangle this. */
6690 push_lang_context (lang_name_c);
6692 /* Build the name of the function. */
6693 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6694 /* Build the function declaration. */
6695 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6696 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6697 /* It's a function with internal linkage, generated by the
6698 compiler. */
6699 TREE_PUBLIC (fndecl) = 0;
6700 DECL_ARTIFICIAL (fndecl) = 1;
6701 /* Make the function `inline' so that it is only emitted if it is
6702 actually needed. It is unlikely that it will be inlined, since
6703 it is only called via a function pointer, but we avoid unnecessary
6704 emissions this way. */
6705 DECL_DECLARED_INLINE_P (fndecl) = 1;
6706 DECL_INTERFACE_KNOWN (fndecl) = 1;
6707 /* Build the parameter. */
6708 if (use_cxa_atexit)
6710 tree parmdecl;
6712 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6713 DECL_CONTEXT (parmdecl) = fndecl;
6714 TREE_USED (parmdecl) = 1;
6715 DECL_READ_P (parmdecl) = 1;
6716 DECL_ARGUMENTS (fndecl) = parmdecl;
6719 pushdecl (fndecl);
6720 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6722 pop_lang_context ();
6724 return current_function_decl;
6727 /* Finish the cleanup function begun by start_cleanup_fn. */
6729 static void
6730 end_cleanup_fn (void)
6732 expand_or_defer_fn (finish_function (0));
6734 pop_from_top_level ();
6737 /* Generate code to handle the destruction of DECL, an object with
6738 static storage duration. */
6740 tree
6741 register_dtor_fn (tree decl)
6743 tree cleanup;
6744 tree addr;
6745 tree compound_stmt;
6746 tree fcall;
6747 tree type;
6748 bool ob_parm, dso_parm, use_dtor;
6749 tree arg0, arg1, arg2;
6750 tree atex_node;
6752 type = TREE_TYPE (decl);
6753 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6754 return void_zero_node;
6756 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
6757 "__aeabi_atexit"), and DECL is a class object, we can just pass the
6758 destructor to "__cxa_atexit"; we don't have to build a temporary
6759 function to do the cleanup. */
6760 ob_parm = (DECL_THREAD_LOCAL_P (decl)
6761 || (flag_use_cxa_atexit
6762 && !targetm.cxx.use_atexit_for_cxa_atexit ()));
6763 dso_parm = ob_parm;
6764 use_dtor = ob_parm && CLASS_TYPE_P (type);
6765 if (use_dtor)
6767 int idx;
6769 /* Find the destructor. */
6770 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6771 gcc_assert (idx >= 0);
6772 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6773 /* Make sure it is accessible. */
6774 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
6775 tf_warning_or_error);
6777 else
6779 /* Call build_cleanup before we enter the anonymous function so
6780 that any access checks will be done relative to the current
6781 scope, rather than the scope of the anonymous function. */
6782 build_cleanup (decl);
6784 /* Now start the function. */
6785 cleanup = start_cleanup_fn ();
6787 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6788 to the original function, rather than the anonymous one. That
6789 will make the back end think that nested functions are in use,
6790 which causes confusion. */
6791 push_deferring_access_checks (dk_no_check);
6792 fcall = build_cleanup (decl);
6793 pop_deferring_access_checks ();
6795 /* Create the body of the anonymous function. */
6796 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6797 finish_expr_stmt (fcall);
6798 finish_compound_stmt (compound_stmt);
6799 end_cleanup_fn ();
6802 /* Call atexit with the cleanup function. */
6803 mark_used (cleanup);
6804 cleanup = build_address (cleanup);
6806 if (DECL_THREAD_LOCAL_P (decl))
6807 atex_node = get_thread_atexit_node ();
6808 else
6809 atex_node = get_atexit_node ();
6811 if (use_dtor)
6813 /* We must convert CLEANUP to the type that "__cxa_atexit"
6814 expects. */
6815 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6816 /* "__cxa_atexit" will pass the address of DECL to the
6817 cleanup function. */
6818 mark_used (decl);
6819 addr = build_address (decl);
6820 /* The declared type of the parameter to "__cxa_atexit" is
6821 "void *". For plain "T*", we could just let the
6822 machinery in cp_build_function_call convert it -- but if the
6823 type is "cv-qualified T *", then we need to convert it
6824 before passing it in, to avoid spurious errors. */
6825 addr = build_nop (ptr_type_node, addr);
6827 else if (ob_parm)
6828 /* Since the cleanup functions we build ignore the address
6829 they're given, there's no reason to pass the actual address
6830 in, and, in general, it's cheaper to pass NULL than any
6831 other value. */
6832 addr = null_pointer_node;
6834 if (dso_parm)
6835 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6836 tf_warning_or_error);
6837 else
6838 arg2 = NULL_TREE;
6840 if (ob_parm)
6842 if (!DECL_THREAD_LOCAL_P (decl)
6843 && targetm.cxx.use_aeabi_atexit ())
6845 arg1 = cleanup;
6846 arg0 = addr;
6848 else
6850 arg1 = addr;
6851 arg0 = cleanup;
6854 else
6856 arg0 = cleanup;
6857 arg1 = NULL_TREE;
6859 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
6860 arg0, arg1, arg2, NULL_TREE);
6863 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6864 is its initializer. Generate code to handle the construction
6865 and destruction of DECL. */
6867 static void
6868 expand_static_init (tree decl, tree init)
6870 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6871 gcc_assert (TREE_STATIC (decl));
6873 /* Some variables require no dynamic initialization. */
6874 if (!init
6875 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6876 return;
6878 if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
6879 && !DECL_FUNCTION_SCOPE_P (decl))
6881 if (init)
6882 error ("non-local variable %qD declared %<__thread%> "
6883 "needs dynamic initialization", decl);
6884 else
6885 error ("non-local variable %qD declared %<__thread%> "
6886 "has a non-trivial destructor", decl);
6887 static bool informed;
6888 if (!informed)
6890 inform (DECL_SOURCE_LOCATION (decl),
6891 "C++11 %<thread_local%> allows dynamic initialization "
6892 "and destruction");
6893 informed = true;
6895 return;
6898 if (DECL_FUNCTION_SCOPE_P (decl))
6900 /* Emit code to perform this initialization but once. */
6901 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6902 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6903 tree guard, guard_addr;
6904 tree flag, begin;
6905 /* We don't need thread-safety code for thread-local vars. */
6906 bool thread_guard = (flag_threadsafe_statics
6907 && !DECL_THREAD_LOCAL_P (decl));
6909 /* Emit code to perform this initialization but once. This code
6910 looks like:
6912 static <type> guard;
6913 if (!guard.first_byte) {
6914 if (__cxa_guard_acquire (&guard)) {
6915 bool flag = false;
6916 try {
6917 // Do initialization.
6918 flag = true; __cxa_guard_release (&guard);
6919 // Register variable for destruction at end of program.
6920 } catch {
6921 if (!flag) __cxa_guard_abort (&guard);
6925 Note that the `flag' variable is only set to 1 *after* the
6926 initialization is complete. This ensures that an exception,
6927 thrown during the construction, will cause the variable to
6928 reinitialized when we pass through this code again, as per:
6930 [stmt.dcl]
6932 If the initialization exits by throwing an exception, the
6933 initialization is not complete, so it will be tried again
6934 the next time control enters the declaration.
6936 This process should be thread-safe, too; multiple threads
6937 should not be able to initialize the variable more than
6938 once. */
6940 /* Create the guard variable. */
6941 guard = get_guard (decl);
6943 /* This optimization isn't safe on targets with relaxed memory
6944 consistency. On such targets we force synchronization in
6945 __cxa_guard_acquire. */
6946 if (!targetm.relaxed_ordering || !thread_guard)
6948 /* Begin the conditional initialization. */
6949 if_stmt = begin_if_stmt ();
6950 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6951 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6954 if (thread_guard)
6956 tree vfntype = NULL_TREE;
6957 tree acquire_name, release_name, abort_name;
6958 tree acquire_fn, release_fn, abort_fn;
6959 guard_addr = build_address (guard);
6961 acquire_name = get_identifier ("__cxa_guard_acquire");
6962 release_name = get_identifier ("__cxa_guard_release");
6963 abort_name = get_identifier ("__cxa_guard_abort");
6964 acquire_fn = identifier_global_value (acquire_name);
6965 release_fn = identifier_global_value (release_name);
6966 abort_fn = identifier_global_value (abort_name);
6967 if (!acquire_fn)
6968 acquire_fn = push_library_fn
6969 (acquire_name, build_function_type_list (integer_type_node,
6970 TREE_TYPE (guard_addr),
6971 NULL_TREE),
6972 NULL_TREE);
6973 if (!release_fn || !abort_fn)
6974 vfntype = build_function_type_list (void_type_node,
6975 TREE_TYPE (guard_addr),
6976 NULL_TREE);
6977 if (!release_fn)
6978 release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6979 if (!abort_fn)
6980 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6982 inner_if_stmt = begin_if_stmt ();
6983 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6984 inner_if_stmt);
6986 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6987 begin = get_target_expr (boolean_false_node);
6988 flag = TARGET_EXPR_SLOT (begin);
6990 TARGET_EXPR_CLEANUP (begin)
6991 = build3 (COND_EXPR, void_type_node, flag,
6992 void_zero_node,
6993 build_call_n (abort_fn, 1, guard_addr));
6994 CLEANUP_EH_ONLY (begin) = 1;
6996 /* Do the initialization itself. */
6997 init = add_stmt_to_compound (begin, init);
6998 init = add_stmt_to_compound
6999 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7000 init = add_stmt_to_compound
7001 (init, build_call_n (release_fn, 1, guard_addr));
7003 else
7004 init = add_stmt_to_compound (init, set_guard (guard));
7006 /* Use atexit to register a function for destroying this static
7007 variable. */
7008 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7010 finish_expr_stmt (init);
7012 if (thread_guard)
7014 finish_compound_stmt (inner_then_clause);
7015 finish_then_clause (inner_if_stmt);
7016 finish_if_stmt (inner_if_stmt);
7019 if (!targetm.relaxed_ordering || !thread_guard)
7021 finish_compound_stmt (then_clause);
7022 finish_then_clause (if_stmt);
7023 finish_if_stmt (if_stmt);
7026 else if (DECL_THREAD_LOCAL_P (decl))
7027 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7028 else
7029 static_aggregates = tree_cons (init, decl, static_aggregates);
7033 /* Make TYPE a complete type based on INITIAL_VALUE.
7034 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7035 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7036 3 if the initializer list is empty (in pedantic mode). */
7039 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7041 int failure;
7042 tree type, elt_type;
7044 if (initial_value)
7046 unsigned HOST_WIDE_INT i;
7047 tree value;
7049 /* An array of character type can be initialized from a
7050 brace-enclosed string constant.
7052 FIXME: this code is duplicated from reshape_init. Probably
7053 we should just call reshape_init here? */
7054 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7055 && TREE_CODE (initial_value) == CONSTRUCTOR
7056 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
7058 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
7059 tree value = VEC_index (constructor_elt, v, 0).value;
7061 if (TREE_CODE (value) == STRING_CST
7062 && VEC_length (constructor_elt, v) == 1)
7063 initial_value = value;
7066 /* If any of the elements are parameter packs, we can't actually
7067 complete this type now because the array size is dependent. */
7068 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7070 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7071 i, value)
7073 if (PACK_EXPANSION_P (value))
7074 return 0;
7079 failure = complete_array_type (ptype, initial_value, do_default);
7081 /* We can create the array before the element type is complete, which
7082 means that we didn't have these two bits set in the original type
7083 either. In completing the type, we are expected to propagate these
7084 bits. See also complete_type which does the same thing for arrays
7085 of fixed size. */
7086 type = *ptype;
7087 if (TYPE_DOMAIN (type))
7089 elt_type = TREE_TYPE (type);
7090 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7091 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7092 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7095 return failure;
7098 /* As above, but either give an error or reject zero-size arrays, depending
7099 on COMPLAIN. */
7102 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7103 bool do_default, tsubst_flags_t complain)
7105 int failure;
7106 bool sfinae = !(complain & tf_error);
7107 /* In SFINAE context we can't be lenient about zero-size arrays. */
7108 if (sfinae)
7109 ++pedantic;
7110 failure = cp_complete_array_type (ptype, initial_value, do_default);
7111 if (sfinae)
7112 --pedantic;
7113 if (failure)
7115 if (sfinae)
7116 /* Not an error. */;
7117 else if (failure == 1)
7118 error ("initializer fails to determine size of %qT", *ptype);
7119 else if (failure == 2)
7121 if (do_default)
7122 error ("array size missing in %qT", *ptype);
7124 else if (failure == 3)
7125 error ("zero-size array %qT", *ptype);
7126 *ptype = error_mark_node;
7128 return failure;
7131 /* Return zero if something is declared to be a member of type
7132 CTYPE when in the context of CUR_TYPE. STRING is the error
7133 message to print in that case. Otherwise, quietly return 1. */
7135 static int
7136 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7138 if (ctype && ctype != cur_type)
7140 if (flags == DTOR_FLAG)
7141 error ("destructor for alien class %qT cannot be a member", ctype);
7142 else
7143 error ("constructor for alien class %qT cannot be a member", ctype);
7144 return 0;
7146 return 1;
7149 /* Subroutine of `grokdeclarator'. */
7151 /* Generate errors possibly applicable for a given set of specifiers.
7152 This is for ARM $7.1.2. */
7154 static void
7155 bad_specifiers (tree object,
7156 enum bad_spec_place type,
7157 int virtualp,
7158 int quals,
7159 int inlinep,
7160 int friendp,
7161 int raises)
7163 switch (type)
7165 case BSP_VAR:
7166 if (virtualp)
7167 error ("%qD declared as a %<virtual%> variable", object);
7168 if (inlinep)
7169 error ("%qD declared as an %<inline%> variable", object);
7170 if (quals)
7171 error ("%<const%> and %<volatile%> function specifiers on "
7172 "%qD invalid in variable declaration", object);
7173 break;
7174 case BSP_PARM:
7175 if (virtualp)
7176 error ("%qD declared as a %<virtual%> parameter", object);
7177 if (inlinep)
7178 error ("%qD declared as an %<inline%> parameter", object);
7179 if (quals)
7180 error ("%<const%> and %<volatile%> function specifiers on "
7181 "%qD invalid in parameter declaration", object);
7182 break;
7183 case BSP_TYPE:
7184 if (virtualp)
7185 error ("%qD declared as a %<virtual%> type", object);
7186 if (inlinep)
7187 error ("%qD declared as an %<inline%> type", object);
7188 if (quals)
7189 error ("%<const%> and %<volatile%> function specifiers on "
7190 "%qD invalid in type declaration", object);
7191 break;
7192 case BSP_FIELD:
7193 if (virtualp)
7194 error ("%qD declared as a %<virtual%> field", object);
7195 if (inlinep)
7196 error ("%qD declared as an %<inline%> field", object);
7197 if (quals)
7198 error ("%<const%> and %<volatile%> function specifiers on "
7199 "%qD invalid in field declaration", object);
7200 break;
7201 default:
7202 gcc_unreachable();
7204 if (friendp)
7205 error ("%q+D declared as a friend", object);
7206 if (raises
7207 && (TREE_CODE (object) == TYPE_DECL
7208 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7209 && !TYPE_REFFN_P (TREE_TYPE (object))
7210 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7211 error ("%q+D declared with an exception specification", object);
7214 /* DECL is a member function or static data member and is presently
7215 being defined. Check that the definition is taking place in a
7216 valid namespace. */
7218 static void
7219 check_class_member_definition_namespace (tree decl)
7221 /* These checks only apply to member functions and static data
7222 members. */
7223 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7224 || TREE_CODE (decl) == VAR_DECL);
7225 /* We check for problems with specializations in pt.c in
7226 check_specialization_namespace, where we can issue better
7227 diagnostics. */
7228 if (processing_specialization)
7229 return;
7230 /* There are no restrictions on the placement of
7231 explicit instantiations. */
7232 if (processing_explicit_instantiation)
7233 return;
7234 /* [class.mfct]
7236 A member function definition that appears outside of the
7237 class definition shall appear in a namespace scope enclosing
7238 the class definition.
7240 [class.static.data]
7242 The definition for a static data member shall appear in a
7243 namespace scope enclosing the member's class definition. */
7244 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7245 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7246 decl, DECL_CONTEXT (decl));
7249 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7250 METHOD_TYPE for a non-static member function; QUALS are the
7251 cv-qualifiers that apply to the function. */
7253 tree
7254 build_this_parm (tree type, cp_cv_quals quals)
7256 tree this_type;
7257 tree qual_type;
7258 tree parm;
7259 cp_cv_quals this_quals;
7261 if (CLASS_TYPE_P (type))
7263 this_type
7264 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7265 this_type = build_pointer_type (this_type);
7267 else
7268 this_type = type_of_this_parm (type);
7269 /* The `this' parameter is implicitly `const'; it cannot be
7270 assigned to. */
7271 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7272 qual_type = cp_build_qualified_type (this_type, this_quals);
7273 parm = build_artificial_parm (this_identifier, qual_type);
7274 cp_apply_type_quals_to_decl (this_quals, parm);
7275 return parm;
7278 /* DECL is a static member function. Complain if it was declared
7279 with function-cv-quals. */
7281 static void
7282 check_static_quals (tree decl, cp_cv_quals quals)
7284 if (quals != TYPE_UNQUALIFIED)
7285 error ("static member function %q#D declared with type qualifiers",
7286 decl);
7289 /* CTYPE is class type, or null if non-class.
7290 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7291 or METHOD_TYPE.
7292 DECLARATOR is the function's name.
7293 PARMS is a chain of PARM_DECLs for the function.
7294 VIRTUALP is truthvalue of whether the function is virtual or not.
7295 FLAGS are to be passed through to `grokclassfn'.
7296 QUALS are qualifiers indicating whether the function is `const'
7297 or `volatile'.
7298 RAISES is a list of exceptions that this function can raise.
7299 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7300 not look, and -1 if we should not call `grokclassfn' at all.
7302 SFK is the kind of special function (if any) for the new function.
7304 Returns `NULL_TREE' if something goes wrong, after issuing
7305 applicable error messages. */
7307 static tree
7308 grokfndecl (tree ctype,
7309 tree type,
7310 tree declarator,
7311 tree parms,
7312 tree orig_declarator,
7313 int virtualp,
7314 enum overload_flags flags,
7315 cp_cv_quals quals,
7316 tree raises,
7317 int check,
7318 int friendp,
7319 int publicp,
7320 int inlinep,
7321 special_function_kind sfk,
7322 bool funcdef_flag,
7323 int template_count,
7324 tree in_namespace,
7325 tree* attrlist,
7326 location_t location)
7328 tree decl;
7329 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7330 tree t;
7332 if (raises)
7333 type = build_exception_variant (type, raises);
7335 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7337 /* If we have an explicit location, use it, otherwise use whatever
7338 build_lang_decl used (probably input_location). */
7339 if (location != UNKNOWN_LOCATION)
7340 DECL_SOURCE_LOCATION (decl) = location;
7342 if (TREE_CODE (type) == METHOD_TYPE)
7344 tree parm;
7345 parm = build_this_parm (type, quals);
7346 DECL_CHAIN (parm) = parms;
7347 parms = parm;
7349 DECL_ARGUMENTS (decl) = parms;
7350 for (t = parms; t; t = DECL_CHAIN (t))
7351 DECL_CONTEXT (t) = decl;
7352 /* Propagate volatile out from type to decl. */
7353 if (TYPE_VOLATILE (type))
7354 TREE_THIS_VOLATILE (decl) = 1;
7356 /* Setup decl according to sfk. */
7357 switch (sfk)
7359 case sfk_constructor:
7360 case sfk_copy_constructor:
7361 case sfk_move_constructor:
7362 DECL_CONSTRUCTOR_P (decl) = 1;
7363 break;
7364 case sfk_destructor:
7365 DECL_DESTRUCTOR_P (decl) = 1;
7366 break;
7367 default:
7368 break;
7371 /* If pointers to member functions use the least significant bit to
7372 indicate whether a function is virtual, ensure a pointer
7373 to this function will have that bit clear. */
7374 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7375 && TREE_CODE (type) == METHOD_TYPE
7376 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7377 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7379 if (friendp
7380 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7382 if (funcdef_flag)
7383 error
7384 ("defining explicit specialization %qD in friend declaration",
7385 orig_declarator);
7386 else
7388 tree fns = TREE_OPERAND (orig_declarator, 0);
7389 tree args = TREE_OPERAND (orig_declarator, 1);
7391 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7393 /* Something like `template <class T> friend void f<T>()'. */
7394 error ("invalid use of template-id %qD in declaration "
7395 "of primary template",
7396 orig_declarator);
7397 return NULL_TREE;
7401 /* A friend declaration of the form friend void f<>(). Record
7402 the information in the TEMPLATE_ID_EXPR. */
7403 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7405 if (TREE_CODE (fns) == COMPONENT_REF)
7407 /* Due to bison parser ickiness, we will have already looked
7408 up an operator_name or PFUNCNAME within the current class
7409 (see template_id in parse.y). If the current class contains
7410 such a name, we'll get a COMPONENT_REF here. Undo that. */
7412 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7413 == current_class_type);
7414 fns = TREE_OPERAND (fns, 1);
7416 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7417 || TREE_CODE (fns) == OVERLOAD);
7418 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7420 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7421 if (TREE_PURPOSE (t)
7422 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7424 error ("default arguments are not allowed in declaration "
7425 "of friend template specialization %qD",
7426 decl);
7427 return NULL_TREE;
7430 if (inlinep)
7432 error ("%<inline%> is not allowed in declaration of friend "
7433 "template specialization %qD",
7434 decl);
7435 return NULL_TREE;
7440 /* If this decl has namespace scope, set that up. */
7441 if (in_namespace)
7442 set_decl_namespace (decl, in_namespace, friendp);
7443 else if (!ctype)
7444 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7446 /* `main' and builtins have implicit 'C' linkage. */
7447 if ((MAIN_NAME_P (declarator)
7448 || (IDENTIFIER_LENGTH (declarator) > 10
7449 && IDENTIFIER_POINTER (declarator)[0] == '_'
7450 && IDENTIFIER_POINTER (declarator)[1] == '_'
7451 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7452 && current_lang_name == lang_name_cplusplus
7453 && ctype == NULL_TREE
7454 && DECL_FILE_SCOPE_P (decl))
7455 SET_DECL_LANGUAGE (decl, lang_c);
7457 /* Should probably propagate const out from type to decl I bet (mrs). */
7458 if (staticp)
7460 DECL_STATIC_FUNCTION_P (decl) = 1;
7461 DECL_CONTEXT (decl) = ctype;
7464 if (ctype)
7466 DECL_CONTEXT (decl) = ctype;
7467 if (funcdef_flag)
7468 check_class_member_definition_namespace (decl);
7471 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7473 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7474 error ("cannot declare %<::main%> to be a template");
7475 if (inlinep)
7476 error ("cannot declare %<::main%> to be inline");
7477 if (!publicp)
7478 error ("cannot declare %<::main%> to be static");
7479 inlinep = 0;
7480 publicp = 1;
7483 /* Members of anonymous types and local classes have no linkage; make
7484 them internal. If a typedef is made later, this will be changed. */
7485 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7486 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7487 publicp = 0;
7489 if (publicp && cxx_dialect == cxx98)
7491 /* [basic.link]: A name with no linkage (notably, the name of a class
7492 or enumeration declared in a local scope) shall not be used to
7493 declare an entity with linkage.
7495 DR 757 relaxes this restriction for C++0x. */
7496 t = no_linkage_check (TREE_TYPE (decl),
7497 /*relaxed_p=*/false);
7498 if (t)
7500 if (TYPE_ANONYMOUS_P (t))
7502 if (DECL_EXTERN_C_P (decl))
7503 /* Allow this; it's pretty common in C. */;
7504 else
7506 permerror (input_location, "anonymous type with no linkage "
7507 "used to declare function %q#D with linkage",
7508 decl);
7509 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7510 permerror (input_location, "%q+#D does not refer to the unqualified "
7511 "type, so it is not used for linkage",
7512 TYPE_NAME (t));
7515 else
7516 permerror (input_location, "type %qT with no linkage used to "
7517 "declare function %q#D with linkage", t, decl);
7521 TREE_PUBLIC (decl) = publicp;
7522 if (! publicp)
7524 DECL_INTERFACE_KNOWN (decl) = 1;
7525 DECL_NOT_REALLY_EXTERN (decl) = 1;
7528 /* If the declaration was declared inline, mark it as such. */
7529 if (inlinep)
7530 DECL_DECLARED_INLINE_P (decl) = 1;
7531 if (inlinep & 2)
7532 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7534 DECL_EXTERNAL (decl) = 1;
7535 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7537 error (ctype
7538 ? G_("static member function %qD cannot have cv-qualifier")
7539 : G_("non-member function %qD cannot have cv-qualifier"),
7540 decl);
7541 quals = TYPE_UNQUALIFIED;
7544 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7545 && !grok_op_properties (decl, /*complain=*/true))
7546 return NULL_TREE;
7547 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7549 bool long_long_unsigned_p;
7550 bool long_double_p;
7551 const char *suffix = NULL;
7552 /* [over.literal]/6: Literal operators shall not have C linkage. */
7553 if (DECL_LANGUAGE (decl) == lang_c)
7555 error ("literal operator with C linkage");
7556 return NULL_TREE;
7559 if (DECL_NAMESPACE_SCOPE_P (decl))
7561 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7562 &long_double_p))
7564 error ("%qD has invalid argument list", decl);
7565 return NULL_TREE;
7568 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7569 if (long_long_unsigned_p)
7571 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7572 warning (0, "integer suffix %<%s%>"
7573 " shadowed by implementation", suffix);
7575 else if (long_double_p)
7577 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7578 warning (0, "floating point suffix %<%s%>"
7579 " shadowed by implementation", suffix);
7582 else
7584 error ("%qD must be a non-member function", decl);
7585 return NULL_TREE;
7589 if (funcdef_flag)
7590 /* Make the init_value nonzero so pushdecl knows this is not
7591 tentative. error_mark_node is replaced later with the BLOCK. */
7592 DECL_INITIAL (decl) = error_mark_node;
7594 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7595 TREE_NOTHROW (decl) = 1;
7597 /* Caller will do the rest of this. */
7598 if (check < 0)
7599 return decl;
7601 if (ctype != NULL_TREE)
7602 grokclassfn (ctype, decl, flags);
7604 /* 12.4/3 */
7605 if (cxx_dialect >= cxx0x
7606 && DECL_DESTRUCTOR_P (decl)
7607 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7608 && !processing_template_decl)
7609 deduce_noexcept_on_destructor (decl);
7611 decl = check_explicit_specialization (orig_declarator, decl,
7612 template_count,
7613 2 * funcdef_flag +
7614 4 * (friendp != 0));
7615 if (decl == error_mark_node)
7616 return NULL_TREE;
7618 if (DECL_STATIC_FUNCTION_P (decl))
7619 check_static_quals (decl, quals);
7621 if (attrlist)
7623 cplus_decl_attributes (&decl, *attrlist, 0);
7624 *attrlist = NULL_TREE;
7627 /* Check main's type after attributes have been applied. */
7628 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7630 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7631 integer_type_node))
7633 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7634 tree newtype;
7635 error ("%<::main%> must return %<int%>");
7636 newtype = build_function_type (integer_type_node, oldtypeargs);
7637 TREE_TYPE (decl) = newtype;
7639 if (warn_main)
7640 check_main_parameter_types (decl);
7643 if (ctype != NULL_TREE
7644 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7645 && check)
7647 tree old_decl = check_classfn (ctype, decl,
7648 (processing_template_decl
7649 > template_class_depth (ctype))
7650 ? current_template_parms
7651 : NULL_TREE);
7653 if (old_decl == error_mark_node)
7654 return NULL_TREE;
7656 if (old_decl)
7658 tree ok;
7659 tree pushed_scope;
7661 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7662 /* Because grokfndecl is always supposed to return a
7663 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7664 here. We depend on our callers to figure out that its
7665 really a template that's being returned. */
7666 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7668 if (DECL_STATIC_FUNCTION_P (old_decl)
7669 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7671 /* Remove the `this' parm added by grokclassfn. */
7672 revert_static_member_fn (decl);
7673 check_static_quals (decl, quals);
7675 if (DECL_ARTIFICIAL (old_decl))
7677 error ("definition of implicitly-declared %qD", old_decl);
7678 return NULL_TREE;
7680 else if (DECL_DEFAULTED_FN (old_decl))
7682 error ("definition of explicitly-defaulted %q+D", decl);
7683 error ("%q+#D explicitly defaulted here", old_decl);
7684 return NULL_TREE;
7687 /* Since we've smashed OLD_DECL to its
7688 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7689 if (TREE_CODE (decl) == TEMPLATE_DECL)
7690 decl = DECL_TEMPLATE_RESULT (decl);
7692 /* Attempt to merge the declarations. This can fail, in
7693 the case of some invalid specialization declarations. */
7694 pushed_scope = push_scope (ctype);
7695 ok = duplicate_decls (decl, old_decl, friendp);
7696 if (pushed_scope)
7697 pop_scope (pushed_scope);
7698 if (!ok)
7700 error ("no %q#D member function declared in class %qT",
7701 decl, ctype);
7702 return NULL_TREE;
7704 return old_decl;
7708 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7709 return NULL_TREE;
7711 if (ctype == NULL_TREE || check)
7712 return decl;
7714 if (virtualp)
7715 DECL_VIRTUAL_P (decl) = 1;
7717 return decl;
7720 /* decl is a FUNCTION_DECL.
7721 specifiers are the parsed virt-specifiers.
7723 Set flags to reflect the virt-specifiers.
7725 Returns decl. */
7727 static tree
7728 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7730 if (decl == NULL_TREE)
7731 return decl;
7732 if (specifiers & VIRT_SPEC_OVERRIDE)
7733 DECL_OVERRIDE_P (decl) = 1;
7734 if (specifiers & VIRT_SPEC_FINAL)
7735 DECL_FINAL_P (decl) = 1;
7736 return decl;
7739 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7740 the linkage that DECL will receive in the object file. */
7742 static void
7743 set_linkage_for_static_data_member (tree decl)
7745 /* A static data member always has static storage duration and
7746 external linkage. Note that static data members are forbidden in
7747 local classes -- the only situation in which a class has
7748 non-external linkage. */
7749 TREE_PUBLIC (decl) = 1;
7750 TREE_STATIC (decl) = 1;
7751 /* For non-template classes, static data members are always put
7752 out in exactly those files where they are defined, just as
7753 with ordinary namespace-scope variables. */
7754 if (!processing_template_decl)
7755 DECL_INTERFACE_KNOWN (decl) = 1;
7758 /* Create a VAR_DECL named NAME with the indicated TYPE.
7760 If SCOPE is non-NULL, it is the class type or namespace containing
7761 the variable. If SCOPE is NULL, the variable should is created in
7762 the innermost enclosings scope. */
7764 static tree
7765 grokvardecl (tree type,
7766 tree name,
7767 const cp_decl_specifier_seq *declspecs,
7768 int initialized,
7769 int constp,
7770 tree scope)
7772 tree decl;
7773 tree explicit_scope;
7775 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7777 /* Compute the scope in which to place the variable, but remember
7778 whether or not that scope was explicitly specified by the user. */
7779 explicit_scope = scope;
7780 if (!scope)
7782 /* An explicit "extern" specifier indicates a namespace-scope
7783 variable. */
7784 if (declspecs->storage_class == sc_extern)
7785 scope = current_decl_namespace ();
7786 else if (!at_function_scope_p ())
7787 scope = current_scope ();
7790 if (scope
7791 && (/* If the variable is a namespace-scope variable declared in a
7792 template, we need DECL_LANG_SPECIFIC. */
7793 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7794 /* Similarly for namespace-scope variables with language linkage
7795 other than C++. */
7796 || (TREE_CODE (scope) == NAMESPACE_DECL
7797 && current_lang_name != lang_name_cplusplus)
7798 /* Similarly for static data members. */
7799 || TYPE_P (scope)))
7800 decl = build_lang_decl (VAR_DECL, name, type);
7801 else
7802 decl = build_decl (input_location, VAR_DECL, name, type);
7804 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7805 set_decl_namespace (decl, explicit_scope, 0);
7806 else
7807 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7809 if (declspecs->storage_class == sc_extern)
7811 DECL_THIS_EXTERN (decl) = 1;
7812 DECL_EXTERNAL (decl) = !initialized;
7815 if (DECL_CLASS_SCOPE_P (decl))
7817 set_linkage_for_static_data_member (decl);
7818 /* This function is only called with out-of-class definitions. */
7819 DECL_EXTERNAL (decl) = 0;
7820 check_class_member_definition_namespace (decl);
7822 /* At top level, either `static' or no s.c. makes a definition
7823 (perhaps tentative), and absence of `static' makes it public. */
7824 else if (toplevel_bindings_p ())
7826 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7827 && (DECL_THIS_EXTERN (decl) || ! constp));
7828 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7830 /* Not at top level, only `static' makes a static definition. */
7831 else
7833 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7834 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7837 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
7839 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7840 if (declspecs->gnu_thread_keyword_p)
7841 DECL_GNU_TLS_P (decl) = true;
7844 /* If the type of the decl has no linkage, make sure that we'll
7845 notice that in mark_used. */
7846 if (cxx_dialect > cxx98
7847 && decl_linkage (decl) != lk_none
7848 && DECL_LANG_SPECIFIC (decl) == NULL
7849 && !DECL_EXTERN_C_P (decl)
7850 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7851 retrofit_lang_decl (decl);
7853 if (TREE_PUBLIC (decl))
7855 /* [basic.link]: A name with no linkage (notably, the name of a class
7856 or enumeration declared in a local scope) shall not be used to
7857 declare an entity with linkage.
7859 DR 757 relaxes this restriction for C++0x. */
7860 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7861 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7862 if (t)
7864 if (TYPE_ANONYMOUS_P (t))
7866 if (DECL_EXTERN_C_P (decl))
7867 /* Allow this; it's pretty common in C. */
7869 else
7871 /* DRs 132, 319 and 389 seem to indicate types with
7872 no linkage can only be used to declare extern "C"
7873 entities. Since it's not always an error in the
7874 ISO C++ 90 Standard, we only issue a warning. */
7875 warning (0, "anonymous type with no linkage used to declare "
7876 "variable %q#D with linkage", decl);
7877 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7878 warning (0, "%q+#D does not refer to the unqualified "
7879 "type, so it is not used for linkage",
7880 TYPE_NAME (t));
7883 else
7884 warning (0, "type %qT with no linkage used to declare variable "
7885 "%q#D with linkage", t, decl);
7888 else
7889 DECL_INTERFACE_KNOWN (decl) = 1;
7891 return decl;
7894 /* Create and return a canonical pointer to member function type, for
7895 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
7897 tree
7898 build_ptrmemfunc_type (tree type)
7900 tree field, fields;
7901 tree t;
7902 tree unqualified_variant = NULL_TREE;
7904 if (type == error_mark_node)
7905 return type;
7907 /* If a canonical type already exists for this type, use it. We use
7908 this method instead of type_hash_canon, because it only does a
7909 simple equality check on the list of field members. */
7911 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7912 return t;
7914 /* Make sure that we always have the unqualified pointer-to-member
7915 type first. */
7916 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7917 unqualified_variant
7918 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7920 t = make_class_type (RECORD_TYPE);
7921 xref_basetypes (t, NULL_TREE);
7923 /* Let the front end know this is a pointer to member function... */
7924 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7925 /* ... and not really a class type. */
7926 SET_CLASS_TYPE_P (t, 0);
7928 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7929 fields = field;
7931 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7932 delta_type_node);
7933 DECL_CHAIN (field) = fields;
7934 fields = field;
7936 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7938 /* Zap out the name so that the back end will give us the debugging
7939 information for this anonymous RECORD_TYPE. */
7940 TYPE_NAME (t) = NULL_TREE;
7942 /* If this is not the unqualified form of this pointer-to-member
7943 type, set the TYPE_MAIN_VARIANT for this type to be the
7944 unqualified type. Since they are actually RECORD_TYPEs that are
7945 not variants of each other, we must do this manually.
7946 As we just built a new type there is no need to do yet another copy. */
7947 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7949 int type_quals = cp_type_quals (type);
7950 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7951 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7952 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7953 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7954 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7955 TYPE_NEXT_VARIANT (unqualified_variant) = t;
7956 TREE_TYPE (TYPE_BINFO (t)) = t;
7959 /* Cache this pointer-to-member type so that we can find it again
7960 later. */
7961 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7963 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7964 SET_TYPE_STRUCTURAL_EQUALITY (t);
7965 else if (TYPE_CANONICAL (type) != type)
7966 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7968 return t;
7971 /* Create and return a pointer to data member type. */
7973 tree
7974 build_ptrmem_type (tree class_type, tree member_type)
7976 if (TREE_CODE (member_type) == METHOD_TYPE)
7978 cp_cv_quals quals = type_memfn_quals (member_type);
7979 member_type = build_memfn_type (member_type, class_type, quals);
7980 return build_ptrmemfunc_type (build_pointer_type (member_type));
7982 else
7984 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7985 return build_offset_type (class_type, member_type);
7989 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7990 Check to see that the definition is valid. Issue appropriate error
7991 messages. Return 1 if the definition is particularly bad, or 0
7992 otherwise. */
7994 static int
7995 check_static_variable_definition (tree decl, tree type)
7997 /* Can't check yet if we don't know the type. */
7998 if (dependent_type_p (type))
7999 return 0;
8000 /* If DECL is declared constexpr, we'll do the appropriate checks
8001 in check_initializer. */
8002 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8003 return 0;
8004 else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8006 if (!COMPLETE_TYPE_P (type))
8007 error ("in-class initialization of static data member %q#D of "
8008 "incomplete type", decl);
8009 else if (literal_type_p (type))
8010 permerror (input_location,
8011 "%<constexpr%> needed for in-class initialization of "
8012 "static data member %q#D of non-integral type", decl);
8013 else
8014 error ("in-class initialization of static data member %q#D of "
8015 "non-literal type", decl);
8016 return 1;
8019 /* Motion 10 at San Diego: If a static const integral data member is
8020 initialized with an integral constant expression, the initializer
8021 may appear either in the declaration (within the class), or in
8022 the definition, but not both. If it appears in the class, the
8023 member is a member constant. The file-scope definition is always
8024 required. */
8025 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8027 error ("invalid in-class initialization of static data member "
8028 "of non-integral type %qT",
8029 type);
8030 return 1;
8032 else if (!CP_TYPE_CONST_P (type))
8033 error ("ISO C++ forbids in-class initialization of non-const "
8034 "static member %qD",
8035 decl);
8036 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8037 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8038 "%qD of non-integral type %qT", decl, type);
8040 return 0;
8043 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8044 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8045 expressions out into temporary variables so that walk_tree doesn't
8046 step into them (c++/15764). */
8048 static tree
8049 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8051 struct pointer_set_t *pset = (struct pointer_set_t *)data;
8052 tree expr = *expr_p;
8053 if (TREE_CODE (expr) == SAVE_EXPR)
8055 tree op = TREE_OPERAND (expr, 0);
8056 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8057 if (TREE_SIDE_EFFECTS (op))
8058 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8059 *walk_subtrees = 0;
8061 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8062 *walk_subtrees = 0;
8063 return NULL;
8066 /* Entry point for the above. */
8068 static void
8069 stabilize_vla_size (tree size)
8071 struct pointer_set_t *pset = pointer_set_create ();
8072 /* Break out any function calls into temporary variables. */
8073 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
8074 pointer_set_destroy (pset);
8077 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8078 not inside of SAVE_EXPR and fold them. */
8080 static tree
8081 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8083 tree expr = *expr_p;
8084 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8085 *walk_subtrees = 0;
8086 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8088 *(bool *)data = true;
8089 if (SIZEOF_EXPR_TYPE_P (expr))
8090 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8091 SIZEOF_EXPR, false);
8092 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8093 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8094 false);
8095 else
8096 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8097 false);
8098 if (expr == error_mark_node)
8099 expr = size_one_node;
8100 *expr_p = expr;
8101 *walk_subtrees = 0;
8103 return NULL;
8106 /* Given the SIZE (i.e., number of elements) in an array, compute an
8107 appropriate index type for the array. If non-NULL, NAME is the
8108 name of the thing being declared. */
8110 tree
8111 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8113 tree itype;
8114 tree osize = size;
8115 tree abi_1_itype = NULL_TREE;
8117 if (error_operand_p (size))
8118 return error_mark_node;
8120 if (!type_dependent_expression_p (size))
8122 tree type = TREE_TYPE (size);
8124 mark_rvalue_use (size);
8126 if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
8127 && TREE_SIDE_EFFECTS (size))
8128 /* In C++98, we mark a non-constant array bound with a magic
8129 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8130 else
8132 size = fold_non_dependent_expr_sfinae (size, complain);
8134 if (CLASS_TYPE_P (type)
8135 && CLASSTYPE_LITERAL_P (type))
8137 size = build_expr_type_conversion (WANT_INT, size, true);
8138 if (!size)
8140 if (!(complain & tf_error))
8141 return error_mark_node;
8142 if (name)
8143 error ("size of array %qD has non-integral type %qT",
8144 name, type);
8145 else
8146 error ("size of array has non-integral type %qT", type);
8147 size = integer_one_node;
8149 if (size == error_mark_node)
8150 return error_mark_node;
8151 type = TREE_TYPE (size);
8152 /* We didn't support this case in GCC 3.2, so don't bother
8153 trying to model it now in ABI v1. */
8154 abi_1_itype = error_mark_node;
8157 size = maybe_constant_value (size);
8158 if (!TREE_CONSTANT (size))
8159 size = osize;
8162 if (error_operand_p (size))
8163 return error_mark_node;
8165 /* The array bound must be an integer type. */
8166 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8168 if (!(complain & tf_error))
8169 return error_mark_node;
8170 if (name)
8171 error ("size of array %qD has non-integral type %qT", name, type);
8172 else
8173 error ("size of array has non-integral type %qT", type);
8174 size = integer_one_node;
8175 type = TREE_TYPE (size);
8179 /* A type is dependent if it is...an array type constructed from any
8180 dependent type or whose size is specified by a constant expression
8181 that is value-dependent. */
8182 /* We can only call value_dependent_expression_p on integral constant
8183 expressions; treat non-constant expressions as dependent, too. */
8184 if (processing_template_decl
8185 && (type_dependent_expression_p (size)
8186 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8188 /* We cannot do any checking for a SIZE that isn't known to be
8189 constant. Just build the index type and mark that it requires
8190 structural equality checks. */
8191 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8192 size, integer_one_node));
8193 TYPE_DEPENDENT_P (itype) = 1;
8194 TYPE_DEPENDENT_P_VALID (itype) = 1;
8195 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8196 return itype;
8199 if (!abi_version_at_least (2) && processing_template_decl
8200 && abi_1_itype == NULL_TREE)
8201 /* For abi-1, we handled all instances in templates the same way,
8202 even when they were non-dependent. This affects the manglings
8203 produced. So, we do the normal checking for non-dependent
8204 sizes, but at the end we'll return the same type that abi-1
8205 would have, but with TYPE_CANONICAL set to the "right"
8206 value that the current ABI would provide. */
8207 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8208 osize, integer_one_node));
8210 /* Normally, the array-bound will be a constant. */
8211 if (TREE_CODE (size) == INTEGER_CST)
8213 /* Check to see if the array bound overflowed. Make that an
8214 error, no matter how generous we're being. */
8215 constant_expression_error (size);
8217 /* An array must have a positive number of elements. */
8218 if (INT_CST_LT (size, integer_zero_node))
8220 if (!(complain & tf_error))
8221 return error_mark_node;
8222 if (name)
8223 error ("size of array %qD is negative", name);
8224 else
8225 error ("size of array is negative");
8226 size = integer_one_node;
8228 /* As an extension we allow zero-sized arrays. */
8229 else if (integer_zerop (size))
8231 if (!(complain & tf_error))
8232 /* We must fail if performing argument deduction (as
8233 indicated by the state of complain), so that
8234 another substitution can be found. */
8235 return error_mark_node;
8236 else if (in_system_header)
8237 /* Allow them in system headers because glibc uses them. */;
8238 else if (name)
8239 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8240 else
8241 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8244 else if (TREE_CONSTANT (size)
8245 /* We don't allow VLAs at non-function scopes, or during
8246 tentative template substitution. */
8247 || !at_function_scope_p () || !(complain & tf_error))
8249 if (!(complain & tf_error))
8250 return error_mark_node;
8251 /* `(int) &fn' is not a valid array bound. */
8252 if (name)
8253 error ("size of array %qD is not an integral constant-expression",
8254 name);
8255 else
8256 error ("size of array is not an integral constant-expression");
8257 size = integer_one_node;
8259 else if (pedantic && warn_vla != 0)
8261 if (name)
8262 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8263 else
8264 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8266 else if (warn_vla > 0)
8268 if (name)
8269 warning (OPT_Wvla,
8270 "variable length array %qD is used", name);
8271 else
8272 warning (OPT_Wvla,
8273 "variable length array is used");
8276 if (processing_template_decl && !TREE_CONSTANT (size))
8277 /* A variable sized array. */
8278 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8279 else
8281 HOST_WIDE_INT saved_processing_template_decl;
8283 /* Compute the index of the largest element in the array. It is
8284 one less than the number of elements in the array. We save
8285 and restore PROCESSING_TEMPLATE_DECL so that computations in
8286 cp_build_binary_op will be appropriately folded. */
8287 saved_processing_template_decl = processing_template_decl;
8288 processing_template_decl = 0;
8289 itype = cp_build_binary_op (input_location,
8290 MINUS_EXPR,
8291 cp_convert (ssizetype, size, complain),
8292 cp_convert (ssizetype, integer_one_node,
8293 complain),
8294 complain);
8295 itype = fold (itype);
8296 processing_template_decl = saved_processing_template_decl;
8298 if (!TREE_CONSTANT (itype))
8300 /* A variable sized array. */
8301 itype = variable_size (itype);
8302 if (TREE_CODE (itype) != SAVE_EXPR)
8304 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8305 they might survive till gimplification. */
8306 tree newitype = itype;
8307 bool found = false;
8308 cp_walk_tree_without_duplicates (&newitype,
8309 fold_sizeof_expr_r, &found);
8310 if (found)
8311 itype = variable_size (fold (newitype));
8314 /* Make sure that there was no overflow when creating to a signed
8315 index type. (For example, on a 32-bit machine, an array with
8316 size 2^32 - 1 is too big.) */
8317 else if (TREE_CODE (itype) == INTEGER_CST
8318 && TREE_OVERFLOW (itype))
8320 if (!(complain & tf_error))
8321 return error_mark_node;
8322 error ("overflow in array dimension");
8323 TREE_OVERFLOW (itype) = 0;
8327 /* Create and return the appropriate index type. */
8328 if (abi_1_itype && abi_1_itype != error_mark_node)
8330 tree t = build_index_type (itype);
8331 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8332 itype = abi_1_itype;
8334 else
8335 itype = build_index_type (itype);
8337 /* If the index type were dependent, we would have returned early, so
8338 remember that it isn't. */
8339 TYPE_DEPENDENT_P (itype) = 0;
8340 TYPE_DEPENDENT_P_VALID (itype) = 1;
8341 return itype;
8344 /* Returns the scope (if any) in which the entity declared by
8345 DECLARATOR will be located. If the entity was declared with an
8346 unqualified name, NULL_TREE is returned. */
8348 tree
8349 get_scope_of_declarator (const cp_declarator *declarator)
8351 while (declarator && declarator->kind != cdk_id)
8352 declarator = declarator->declarator;
8354 /* If the declarator-id is a SCOPE_REF, the scope in which the
8355 declaration occurs is the first operand. */
8356 if (declarator
8357 && declarator->u.id.qualifying_scope)
8358 return declarator->u.id.qualifying_scope;
8360 /* Otherwise, the declarator is not a qualified name; the entity will
8361 be declared in the current scope. */
8362 return NULL_TREE;
8365 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8366 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8367 with this type. */
8369 static tree
8370 create_array_type_for_decl (tree name, tree type, tree size)
8372 tree itype = NULL_TREE;
8374 /* If things have already gone awry, bail now. */
8375 if (type == error_mark_node || size == error_mark_node)
8376 return error_mark_node;
8378 /* 8.3.4/1: If the type of the identifier of D contains the auto
8379 type-specifier, the program is ill-formed. */
8380 if (pedantic && type_uses_auto (type))
8381 pedwarn (input_location, OPT_Wpedantic,
8382 "declaration of %qD as array of %<auto%>", name);
8384 /* If there are some types which cannot be array elements,
8385 issue an error-message and return. */
8386 switch (TREE_CODE (type))
8388 case VOID_TYPE:
8389 if (name)
8390 error ("declaration of %qD as array of void", name);
8391 else
8392 error ("creating array of void");
8393 return error_mark_node;
8395 case FUNCTION_TYPE:
8396 if (name)
8397 error ("declaration of %qD as array of functions", name);
8398 else
8399 error ("creating array of functions");
8400 return error_mark_node;
8402 case REFERENCE_TYPE:
8403 if (name)
8404 error ("declaration of %qD as array of references", name);
8405 else
8406 error ("creating array of references");
8407 return error_mark_node;
8409 case METHOD_TYPE:
8410 if (name)
8411 error ("declaration of %qD as array of function members", name);
8412 else
8413 error ("creating array of function members");
8414 return error_mark_node;
8416 default:
8417 break;
8420 /* [dcl.array]
8422 The constant expressions that specify the bounds of the arrays
8423 can be omitted only for the first member of the sequence. */
8424 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8426 if (name)
8427 error ("declaration of %qD as multidimensional array must "
8428 "have bounds for all dimensions except the first",
8429 name);
8430 else
8431 error ("multidimensional array must have bounds for all "
8432 "dimensions except the first");
8434 return error_mark_node;
8437 /* Figure out the index type for the array. */
8438 if (size)
8439 itype = compute_array_index_type (name, size, tf_warning_or_error);
8441 /* [dcl.array]
8442 T is called the array element type; this type shall not be [...] an
8443 abstract class type. */
8444 abstract_virtuals_error (name, type);
8446 return build_cplus_array_type (type, itype);
8449 /* Check that it's OK to declare a function with the indicated TYPE.
8450 SFK indicates the kind of special function (if any) that this
8451 function is. OPTYPE is the type given in a conversion operator
8452 declaration, or the class type for a constructor/destructor.
8453 Returns the actual return type of the function; that
8454 may be different than TYPE if an error occurs, or for certain
8455 special functions. */
8457 static tree
8458 check_special_function_return_type (special_function_kind sfk,
8459 tree type,
8460 tree optype)
8462 switch (sfk)
8464 case sfk_constructor:
8465 if (type)
8466 error ("return type specification for constructor invalid");
8468 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8469 type = build_pointer_type (optype);
8470 else
8471 type = void_type_node;
8472 break;
8474 case sfk_destructor:
8475 if (type)
8476 error ("return type specification for destructor invalid");
8477 /* We can't use the proper return type here because we run into
8478 problems with ambiguous bases and covariant returns.
8479 Java classes are left unchanged because (void *) isn't a valid
8480 Java type, and we don't want to change the Java ABI. */
8481 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8482 type = build_pointer_type (void_type_node);
8483 else
8484 type = void_type_node;
8485 break;
8487 case sfk_conversion:
8488 if (type)
8489 error ("return type specified for %<operator %T%>", optype);
8490 type = optype;
8491 break;
8493 default:
8494 gcc_unreachable ();
8497 return type;
8500 /* A variable or data member (whose unqualified name is IDENTIFIER)
8501 has been declared with the indicated TYPE. If the TYPE is not
8502 acceptable, issue an error message and return a type to use for
8503 error-recovery purposes. */
8505 tree
8506 check_var_type (tree identifier, tree type)
8508 if (VOID_TYPE_P (type))
8510 if (!identifier)
8511 error ("unnamed variable or field declared void");
8512 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8514 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8515 error ("variable or field %qE declared void", identifier);
8517 else
8518 error ("variable or field declared void");
8519 type = error_mark_node;
8522 return type;
8525 /* Given declspecs and a declarator (abstract or otherwise), determine
8526 the name and type of the object declared and construct a DECL node
8527 for it.
8529 DECLSPECS points to the representation of declaration-specifier
8530 sequence that precedes declarator.
8532 DECL_CONTEXT says which syntactic context this declaration is in:
8533 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8534 FUNCDEF for a function definition. Like NORMAL but a few different
8535 error messages in each case. Return value may be zero meaning
8536 this definition is too screwy to try to parse.
8537 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8538 handle member functions (which have FIELD context).
8539 Return value may be zero meaning this definition is too screwy to
8540 try to parse.
8541 PARM for a parameter declaration (either within a function prototype
8542 or before a function body). Make a PARM_DECL, or return void_type_node.
8543 TPARM for a template parameter declaration.
8544 CATCHPARM for a parameter declaration before a catch clause.
8545 TYPENAME if for a typename (in a cast or sizeof).
8546 Don't make a DECL node; just return the ..._TYPE node.
8547 FIELD for a struct or union field; make a FIELD_DECL.
8548 BITFIELD for a field with specified width.
8550 INITIALIZED is as for start_decl.
8552 ATTRLIST is a pointer to the list of attributes, which may be NULL
8553 if there are none; *ATTRLIST may be modified if attributes from inside
8554 the declarator should be applied to the declaration.
8556 When this function is called, scoping variables (such as
8557 CURRENT_CLASS_TYPE) should reflect the scope in which the
8558 declaration occurs, not the scope in which the new declaration will
8559 be placed. For example, on:
8561 void S::f() { ... }
8563 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8564 should not be `S'.
8566 Returns a DECL (if a declarator is present), a TYPE (if there is no
8567 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8568 error occurs. */
8570 tree
8571 grokdeclarator (const cp_declarator *declarator,
8572 cp_decl_specifier_seq *declspecs,
8573 enum decl_context decl_context,
8574 int initialized,
8575 tree* attrlist)
8577 tree type = NULL_TREE;
8578 int longlong = 0;
8579 int explicit_int128 = 0;
8580 int virtualp, explicitp, friendp, inlinep, staticp;
8581 int explicit_int = 0;
8582 int explicit_char = 0;
8583 int defaulted_int = 0;
8584 tree dependent_name = NULL_TREE;
8586 tree typedef_decl = NULL_TREE;
8587 const char *name = NULL;
8588 tree typedef_type = NULL_TREE;
8589 /* True if this declarator is a function definition. */
8590 bool funcdef_flag = false;
8591 cp_declarator_kind innermost_code = cdk_error;
8592 int bitfield = 0;
8593 #if 0
8594 /* See the code below that used this. */
8595 tree decl_attr = NULL_TREE;
8596 #endif
8598 /* Keep track of what sort of function is being processed
8599 so that we can warn about default return values, or explicit
8600 return values which do not match prescribed defaults. */
8601 special_function_kind sfk = sfk_none;
8603 tree dname = NULL_TREE;
8604 tree ctor_return_type = NULL_TREE;
8605 enum overload_flags flags = NO_SPECIAL;
8606 /* cv-qualifiers that apply to the declarator, for a declaration of
8607 a member function. */
8608 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8609 /* virt-specifiers that apply to the declarator, for a declaration of
8610 a member function. */
8611 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8612 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8613 int type_quals;
8614 tree raises = NULL_TREE;
8615 int template_count = 0;
8616 tree returned_attrs = NULL_TREE;
8617 tree parms = NULL_TREE;
8618 const cp_declarator *id_declarator;
8619 /* The unqualified name of the declarator; either an
8620 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8621 tree unqualified_id;
8622 /* The class type, if any, in which this entity is located,
8623 or NULL_TREE if none. Note that this value may be different from
8624 the current class type; for example if an attempt is made to declare
8625 "A::f" inside "B", this value will be "A". */
8626 tree ctype = current_class_type;
8627 /* The NAMESPACE_DECL for the namespace in which this entity is
8628 located. If an unqualified name is used to declare the entity,
8629 this value will be NULL_TREE, even if the entity is located at
8630 namespace scope. */
8631 tree in_namespace = NULL_TREE;
8632 cp_storage_class storage_class;
8633 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8634 bool type_was_error_mark_node = false;
8635 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8636 bool template_type_arg = false;
8637 bool template_parm_flag = false;
8638 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8639 const char *errmsg;
8641 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8642 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8643 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8644 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8645 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8646 explicit_int128 = declspecs->explicit_int128_p;
8647 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8649 if (decl_context == FUNCDEF)
8650 funcdef_flag = true, decl_context = NORMAL;
8651 else if (decl_context == MEMFUNCDEF)
8652 funcdef_flag = true, decl_context = FIELD;
8653 else if (decl_context == BITFIELD)
8654 bitfield = 1, decl_context = FIELD;
8655 else if (decl_context == TEMPLATE_TYPE_ARG)
8656 template_type_arg = true, decl_context = TYPENAME;
8657 else if (decl_context == TPARM)
8658 template_parm_flag = true, decl_context = PARM;
8660 if (initialized > 1)
8661 funcdef_flag = true;
8663 /* Look inside a declarator for the name being declared
8664 and get it as a string, for an error message. */
8665 for (id_declarator = declarator;
8666 id_declarator;
8667 id_declarator = id_declarator->declarator)
8669 if (id_declarator->kind != cdk_id)
8670 innermost_code = id_declarator->kind;
8672 switch (id_declarator->kind)
8674 case cdk_function:
8675 if (id_declarator->declarator
8676 && id_declarator->declarator->kind == cdk_id)
8678 sfk = id_declarator->declarator->u.id.sfk;
8679 if (sfk == sfk_destructor)
8680 flags = DTOR_FLAG;
8682 break;
8684 case cdk_id:
8686 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8687 tree decl = id_declarator->u.id.unqualified_name;
8688 if (!decl)
8689 break;
8690 if (qualifying_scope)
8692 if (at_function_scope_p ())
8694 /* [dcl.meaning]
8696 A declarator-id shall not be qualified except
8697 for ...
8699 None of the cases are permitted in block
8700 scope. */
8701 if (qualifying_scope == global_namespace)
8702 error ("invalid use of qualified-name %<::%D%>",
8703 decl);
8704 else if (TYPE_P (qualifying_scope))
8705 error ("invalid use of qualified-name %<%T::%D%>",
8706 qualifying_scope, decl);
8707 else
8708 error ("invalid use of qualified-name %<%D::%D%>",
8709 qualifying_scope, decl);
8710 return error_mark_node;
8712 else if (TYPE_P (qualifying_scope))
8714 ctype = qualifying_scope;
8715 if (!MAYBE_CLASS_TYPE_P (ctype))
8717 error ("%q#T is not a class or a namespace", ctype);
8718 ctype = NULL_TREE;
8720 else if (innermost_code != cdk_function
8721 && current_class_type
8722 && !uniquely_derived_from_p (ctype,
8723 current_class_type))
8725 error ("type %qT is not derived from type %qT",
8726 ctype, current_class_type);
8727 return error_mark_node;
8730 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8731 in_namespace = qualifying_scope;
8733 switch (TREE_CODE (decl))
8735 case BIT_NOT_EXPR:
8737 tree type;
8739 if (innermost_code != cdk_function)
8741 error ("declaration of %qD as non-function", decl);
8742 return error_mark_node;
8744 else if (!qualifying_scope
8745 && !(current_class_type && at_class_scope_p ()))
8747 error ("declaration of %qD as non-member", decl);
8748 return error_mark_node;
8751 type = TREE_OPERAND (decl, 0);
8752 if (TYPE_P (type))
8753 type = constructor_name (type);
8754 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8755 dname = decl;
8757 break;
8759 case TEMPLATE_ID_EXPR:
8761 tree fns = TREE_OPERAND (decl, 0);
8763 dname = fns;
8764 if (TREE_CODE (dname) != IDENTIFIER_NODE)
8766 gcc_assert (is_overloaded_fn (dname));
8767 dname = DECL_NAME (get_first_fn (dname));
8770 /* Fall through. */
8772 case IDENTIFIER_NODE:
8773 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8774 dname = decl;
8776 if (C_IS_RESERVED_WORD (dname))
8778 error ("declarator-id missing; using reserved word %qD",
8779 dname);
8780 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8782 else if (!IDENTIFIER_TYPENAME_P (dname))
8783 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8784 else
8786 gcc_assert (flags == NO_SPECIAL);
8787 flags = TYPENAME_FLAG;
8788 ctor_return_type = TREE_TYPE (dname);
8789 sfk = sfk_conversion;
8790 if (is_typename_at_global_scope (dname))
8791 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8792 else
8793 name = "<invalid operator>";
8795 break;
8797 default:
8798 gcc_unreachable ();
8800 break;
8803 case cdk_array:
8804 case cdk_pointer:
8805 case cdk_reference:
8806 case cdk_ptrmem:
8807 break;
8809 case cdk_error:
8810 return error_mark_node;
8812 default:
8813 gcc_unreachable ();
8815 if (id_declarator->kind == cdk_id)
8816 break;
8819 /* [dcl.fct.edf]
8821 The declarator in a function-definition shall have the form
8822 D1 ( parameter-declaration-clause) ... */
8823 if (funcdef_flag && innermost_code != cdk_function)
8825 error ("function definition does not declare parameters");
8826 return error_mark_node;
8829 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8830 && innermost_code != cdk_function
8831 && ! (ctype && !declspecs->any_specifiers_p))
8833 error ("declaration of %qD as non-function", dname);
8834 return error_mark_node;
8837 if (dname
8838 && TREE_CODE (dname) == IDENTIFIER_NODE
8839 && UDLIT_OPER_P (dname)
8840 && innermost_code != cdk_function)
8842 error ("declaration of %qD as non-function", dname);
8843 return error_mark_node;
8846 if (dname && IDENTIFIER_OPNAME_P (dname))
8848 if (decl_spec_seq_has_spec_p (declspecs, ds_typedef))
8850 error ("declaration of %qD as %<typedef%>", dname);
8851 return error_mark_node;
8853 else if (decl_context == PARM || decl_context == CATCHPARM)
8855 error ("declaration of %qD as parameter", dname);
8856 return error_mark_node;
8860 /* Anything declared one level down from the top level
8861 must be one of the parameters of a function
8862 (because the body is at least two levels down). */
8864 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8865 by not allowing C++ class definitions to specify their parameters
8866 with xdecls (must be spec.d in the parmlist).
8868 Since we now wait to push a class scope until we are sure that
8869 we are in a legitimate method context, we must set oldcname
8870 explicitly (since current_class_name is not yet alive).
8872 We also want to avoid calling this a PARM if it is in a namespace. */
8874 if (decl_context == NORMAL && !toplevel_bindings_p ())
8876 cp_binding_level *b = current_binding_level;
8877 current_binding_level = b->level_chain;
8878 if (current_binding_level != 0 && toplevel_bindings_p ())
8879 decl_context = PARM;
8880 current_binding_level = b;
8883 if (name == NULL)
8884 name = decl_context == PARM ? "parameter" : "type name";
8886 if (constexpr_p && decl_spec_seq_has_spec_p (declspecs, ds_typedef))
8888 error ("%<constexpr%> cannot appear in a typedef declaration");
8889 return error_mark_node;
8892 /* If there were multiple types specified in the decl-specifier-seq,
8893 issue an error message. */
8894 if (declspecs->multiple_types_p)
8896 error ("two or more data types in declaration of %qs", name);
8897 return error_mark_node;
8900 if (declspecs->conflicting_specifiers_p)
8902 error ("conflicting specifiers in declaration of %qs", name);
8903 return error_mark_node;
8906 /* Extract the basic type from the decl-specifier-seq. */
8907 type = declspecs->type;
8908 if (type == error_mark_node)
8910 type = NULL_TREE;
8911 type_was_error_mark_node = true;
8913 /* If the entire declaration is itself tagged as deprecated then
8914 suppress reports of deprecated items. */
8915 if (type && TREE_DEPRECATED (type)
8916 && deprecated_state != DEPRECATED_SUPPRESS)
8917 warn_deprecated_use (type, NULL_TREE);
8918 if (type && TREE_CODE (type) == TYPE_DECL)
8920 typedef_decl = type;
8921 type = TREE_TYPE (typedef_decl);
8922 if (TREE_DEPRECATED (type)
8923 && DECL_ARTIFICIAL (typedef_decl)
8924 && deprecated_state != DEPRECATED_SUPPRESS)
8925 warn_deprecated_use (type, NULL_TREE);
8927 /* No type at all: default to `int', and set DEFAULTED_INT
8928 because it was not a user-defined typedef. */
8929 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8931 /* These imply 'int'. */
8932 type = integer_type_node;
8933 defaulted_int = 1;
8935 /* Gather flags. */
8936 explicit_int = declspecs->explicit_int_p;
8937 explicit_char = declspecs->explicit_char_p;
8939 #if 0
8940 /* See the code below that used this. */
8941 if (typedef_decl)
8942 decl_attr = DECL_ATTRIBUTES (typedef_decl);
8943 #endif
8944 typedef_type = type;
8947 if (sfk != sfk_conversion)
8948 ctor_return_type = ctype;
8950 if (sfk != sfk_none)
8951 type = check_special_function_return_type (sfk, type,
8952 ctor_return_type);
8953 else if (type == NULL_TREE)
8955 int is_main;
8957 explicit_int = -1;
8959 /* We handle `main' specially here, because 'main () { }' is so
8960 common. With no options, it is allowed. With -Wreturn-type,
8961 it is a warning. It is only an error with -pedantic-errors. */
8962 is_main = (funcdef_flag
8963 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8964 && MAIN_NAME_P (dname)
8965 && ctype == NULL_TREE
8966 && in_namespace == NULL_TREE
8967 && current_namespace == global_namespace);
8969 if (type_was_error_mark_node)
8970 /* We've already issued an error, don't complain more. */;
8971 else if (in_system_header || flag_ms_extensions)
8972 /* Allow it, sigh. */;
8973 else if (! is_main)
8974 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8975 else if (pedantic)
8976 pedwarn (input_location, OPT_Wpedantic,
8977 "ISO C++ forbids declaration of %qs with no type", name);
8978 else
8979 warning (OPT_Wreturn_type,
8980 "ISO C++ forbids declaration of %qs with no type", name);
8982 type = integer_type_node;
8985 ctype = NULL_TREE;
8987 if (explicit_int128)
8989 if (int128_integer_type_node == NULL_TREE)
8991 error ("%<__int128%> is not supported by this target");
8992 explicit_int128 = false;
8994 else if (pedantic && ! in_system_header)
8995 pedwarn (input_location, OPT_Wpedantic,
8996 "ISO C++ does not support %<__int128%> for %qs", name);
8999 /* Now process the modifiers that were specified
9000 and check for invalid combinations. */
9002 /* Long double is a special combination. */
9003 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9005 long_p = false;
9006 type = cp_build_qualified_type (long_double_type_node,
9007 cp_type_quals (type));
9010 /* Check all other uses of type modifiers. */
9012 if (unsigned_p || signed_p || long_p || short_p)
9014 int ok = 0;
9016 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9017 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9018 else if (signed_p && unsigned_p)
9019 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9020 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9021 error ("%<long long%> invalid for %qs", name);
9022 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9023 error ("%<long%> invalid for %qs", name);
9024 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9025 error ("%<short%> invalid for %qs", name);
9026 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9027 error ("%<long%> or %<short%> invalid for %qs", name);
9028 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
9029 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9030 else if ((long_p || short_p) && explicit_char)
9031 error ("%<long%> or %<short%> specified with char for %qs", name);
9032 else if (long_p && short_p)
9033 error ("%<long%> and %<short%> specified together for %qs", name);
9034 else if (type == char16_type_node || type == char32_type_node)
9036 if (signed_p || unsigned_p)
9037 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9038 else if (short_p || long_p)
9039 error ("%<short%> or %<long%> invalid for %qs", name);
9041 else
9043 ok = 1;
9044 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
9046 pedwarn (input_location, OPT_Wpedantic,
9047 "long, short, signed or unsigned used invalidly for %qs",
9048 name);
9049 if (flag_pedantic_errors)
9050 ok = 0;
9054 /* Discard the type modifiers if they are invalid. */
9055 if (! ok)
9057 unsigned_p = false;
9058 signed_p = false;
9059 long_p = false;
9060 short_p = false;
9061 longlong = 0;
9065 /* Decide whether an integer type is signed or not.
9066 Optionally treat bitfields as signed by default. */
9067 if (unsigned_p
9068 /* [class.bit]
9070 It is implementation-defined whether a plain (neither
9071 explicitly signed or unsigned) char, short, int, or long
9072 bit-field is signed or unsigned.
9074 Naturally, we extend this to long long as well. Note that
9075 this does not include wchar_t. */
9076 || (bitfield && !flag_signed_bitfields
9077 && !signed_p
9078 /* A typedef for plain `int' without `signed' can be
9079 controlled just like plain `int', but a typedef for
9080 `signed int' cannot be so controlled. */
9081 && !(typedef_decl
9082 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9083 && TREE_CODE (type) == INTEGER_TYPE
9084 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9086 if (explicit_int128)
9087 type = int128_unsigned_type_node;
9088 else if (longlong)
9089 type = long_long_unsigned_type_node;
9090 else if (long_p)
9091 type = long_unsigned_type_node;
9092 else if (short_p)
9093 type = short_unsigned_type_node;
9094 else if (type == char_type_node)
9095 type = unsigned_char_type_node;
9096 else if (typedef_decl)
9097 type = unsigned_type_for (type);
9098 else
9099 type = unsigned_type_node;
9101 else if (signed_p && type == char_type_node)
9102 type = signed_char_type_node;
9103 else if (explicit_int128)
9104 type = int128_integer_type_node;
9105 else if (longlong)
9106 type = long_long_integer_type_node;
9107 else if (long_p)
9108 type = long_integer_type_node;
9109 else if (short_p)
9110 type = short_integer_type_node;
9112 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9114 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9115 error ("complex invalid for %qs", name);
9116 /* If we just have "complex", it is equivalent to
9117 "complex double", but if any modifiers at all are specified it is
9118 the complex form of TYPE. E.g, "complex short" is
9119 "complex short int". */
9120 else if (defaulted_int && ! longlong && ! explicit_int128
9121 && ! (long_p || short_p || signed_p || unsigned_p))
9122 type = complex_double_type_node;
9123 else if (type == integer_type_node)
9124 type = complex_integer_type_node;
9125 else if (type == float_type_node)
9126 type = complex_float_type_node;
9127 else if (type == double_type_node)
9128 type = complex_double_type_node;
9129 else if (type == long_double_type_node)
9130 type = complex_long_double_type_node;
9131 else
9132 type = build_complex_type (type);
9135 type_quals = TYPE_UNQUALIFIED;
9136 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9137 type_quals |= TYPE_QUAL_CONST;
9138 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9139 type_quals |= TYPE_QUAL_VOLATILE;
9140 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9141 type_quals |= TYPE_QUAL_RESTRICT;
9142 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9143 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9144 ctor_return_type);
9146 /* If we're using the injected-class-name to form a compound type or a
9147 declaration, replace it with the underlying class so we don't get
9148 redundant typedefs in the debug output. But if we are returning the
9149 type unchanged, leave it alone so that it's available to
9150 maybe_get_template_decl_from_type_decl. */
9151 if (CLASS_TYPE_P (type)
9152 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9153 && type == TREE_TYPE (TYPE_NAME (type))
9154 && (declarator || type_quals))
9155 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9157 type_quals |= cp_type_quals (type);
9158 type = cp_build_qualified_type_real
9159 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
9160 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9161 /* We might have ignored or rejected some of the qualifiers. */
9162 type_quals = cp_type_quals (type);
9164 staticp = 0;
9165 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9166 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9167 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9169 storage_class = declspecs->storage_class;
9170 if (storage_class == sc_static)
9171 staticp = 1 + (decl_context == FIELD);
9173 if (virtualp && staticp == 2)
9175 error ("member %qD cannot be declared both virtual and static", dname);
9176 storage_class = sc_none;
9177 staticp = 0;
9179 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9181 if (dependent_name && !friendp)
9183 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
9184 return error_mark_node;
9187 /* Issue errors about use of storage classes for parameters. */
9188 if (decl_context == PARM)
9190 if (decl_spec_seq_has_spec_p (declspecs, ds_typedef))
9192 error ("typedef declaration invalid in parameter declaration");
9193 return error_mark_node;
9195 else if (template_parm_flag && storage_class != sc_none)
9197 error ("storage class specified for template parameter %qs", name);
9198 return error_mark_node;
9200 else if (storage_class == sc_static
9201 || storage_class == sc_extern
9202 || thread_p)
9203 error ("storage class specifiers invalid in parameter declarations");
9205 /* Function parameters cannot be constexpr. If we saw one, moan
9206 and pretend it wasn't there. */
9207 if (constexpr_p)
9209 error ("a parameter cannot be declared %<constexpr%>");
9210 constexpr_p = 0;
9214 /* Give error if `virtual' is used outside of class declaration. */
9215 if (virtualp
9216 && (current_class_name == NULL_TREE || decl_context != FIELD))
9218 error ("%<virtual%> outside class declaration");
9219 virtualp = 0;
9222 /* Static anonymous unions are dealt with here. */
9223 if (staticp && decl_context == TYPENAME
9224 && declspecs->type
9225 && ANON_AGGR_TYPE_P (declspecs->type))
9226 decl_context = FIELD;
9228 /* Warn about storage classes that are invalid for certain
9229 kinds of declarations (parameters, typenames, etc.). */
9230 if (thread_p
9231 && ((storage_class
9232 && storage_class != sc_extern
9233 && storage_class != sc_static)
9234 || decl_spec_seq_has_spec_p (declspecs, ds_typedef)))
9236 error ("multiple storage classes in declaration of %qs", name);
9237 thread_p = false;
9239 if (decl_context != NORMAL
9240 && ((storage_class != sc_none
9241 && storage_class != sc_mutable)
9242 || thread_p))
9244 if ((decl_context == PARM || decl_context == CATCHPARM)
9245 && (storage_class == sc_register
9246 || storage_class == sc_auto))
9248 else if (decl_spec_seq_has_spec_p (declspecs, ds_typedef))
9250 else if (decl_context == FIELD
9251 /* C++ allows static class elements. */
9252 && storage_class == sc_static)
9253 /* C++ also allows inlines and signed and unsigned elements,
9254 but in those cases we don't come in here. */
9256 else
9258 if (decl_context == FIELD)
9259 error ("storage class specified for %qs", name);
9260 else
9262 if (decl_context == PARM || decl_context == CATCHPARM)
9263 error ("storage class specified for parameter %qs", name);
9264 else
9265 error ("storage class specified for typename");
9267 if (storage_class == sc_register
9268 || storage_class == sc_auto
9269 || storage_class == sc_extern
9270 || thread_p)
9271 storage_class = sc_none;
9274 else if (storage_class == sc_extern && funcdef_flag
9275 && ! toplevel_bindings_p ())
9276 error ("nested function %qs declared %<extern%>", name);
9277 else if (toplevel_bindings_p ())
9279 if (storage_class == sc_auto)
9280 error ("top-level declaration of %qs specifies %<auto%>", name);
9282 else if (thread_p
9283 && storage_class != sc_extern
9284 && storage_class != sc_static)
9286 if (declspecs->gnu_thread_keyword_p)
9287 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9288 "declared %<__thread%>", name);
9290 /* When thread_local is applied to a variable of block scope the
9291 storage-class-specifier static is implied if it does not appear
9292 explicitly. */
9293 storage_class = declspecs->storage_class = sc_static;
9294 staticp = 1;
9297 if (storage_class && friendp)
9299 error ("storage class specifiers invalid in friend function declarations");
9300 storage_class = sc_none;
9301 staticp = 0;
9304 if (!id_declarator)
9305 unqualified_id = NULL_TREE;
9306 else
9308 unqualified_id = id_declarator->u.id.unqualified_name;
9309 switch (TREE_CODE (unqualified_id))
9311 case BIT_NOT_EXPR:
9312 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9313 if (TYPE_P (unqualified_id))
9314 unqualified_id = constructor_name (unqualified_id);
9315 break;
9317 case IDENTIFIER_NODE:
9318 case TEMPLATE_ID_EXPR:
9319 break;
9321 default:
9322 gcc_unreachable ();
9326 if (declspecs->std_attributes)
9328 /* Apply the c++11 attributes to the type preceding them. */
9329 source_location saved_loc = input_location;
9330 input_location = declspecs->locations[ds_std_attribute];
9331 decl_attributes (&type, declspecs->std_attributes, 0);
9332 input_location = saved_loc;
9335 /* Determine the type of the entity declared by recurring on the
9336 declarator. */
9337 for (; declarator; declarator = declarator->declarator)
9339 const cp_declarator *inner_declarator;
9340 tree attrs;
9342 if (type == error_mark_node)
9343 return error_mark_node;
9345 attrs = declarator->attributes;
9346 if (attrs)
9348 int attr_flags;
9350 attr_flags = 0;
9351 if (declarator == NULL || declarator->kind == cdk_id)
9352 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9353 if (declarator->kind == cdk_function)
9354 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9355 if (declarator->kind == cdk_array)
9356 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9357 returned_attrs = decl_attributes (&type,
9358 chainon (returned_attrs, attrs),
9359 attr_flags);
9362 if (declarator->kind == cdk_id)
9363 break;
9365 inner_declarator = declarator->declarator;
9367 switch (declarator->kind)
9369 case cdk_array:
9370 type = create_array_type_for_decl (dname, type,
9371 declarator->u.array.bounds);
9372 if (declarator->std_attributes)
9373 /* [dcl.array]/1:
9375 The optional attribute-specifier-seq appertains to the
9376 array. */
9377 returned_attrs = chainon (returned_attrs,
9378 declarator->std_attributes);
9379 break;
9381 case cdk_function:
9383 tree arg_types;
9384 int funcdecl_p;
9386 /* Declaring a function type.
9387 Make sure we have a valid type for the function to return. */
9389 if (type_quals != TYPE_UNQUALIFIED)
9391 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9392 warning (OPT_Wignored_qualifiers,
9393 "type qualifiers ignored on function return type");
9394 /* We now know that the TYPE_QUALS don't apply to the
9395 decl, but to its return type. */
9396 type_quals = TYPE_UNQUALIFIED;
9398 errmsg = targetm.invalid_return_type (type);
9399 if (errmsg)
9401 error (errmsg);
9402 type = integer_type_node;
9405 /* Error about some types functions can't return. */
9407 if (TREE_CODE (type) == FUNCTION_TYPE)
9409 error ("%qs declared as function returning a function", name);
9410 return error_mark_node;
9412 if (TREE_CODE (type) == ARRAY_TYPE)
9414 error ("%qs declared as function returning an array", name);
9415 return error_mark_node;
9417 /* When decl_context == NORMAL we emit a better error message
9418 later in abstract_virtuals_error. */
9419 if (decl_context == TYPENAME && ABSTRACT_CLASS_TYPE_P (type))
9420 error ("%qs declared as function returning an abstract "
9421 "class type", name);
9423 /* Pick up type qualifiers which should be applied to `this'. */
9424 memfn_quals = declarator->u.function.qualifiers;
9425 /* Pick up virt-specifiers. */
9426 virt_specifiers = declarator->u.function.virt_specifiers;
9427 /* Pick up the exception specifications. */
9428 raises = declarator->u.function.exception_specification;
9429 /* If the exception-specification is ill-formed, let's pretend
9430 there wasn't one. */
9431 if (raises == error_mark_node)
9432 raises = NULL_TREE;
9434 /* Say it's a definition only for the CALL_EXPR
9435 closest to the identifier. */
9436 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9438 /* Handle a late-specified return type. */
9439 if (funcdecl_p)
9441 if (type_uses_auto (type))
9443 if (!declarator->u.function.late_return_type)
9445 if (current_class_type
9446 && LAMBDA_TYPE_P (current_class_type))
9447 /* OK for C++11 lambdas. */;
9448 else if (cxx_dialect < cxx1y)
9449 pedwarn (input_location, 0, "%qs function uses "
9450 "%<auto%> type specifier without trailing "
9451 "return type", name);
9453 else if (!is_auto (type))
9455 error ("%qs function with trailing return type has"
9456 " %qT as its type rather than plain %<auto%>",
9457 name, type);
9458 return error_mark_node;
9461 else if (declarator->u.function.late_return_type)
9463 if (cxx_dialect < cxx0x)
9464 /* Not using maybe_warn_cpp0x because this should
9465 always be an error. */
9466 error ("trailing return type only available with "
9467 "-std=c++11 or -std=gnu++11");
9468 else
9469 error ("%qs function with trailing return type not "
9470 "declared with %<auto%> type specifier", name);
9471 return error_mark_node;
9474 type = splice_late_return_type
9475 (type, declarator->u.function.late_return_type);
9476 if (type == error_mark_node)
9477 return error_mark_node;
9479 if (ctype == NULL_TREE
9480 && decl_context == FIELD
9481 && funcdecl_p
9482 && (friendp == 0 || dname == current_class_name))
9483 ctype = current_class_type;
9485 if (ctype && (sfk == sfk_constructor
9486 || sfk == sfk_destructor))
9488 /* We are within a class's scope. If our declarator name
9489 is the same as the class name, and we are defining
9490 a function, then it is a constructor/destructor, and
9491 therefore returns a void type. */
9493 /* ISO C++ 12.4/2. A destructor may not be declared
9494 const or volatile. A destructor may not be
9495 static.
9497 ISO C++ 12.1. A constructor may not be declared
9498 const or volatile. A constructor may not be
9499 virtual. A constructor may not be static. */
9500 if (staticp == 2)
9501 error ((flags == DTOR_FLAG)
9502 ? G_("destructor cannot be static member function")
9503 : G_("constructor cannot be static member function"));
9504 if (memfn_quals)
9506 error ((flags == DTOR_FLAG)
9507 ? G_("destructors may not be cv-qualified")
9508 : G_("constructors may not be cv-qualified"));
9509 memfn_quals = TYPE_UNQUALIFIED;
9512 if (decl_context == FIELD
9513 && !member_function_or_else (ctype,
9514 current_class_type,
9515 flags))
9516 return error_mark_node;
9518 if (flags != DTOR_FLAG)
9520 /* It's a constructor. */
9521 if (explicitp == 1)
9522 explicitp = 2;
9523 if (virtualp)
9525 permerror (input_location, "constructors cannot be declared virtual");
9526 virtualp = 0;
9528 if (decl_context == FIELD
9529 && sfk != sfk_constructor)
9530 return error_mark_node;
9532 if (decl_context == FIELD)
9533 staticp = 0;
9535 else if (friendp)
9537 if (initialized)
9538 error ("can%'t initialize friend function %qs", name);
9539 if (virtualp)
9541 /* Cannot be both friend and virtual. */
9542 error ("virtual functions cannot be friends");
9543 friendp = 0;
9545 if (decl_context == NORMAL)
9546 error ("friend declaration not in class definition");
9547 if (current_function_decl && funcdef_flag)
9548 error ("can%'t define friend function %qs in a local "
9549 "class definition",
9550 name);
9552 else if (ctype && sfk == sfk_conversion)
9554 if (explicitp == 1)
9556 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9557 explicitp = 2;
9561 arg_types = grokparms (declarator->u.function.parameters,
9562 &parms);
9564 if (inner_declarator
9565 && inner_declarator->kind == cdk_id
9566 && inner_declarator->u.id.sfk == sfk_destructor
9567 && arg_types != void_list_node)
9569 error ("destructors may not have parameters");
9570 arg_types = void_list_node;
9571 parms = NULL_TREE;
9574 type = build_function_type (type, arg_types);
9575 if (declarator->std_attributes)
9576 /* [dcl.fct]/2:
9578 The optional attribute-specifier-seq appertains to
9579 the function type. */
9580 decl_attributes (&type, declarator->std_attributes,
9583 break;
9585 case cdk_pointer:
9586 case cdk_reference:
9587 case cdk_ptrmem:
9588 /* Filter out pointers-to-references and references-to-references.
9589 We can get these if a TYPE_DECL is used. */
9591 if (TREE_CODE (type) == REFERENCE_TYPE)
9593 if (declarator->kind != cdk_reference)
9595 error ("cannot declare pointer to %q#T", type);
9596 type = TREE_TYPE (type);
9599 /* In C++0x, we allow reference to reference declarations
9600 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9601 and template type arguments [14.3.1/4 temp.arg.type]. The
9602 check for direct reference to reference declarations, which
9603 are still forbidden, occurs below. Reasoning behind the change
9604 can be found in DR106, DR540, and the rvalue reference
9605 proposals. */
9606 else if (cxx_dialect == cxx98)
9608 error ("cannot declare reference to %q#T", type);
9609 type = TREE_TYPE (type);
9612 else if (VOID_TYPE_P (type))
9614 if (declarator->kind == cdk_reference)
9615 error ("cannot declare reference to %q#T", type);
9616 else if (declarator->kind == cdk_ptrmem)
9617 error ("cannot declare pointer to %q#T member", type);
9620 /* We now know that the TYPE_QUALS don't apply to the decl,
9621 but to the target of the pointer. */
9622 type_quals = TYPE_UNQUALIFIED;
9624 if (declarator->kind == cdk_ptrmem
9625 && (TREE_CODE (type) == FUNCTION_TYPE
9626 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9628 memfn_quals |= type_memfn_quals (type);
9629 type = build_memfn_type (type,
9630 declarator->u.pointer.class_type,
9631 memfn_quals);
9632 if (type == error_mark_node)
9633 return error_mark_node;
9634 memfn_quals = TYPE_UNQUALIFIED;
9637 if (TREE_CODE (type) == FUNCTION_TYPE
9638 && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9639 error (declarator->kind == cdk_reference
9640 ? G_("cannot declare reference to qualified function type %qT")
9641 : G_("cannot declare pointer to qualified function type %qT"),
9642 type);
9644 /* When the pointed-to type involves components of variable size,
9645 care must be taken to ensure that the size evaluation code is
9646 emitted early enough to dominate all the possible later uses
9647 and late enough for the variables on which it depends to have
9648 been assigned.
9650 This is expected to happen automatically when the pointed-to
9651 type has a name/declaration of it's own, but special attention
9652 is required if the type is anonymous.
9654 We handle the NORMAL and FIELD contexts here by inserting a
9655 dummy statement that just evaluates the size at a safe point
9656 and ensures it is not deferred until e.g. within a deeper
9657 conditional context (c++/43555).
9659 We expect nothing to be needed here for PARM or TYPENAME.
9660 Evaluating the size at this point for TYPENAME would
9661 actually be incorrect, as we might be in the middle of an
9662 expression with side effects on the pointed-to type size
9663 "arguments" prior to the pointer declaration point and the
9664 size evaluation could end up prior to the side effects. */
9666 if (!TYPE_NAME (type)
9667 && (decl_context == NORMAL || decl_context == FIELD)
9668 && at_function_scope_p ()
9669 && variably_modified_type_p (type, NULL_TREE))
9671 /* First break out any side-effects. */
9672 stabilize_vla_size (TYPE_SIZE (type));
9673 /* And then force evaluation of the SAVE_EXPR. */
9674 finish_expr_stmt (TYPE_SIZE (type));
9677 if (declarator->kind == cdk_reference)
9679 /* In C++0x, the type we are creating a reference to might be
9680 a typedef which is itself a reference type. In that case,
9681 we follow the reference collapsing rules in
9682 [7.1.3/8 dcl.typedef] to create the final reference type:
9684 "If a typedef TD names a type that is a reference to a type
9685 T, an attempt to create the type 'lvalue reference to cv TD'
9686 creates the type 'lvalue reference to T,' while an attempt
9687 to create the type "rvalue reference to cv TD' creates the
9688 type TD."
9690 if (VOID_TYPE_P (type))
9691 /* We already gave an error. */;
9692 else if (TREE_CODE (type) == REFERENCE_TYPE)
9694 if (declarator->u.reference.rvalue_ref)
9695 /* Leave type alone. */;
9696 else
9697 type = cp_build_reference_type (TREE_TYPE (type), false);
9699 else
9700 type = cp_build_reference_type
9701 (type, declarator->u.reference.rvalue_ref);
9703 /* In C++0x, we need this check for direct reference to
9704 reference declarations, which are forbidden by
9705 [8.3.2/5 dcl.ref]. Reference to reference declarations
9706 are only allowed indirectly through typedefs and template
9707 type arguments. Example:
9709 void foo(int & &); // invalid ref-to-ref decl
9711 typedef int & int_ref;
9712 void foo(int_ref &); // valid ref-to-ref decl
9714 if (inner_declarator && inner_declarator->kind == cdk_reference)
9715 error ("cannot declare reference to %q#T, which is not "
9716 "a typedef or a template type argument", type);
9718 else if (TREE_CODE (type) == METHOD_TYPE)
9719 type = build_ptrmemfunc_type (build_pointer_type (type));
9720 else if (declarator->kind == cdk_ptrmem)
9722 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9723 != NAMESPACE_DECL);
9724 if (declarator->u.pointer.class_type == error_mark_node)
9725 /* We will already have complained. */
9726 type = error_mark_node;
9727 else
9728 type = build_ptrmem_type (declarator->u.pointer.class_type,
9729 type);
9731 else
9732 type = build_pointer_type (type);
9734 /* Process a list of type modifier keywords (such as
9735 const or volatile) that were given inside the `*' or `&'. */
9737 if (declarator->u.pointer.qualifiers)
9739 type
9740 = cp_build_qualified_type (type,
9741 declarator->u.pointer.qualifiers);
9742 type_quals = cp_type_quals (type);
9745 /* Apply C++11 attributes to the pointer, and not to the
9746 type pointed to. This is unlike what is done for GNU
9747 attributes above. It is to comply with [dcl.ptr]/1:
9749 [the optional attribute-specifier-seq (7.6.1) appertains
9750 to the pointer and not to the object pointed to]. */
9751 if (declarator->std_attributes)
9752 decl_attributes (&type, declarator->std_attributes,
9755 ctype = NULL_TREE;
9756 break;
9758 case cdk_error:
9759 break;
9761 default:
9762 gcc_unreachable ();
9766 /* We need to stabilize side-effects in VLA sizes for regular array
9767 declarations too, not just pointers to arrays. */
9768 if (type != error_mark_node && !TYPE_NAME (type)
9769 && (decl_context == NORMAL || decl_context == FIELD)
9770 && at_function_scope_p ()
9771 && variably_modified_type_p (type, NULL_TREE))
9772 stabilize_vla_size (TYPE_SIZE (type));
9774 /* A `constexpr' specifier used in an object declaration declares
9775 the object as `const'. */
9776 if (constexpr_p && innermost_code != cdk_function)
9778 if (type_quals & TYPE_QUAL_VOLATILE)
9779 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9780 if (TREE_CODE (type) != REFERENCE_TYPE)
9782 type_quals |= TYPE_QUAL_CONST;
9783 type = cp_build_qualified_type (type, type_quals);
9787 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9788 && TREE_CODE (type) != FUNCTION_TYPE
9789 && TREE_CODE (type) != METHOD_TYPE)
9791 error ("template-id %qD used as a declarator",
9792 unqualified_id);
9793 unqualified_id = dname;
9796 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9797 qualified with a class-name, turn it into a METHOD_TYPE, unless
9798 we know that the function is static. We take advantage of this
9799 opportunity to do other processing that pertains to entities
9800 explicitly declared to be class members. Note that if DECLARATOR
9801 is non-NULL, we know it is a cdk_id declarator; otherwise, we
9802 would not have exited the loop above. */
9803 if (declarator
9804 && declarator->u.id.qualifying_scope
9805 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9807 ctype = declarator->u.id.qualifying_scope;
9808 ctype = TYPE_MAIN_VARIANT (ctype);
9809 template_count = num_template_headers_for_class (ctype);
9811 if (ctype == current_class_type)
9813 if (friendp)
9815 permerror (input_location, "member functions are implicitly friends of their class");
9816 friendp = 0;
9818 else
9819 permerror (declarator->id_loc,
9820 "extra qualification %<%T::%> on member %qs",
9821 ctype, name);
9823 else if (/* If the qualifying type is already complete, then we
9824 can skip the following checks. */
9825 !COMPLETE_TYPE_P (ctype)
9826 && (/* If the function is being defined, then
9827 qualifying type must certainly be complete. */
9828 funcdef_flag
9829 /* A friend declaration of "T::f" is OK, even if
9830 "T" is a template parameter. But, if this
9831 function is not a friend, the qualifying type
9832 must be a class. */
9833 || (!friendp && !CLASS_TYPE_P (ctype))
9834 /* For a declaration, the type need not be
9835 complete, if either it is dependent (since there
9836 is no meaningful definition of complete in that
9837 case) or the qualifying class is currently being
9838 defined. */
9839 || !(dependent_type_p (ctype)
9840 || currently_open_class (ctype)))
9841 /* Check that the qualifying type is complete. */
9842 && !complete_type_or_else (ctype, NULL_TREE))
9843 return error_mark_node;
9844 else if (TREE_CODE (type) == FUNCTION_TYPE)
9846 if (current_class_type
9847 && (!friendp || funcdef_flag))
9849 error (funcdef_flag
9850 ? G_("cannot define member function %<%T::%s%> "
9851 "within %<%T%>")
9852 : G_("cannot declare member function %<%T::%s%> "
9853 "within %<%T%>"),
9854 ctype, name, current_class_type);
9855 return error_mark_node;
9858 else if (decl_spec_seq_has_spec_p (declspecs, ds_typedef)
9859 && current_class_type)
9861 error ("cannot declare member %<%T::%s%> within %qT",
9862 ctype, name, current_class_type);
9863 return error_mark_node;
9867 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9868 ctype = current_class_type;
9870 /* Now TYPE has the actual type. */
9872 if (returned_attrs)
9874 if (attrlist)
9875 *attrlist = chainon (returned_attrs, *attrlist);
9876 else
9877 attrlist = &returned_attrs;
9880 if (declarator
9881 && declarator->kind == cdk_id
9882 && declarator->std_attributes)
9883 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
9884 a declarator-id appertains to the entity that is declared. */
9885 *attrlist = chainon (*attrlist, declarator->std_attributes);
9887 /* Handle parameter packs. */
9888 if (parameter_pack_p)
9890 if (decl_context == PARM)
9891 /* Turn the type into a pack expansion.*/
9892 type = make_pack_expansion (type);
9893 else
9894 error ("non-parameter %qs cannot be a parameter pack", name);
9897 /* Did array size calculations overflow or does the array cover more
9898 than half of the address-space? */
9899 if (TREE_CODE (type) == ARRAY_TYPE
9900 && COMPLETE_TYPE_P (type)
9901 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9902 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
9904 error ("size of array %qs is too large", name);
9905 /* If we proceed with the array type as it is, we'll eventually
9906 crash in tree_low_cst(). */
9907 type = error_mark_node;
9910 if ((decl_context == FIELD || decl_context == PARM)
9911 && !processing_template_decl
9912 && variably_modified_type_p (type, NULL_TREE))
9914 if (decl_context == FIELD)
9915 error ("data member may not have variably modified type %qT", type);
9916 else
9917 error ("parameter may not have variably modified type %qT", type);
9918 type = error_mark_node;
9921 if (explicitp == 1 || (explicitp && friendp))
9923 /* [dcl.fct.spec] The explicit specifier shall only be used in
9924 declarations of constructors within a class definition. */
9925 error ("only declarations of constructors can be %<explicit%>");
9926 explicitp = 0;
9929 if (storage_class == sc_mutable)
9931 if (decl_context != FIELD || friendp)
9933 error ("non-member %qs cannot be declared %<mutable%>", name);
9934 storage_class = sc_none;
9936 else if (decl_context == TYPENAME
9937 || decl_spec_seq_has_spec_p (declspecs, ds_typedef))
9939 error ("non-object member %qs cannot be declared %<mutable%>", name);
9940 storage_class = sc_none;
9942 else if (TREE_CODE (type) == FUNCTION_TYPE
9943 || TREE_CODE (type) == METHOD_TYPE)
9945 error ("function %qs cannot be declared %<mutable%>", name);
9946 storage_class = sc_none;
9948 else if (staticp)
9950 error ("static %qs cannot be declared %<mutable%>", name);
9951 storage_class = sc_none;
9953 else if (type_quals & TYPE_QUAL_CONST)
9955 error ("const %qs cannot be declared %<mutable%>", name);
9956 storage_class = sc_none;
9958 else if (TREE_CODE (type) == REFERENCE_TYPE)
9960 permerror (input_location, "reference %qs cannot be declared "
9961 "%<mutable%>", name);
9962 storage_class = sc_none;
9966 /* If this is declaring a typedef name, return a TYPE_DECL. */
9967 if (decl_spec_seq_has_spec_p (declspecs, ds_typedef) && decl_context != TYPENAME)
9969 tree decl;
9971 /* Note that the grammar rejects storage classes
9972 in typenames, fields or parameters. */
9973 if (current_lang_name == lang_name_java)
9974 TYPE_FOR_JAVA (type) = 1;
9976 /* This declaration:
9978 typedef void f(int) const;
9980 declares a function type which is not a member of any
9981 particular class, but which is cv-qualified; for
9982 example "f S::*" declares a pointer to a const-qualified
9983 member function of S. We record the cv-qualification in the
9984 function type. */
9985 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9987 type = apply_memfn_quals (type, memfn_quals);
9989 /* We have now dealt with these qualifiers. */
9990 memfn_quals = TYPE_UNQUALIFIED;
9993 if (type_uses_auto (type))
9995 error ("typedef declared %<auto%>");
9996 type = error_mark_node;
9999 if (decl_context == FIELD)
10000 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10001 else
10002 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10003 if (id_declarator && declarator->u.id.qualifying_scope) {
10004 error_at (DECL_SOURCE_LOCATION (decl),
10005 "typedef name may not be a nested-name-specifier");
10006 TREE_TYPE (decl) = error_mark_node;
10009 if (decl_context != FIELD)
10011 if (!current_function_decl)
10012 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10013 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10014 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10015 (current_function_decl)))
10016 /* The TYPE_DECL is "abstract" because there will be
10017 clones of this constructor/destructor, and there will
10018 be copies of this TYPE_DECL generated in those
10019 clones. */
10020 DECL_ABSTRACT (decl) = 1;
10022 else if (current_class_type
10023 && constructor_name_p (unqualified_id, current_class_type))
10024 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10025 "as enclosing class",
10026 unqualified_id);
10028 /* If the user declares "typedef struct {...} foo" then the
10029 struct will have an anonymous name. Fill that name in now.
10030 Nothing can refer to it, so nothing needs know about the name
10031 change. */
10032 if (type != error_mark_node
10033 && unqualified_id
10034 && TYPE_NAME (type)
10035 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10036 && TYPE_ANONYMOUS_P (type)
10037 && declspecs->type_definition_p
10038 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10040 tree t;
10042 /* Replace the anonymous name with the real name everywhere. */
10043 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10045 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10046 /* We do not rename the debug info representing the
10047 anonymous tagged type because the standard says in
10048 [dcl.typedef] that the naming applies only for
10049 linkage purposes. */
10050 /*debug_hooks->set_name (t, decl);*/
10051 TYPE_NAME (t) = decl;
10054 if (TYPE_LANG_SPECIFIC (type))
10055 TYPE_WAS_ANONYMOUS (type) = 1;
10057 /* If this is a typedef within a template class, the nested
10058 type is a (non-primary) template. The name for the
10059 template needs updating as well. */
10060 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10061 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10062 = TYPE_IDENTIFIER (type);
10064 /* Adjust linkage now that we aren't anonymous anymore. */
10065 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
10066 determine_visibility (TYPE_MAIN_DECL (type));
10068 /* FIXME remangle member functions; member functions of a
10069 type with external linkage have external linkage. */
10072 if (signed_p
10073 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10074 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10076 bad_specifiers (decl, BSP_TYPE, virtualp,
10077 memfn_quals != TYPE_UNQUALIFIED,
10078 inlinep, friendp, raises != NULL_TREE);
10080 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10081 /* Acknowledge that this was written:
10082 `using analias = atype;'. */
10083 TYPE_DECL_ALIAS_P (decl) = 1;
10085 return decl;
10088 /* Detect the case of an array type of unspecified size
10089 which came, as such, direct from a typedef name.
10090 We must copy the type, so that the array's domain can be
10091 individually set by the object's initializer. */
10093 if (type && typedef_type
10094 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10095 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10096 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10098 /* Detect where we're using a typedef of function type to declare a
10099 function. PARMS will not be set, so we must create it now. */
10101 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10103 tree decls = NULL_TREE;
10104 tree args;
10106 for (args = TYPE_ARG_TYPES (type);
10107 args && args != void_list_node;
10108 args = TREE_CHAIN (args))
10110 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10112 DECL_CHAIN (decl) = decls;
10113 decls = decl;
10116 parms = nreverse (decls);
10118 if (decl_context != TYPENAME)
10120 /* A cv-qualifier-seq shall only be part of the function type
10121 for a non-static member function. [8.3.5/4 dcl.fct] */
10122 if (type_memfn_quals (type) != TYPE_UNQUALIFIED
10123 && (current_class_type == NULL_TREE || staticp) )
10125 error (staticp
10126 ? G_("qualified function types cannot be used to "
10127 "declare static member functions")
10128 : G_("qualified function types cannot be used to "
10129 "declare free functions"));
10130 type = TYPE_MAIN_VARIANT (type);
10133 /* The qualifiers on the function type become the qualifiers on
10134 the non-static member function. */
10135 memfn_quals |= type_memfn_quals (type);
10136 type_quals = TYPE_UNQUALIFIED;
10140 /* If this is a type name (such as, in a cast or sizeof),
10141 compute the type and return it now. */
10143 if (decl_context == TYPENAME)
10145 /* Note that the grammar rejects storage classes
10146 in typenames, fields or parameters. */
10147 if (type_quals != TYPE_UNQUALIFIED)
10148 type_quals = TYPE_UNQUALIFIED;
10150 /* Special case: "friend class foo" looks like a TYPENAME context. */
10151 if (friendp)
10153 if (type_quals != TYPE_UNQUALIFIED)
10155 error ("type qualifiers specified for friend class declaration");
10156 type_quals = TYPE_UNQUALIFIED;
10158 if (inlinep)
10160 error ("%<inline%> specified for friend class declaration");
10161 inlinep = 0;
10164 if (!current_aggr)
10166 /* Don't allow friend declaration without a class-key. */
10167 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10168 permerror (input_location, "template parameters cannot be friends");
10169 else if (TREE_CODE (type) == TYPENAME_TYPE)
10170 permerror (input_location, "friend declaration requires class-key, "
10171 "i.e. %<friend class %T::%D%>",
10172 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10173 else
10174 permerror (input_location, "friend declaration requires class-key, "
10175 "i.e. %<friend %#T%>",
10176 type);
10179 /* Only try to do this stuff if we didn't already give up. */
10180 if (type != integer_type_node)
10182 /* A friendly class? */
10183 if (current_class_type)
10184 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10185 /*complain=*/true);
10186 else
10187 error ("trying to make class %qT a friend of global scope",
10188 type);
10190 type = void_type_node;
10193 else if (memfn_quals)
10195 if (ctype == NULL_TREE
10196 && TREE_CODE (type) == METHOD_TYPE)
10197 ctype = TYPE_METHOD_BASETYPE (type);
10199 if (ctype)
10200 type = build_memfn_type (type, ctype, memfn_quals);
10201 /* Core issue #547: need to allow this in template type args. */
10202 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
10203 type = apply_memfn_quals (type, memfn_quals);
10204 else
10205 error ("invalid qualifiers on non-member function type");
10208 return type;
10210 else if (unqualified_id == NULL_TREE && decl_context != PARM
10211 && decl_context != CATCHPARM
10212 && TREE_CODE (type) != UNION_TYPE
10213 && ! bitfield)
10215 error ("abstract declarator %qT used as declaration", type);
10216 return error_mark_node;
10219 /* Only functions may be declared using an operator-function-id. */
10220 if (unqualified_id
10221 && IDENTIFIER_OPNAME_P (unqualified_id)
10222 && TREE_CODE (type) != FUNCTION_TYPE
10223 && TREE_CODE (type) != METHOD_TYPE)
10225 error ("declaration of %qD as non-function", unqualified_id);
10226 return error_mark_node;
10229 /* We don't check parameter types here because we can emit a better
10230 error message later. */
10231 if (decl_context != PARM)
10233 type = check_var_type (unqualified_id, type);
10234 if (type == error_mark_node)
10235 return error_mark_node;
10238 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10239 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10241 if (decl_context == PARM || decl_context == CATCHPARM)
10243 if (ctype || in_namespace)
10244 error ("cannot use %<::%> in parameter declaration");
10246 if (type_uses_auto (type))
10248 error ("parameter declared %<auto%>");
10249 type = error_mark_node;
10252 /* A parameter declared as an array of T is really a pointer to T.
10253 One declared as a function is really a pointer to a function.
10254 One declared as a member is really a pointer to member. */
10256 if (TREE_CODE (type) == ARRAY_TYPE)
10258 /* Transfer const-ness of array into that of type pointed to. */
10259 type = build_pointer_type (TREE_TYPE (type));
10260 type_quals = TYPE_UNQUALIFIED;
10262 else if (TREE_CODE (type) == FUNCTION_TYPE)
10263 type = build_pointer_type (type);
10266 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10267 && !NEW_DELETE_OPNAME_P (unqualified_id))
10269 cp_cv_quals real_quals = memfn_quals;
10270 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10271 real_quals |= TYPE_QUAL_CONST;
10272 type = build_memfn_type (type, ctype, real_quals);
10276 tree decl;
10278 if (decl_context == PARM)
10280 decl = cp_build_parm_decl (unqualified_id, type);
10282 bad_specifiers (decl, BSP_PARM, virtualp,
10283 memfn_quals != TYPE_UNQUALIFIED,
10284 inlinep, friendp, raises != NULL_TREE);
10286 else if (decl_context == FIELD)
10288 if (!staticp && TREE_CODE (type) != METHOD_TYPE
10289 && type_uses_auto (type))
10291 error ("non-static data member declared %<auto%>");
10292 type = error_mark_node;
10295 /* The C99 flexible array extension. */
10296 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10297 && TYPE_DOMAIN (type) == NULL_TREE)
10299 tree itype = compute_array_index_type (dname, integer_zero_node,
10300 tf_warning_or_error);
10301 type = build_cplus_array_type (TREE_TYPE (type), itype);
10304 if (type == error_mark_node)
10306 /* Happens when declaring arrays of sizes which
10307 are error_mark_node, for example. */
10308 decl = NULL_TREE;
10310 else if (in_namespace && !friendp)
10312 /* Something like struct S { int N::j; }; */
10313 error ("invalid use of %<::%>");
10314 return error_mark_node;
10316 else if (TREE_CODE (type) == FUNCTION_TYPE
10317 || TREE_CODE (type) == METHOD_TYPE)
10319 int publicp = 0;
10320 tree function_context;
10322 if (friendp == 0)
10324 /* This should never happen in pure C++ (the check
10325 could be an assert). It could happen in
10326 Objective-C++ if someone writes invalid code that
10327 uses a function declaration for an instance
10328 variable or property (instance variables and
10329 properties are parsed as FIELD_DECLs, but they are
10330 part of an Objective-C class, not a C++ class).
10331 That code is invalid and is caught by this
10332 check. */
10333 if (!ctype)
10335 error ("declaration of function %qD in invalid context",
10336 unqualified_id);
10337 return error_mark_node;
10340 /* ``A union may [ ... ] not [ have ] virtual functions.''
10341 ARM 9.5 */
10342 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10344 error ("function %qD declared virtual inside a union",
10345 unqualified_id);
10346 return error_mark_node;
10349 if (NEW_DELETE_OPNAME_P (unqualified_id))
10351 if (virtualp)
10353 error ("%qD cannot be declared virtual, since it "
10354 "is always static",
10355 unqualified_id);
10356 virtualp = 0;
10361 /* Check that the name used for a destructor makes sense. */
10362 if (sfk == sfk_destructor)
10364 tree uqname = id_declarator->u.id.unqualified_name;
10366 if (!ctype)
10368 gcc_assert (friendp);
10369 error ("expected qualified name in friend declaration "
10370 "for destructor %qD", uqname);
10371 return error_mark_node;
10374 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10376 error ("declaration of %qD as member of %qT",
10377 uqname, ctype);
10378 return error_mark_node;
10380 if (constexpr_p)
10382 error ("a destructor cannot be %<constexpr%>");
10383 return error_mark_node;
10386 else if (sfk == sfk_constructor && friendp && !ctype)
10388 error ("expected qualified name in friend declaration "
10389 "for constructor %qD",
10390 id_declarator->u.id.unqualified_name);
10391 return error_mark_node;
10394 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10395 function_context = (ctype != NULL_TREE) ?
10396 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10397 publicp = (! friendp || ! staticp)
10398 && function_context == NULL_TREE;
10399 decl = grokfndecl (ctype, type,
10400 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10401 ? unqualified_id : dname,
10402 parms,
10403 unqualified_id,
10404 virtualp, flags, memfn_quals, raises,
10405 friendp ? -1 : 0, friendp, publicp,
10406 inlinep | (2 * constexpr_p),
10407 sfk,
10408 funcdef_flag, template_count, in_namespace,
10409 attrlist, declarator->id_loc);
10410 decl = set_virt_specifiers (decl, virt_specifiers);
10411 if (decl == NULL_TREE)
10412 return error_mark_node;
10413 #if 0
10414 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10415 /* The decl and setting of decl_attr is also turned off. */
10416 decl = build_decl_attribute_variant (decl, decl_attr);
10417 #endif
10419 /* [class.conv.ctor]
10421 A constructor declared without the function-specifier
10422 explicit that can be called with a single parameter
10423 specifies a conversion from the type of its first
10424 parameter to the type of its class. Such a constructor
10425 is called a converting constructor. */
10426 if (explicitp == 2)
10427 DECL_NONCONVERTING_P (decl) = 1;
10429 else if (!staticp && !dependent_type_p (type)
10430 && !COMPLETE_TYPE_P (complete_type (type))
10431 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10433 if (unqualified_id)
10434 error ("field %qD has incomplete type", unqualified_id);
10435 else
10436 error ("name %qT has incomplete type", type);
10438 /* If we're instantiating a template, tell them which
10439 instantiation made the field's type be incomplete. */
10440 if (current_class_type
10441 && TYPE_NAME (current_class_type)
10442 && IDENTIFIER_TEMPLATE (current_class_name)
10443 && declspecs->type
10444 && declspecs->type == type)
10445 error (" in instantiation of template %qT",
10446 current_class_type);
10448 return error_mark_node;
10450 else
10452 if (friendp)
10454 error ("%qE is neither function nor member function; "
10455 "cannot be declared friend", unqualified_id);
10456 friendp = 0;
10458 decl = NULL_TREE;
10461 if (friendp)
10463 /* Friends are treated specially. */
10464 if (ctype == current_class_type)
10465 ; /* We already issued a permerror. */
10466 else if (decl && DECL_NAME (decl))
10468 if (template_class_depth (current_class_type) == 0)
10470 decl = check_explicit_specialization
10471 (unqualified_id, decl, template_count,
10472 2 * funcdef_flag + 4);
10473 if (decl == error_mark_node)
10474 return error_mark_node;
10477 decl = do_friend (ctype, unqualified_id, decl,
10478 *attrlist, flags,
10479 funcdef_flag);
10480 return decl;
10482 else
10483 return error_mark_node;
10486 /* Structure field. It may not be a function, except for C++. */
10488 if (decl == NULL_TREE)
10490 if (staticp)
10492 /* C++ allows static class members. All other work
10493 for this is done by grokfield. */
10494 decl = build_lang_decl_loc (declarator->id_loc,
10495 VAR_DECL, unqualified_id, type);
10496 set_linkage_for_static_data_member (decl);
10497 /* Even if there is an in-class initialization, DECL
10498 is considered undefined until an out-of-class
10499 definition is provided. */
10500 DECL_EXTERNAL (decl) = 1;
10502 if (thread_p)
10504 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10505 if (declspecs->gnu_thread_keyword_p)
10506 DECL_GNU_TLS_P (decl) = true;
10509 if (constexpr_p && !initialized)
10511 error ("constexpr static data member %qD must have an "
10512 "initializer", decl);
10513 constexpr_p = false;
10516 else
10518 if (constexpr_p)
10520 error ("non-static data member %qE declared %<constexpr%>",
10521 unqualified_id);
10522 constexpr_p = false;
10524 decl = build_decl (input_location,
10525 FIELD_DECL, unqualified_id, type);
10526 DECL_NONADDRESSABLE_P (decl) = bitfield;
10527 if (bitfield && !unqualified_id)
10528 TREE_NO_WARNING (decl) = 1;
10530 if (storage_class == sc_mutable)
10532 DECL_MUTABLE_P (decl) = 1;
10533 storage_class = sc_none;
10536 if (initialized)
10538 /* An attempt is being made to initialize a non-static
10539 member. This is new in C++11. */
10540 maybe_warn_cpp0x (CPP0X_NSDMI);
10542 /* If this has been parsed with static storage class, but
10543 errors forced staticp to be cleared, ensure NSDMI is
10544 not present. */
10545 if (declspecs->storage_class == sc_static)
10546 DECL_INITIAL (decl) = error_mark_node;
10550 bad_specifiers (decl, BSP_FIELD, virtualp,
10551 memfn_quals != TYPE_UNQUALIFIED,
10552 inlinep, friendp, raises != NULL_TREE);
10555 else if (TREE_CODE (type) == FUNCTION_TYPE
10556 || TREE_CODE (type) == METHOD_TYPE)
10558 tree original_name;
10559 int publicp = 0;
10561 if (!unqualified_id)
10562 return error_mark_node;
10564 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10565 original_name = dname;
10566 else
10567 original_name = unqualified_id;
10569 if (storage_class == sc_auto)
10570 error ("storage class %<auto%> invalid for function %qs", name);
10571 else if (storage_class == sc_register)
10572 error ("storage class %<register%> invalid for function %qs", name);
10573 else if (thread_p)
10575 if (declspecs->gnu_thread_keyword_p)
10576 error ("storage class %<__thread%> invalid for function %qs",
10577 name);
10578 else
10579 error ("storage class %<thread_local%> invalid for function %qs",
10580 name);
10583 if (virt_specifiers)
10584 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10585 /* Function declaration not at top level.
10586 Storage classes other than `extern' are not allowed
10587 and `extern' makes no difference. */
10588 if (! toplevel_bindings_p ()
10589 && (storage_class == sc_static
10590 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10591 && pedantic)
10593 if (storage_class == sc_static)
10594 pedwarn (input_location, OPT_Wpedantic,
10595 "%<static%> specified invalid for function %qs "
10596 "declared out of global scope", name);
10597 else
10598 pedwarn (input_location, OPT_Wpedantic,
10599 "%<inline%> specifier invalid for function %qs "
10600 "declared out of global scope", name);
10603 if (ctype == NULL_TREE)
10605 if (virtualp)
10607 error ("virtual non-class function %qs", name);
10608 virtualp = 0;
10610 else if (sfk == sfk_constructor
10611 || sfk == sfk_destructor)
10613 error (funcdef_flag
10614 ? G_("%qs defined in a non-class scope")
10615 : G_("%qs declared in a non-class scope"), name);
10616 sfk = sfk_none;
10620 /* Record presence of `static'. */
10621 publicp = (ctype != NULL_TREE
10622 || storage_class == sc_extern
10623 || storage_class != sc_static);
10625 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10626 virtualp, flags, memfn_quals, raises,
10627 1, friendp,
10628 publicp, inlinep | (2 * constexpr_p), sfk,
10629 funcdef_flag,
10630 template_count, in_namespace, attrlist,
10631 declarator->id_loc);
10632 if (decl == NULL_TREE)
10633 return error_mark_node;
10635 if (staticp == 1)
10637 int invalid_static = 0;
10639 /* Don't allow a static member function in a class, and forbid
10640 declaring main to be static. */
10641 if (TREE_CODE (type) == METHOD_TYPE)
10643 permerror (input_location, "cannot declare member function %qD to have "
10644 "static linkage", decl);
10645 invalid_static = 1;
10647 else if (current_function_decl)
10649 /* FIXME need arm citation */
10650 error ("cannot declare static function inside another function");
10651 invalid_static = 1;
10654 if (invalid_static)
10656 staticp = 0;
10657 storage_class = sc_none;
10661 else
10663 /* It's a variable. */
10665 /* An uninitialized decl with `extern' is a reference. */
10666 decl = grokvardecl (type, unqualified_id,
10667 declspecs,
10668 initialized,
10669 (type_quals & TYPE_QUAL_CONST) != 0,
10670 ctype ? ctype : in_namespace);
10671 bad_specifiers (decl, BSP_VAR, virtualp,
10672 memfn_quals != TYPE_UNQUALIFIED,
10673 inlinep, friendp, raises != NULL_TREE);
10675 if (ctype)
10677 DECL_CONTEXT (decl) = ctype;
10678 if (staticp == 1)
10680 permerror (input_location, "%<static%> may not be used when defining "
10681 "(as opposed to declaring) a static data member");
10682 staticp = 0;
10683 storage_class = sc_none;
10685 if (storage_class == sc_register && TREE_STATIC (decl))
10687 error ("static member %qD declared %<register%>", decl);
10688 storage_class = sc_none;
10690 if (storage_class == sc_extern && pedantic)
10692 pedwarn (input_location, OPT_Wpedantic,
10693 "cannot explicitly declare member %q#D to have "
10694 "extern linkage", decl);
10695 storage_class = sc_none;
10698 else if (constexpr_p && DECL_EXTERNAL (decl))
10700 error ("declaration of constexpr variable %qD is not a definition",
10701 decl);
10702 constexpr_p = false;
10706 if (storage_class == sc_extern && initialized && !funcdef_flag)
10708 if (toplevel_bindings_p ())
10710 /* It's common practice (and completely valid) to have a const
10711 be initialized and declared extern. */
10712 if (!(type_quals & TYPE_QUAL_CONST))
10713 warning (0, "%qs initialized and declared %<extern%>", name);
10715 else
10717 error ("%qs has both %<extern%> and initializer", name);
10718 return error_mark_node;
10722 /* Record `register' declaration for warnings on &
10723 and in case doing stupid register allocation. */
10725 if (storage_class == sc_register)
10726 DECL_REGISTER (decl) = 1;
10727 else if (storage_class == sc_extern)
10728 DECL_THIS_EXTERN (decl) = 1;
10729 else if (storage_class == sc_static)
10730 DECL_THIS_STATIC (decl) = 1;
10732 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10733 if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10734 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10736 /* Record constancy and volatility on the DECL itself . There's
10737 no need to do this when processing a template; we'll do this
10738 for the instantiated declaration based on the type of DECL. */
10739 if (!processing_template_decl)
10740 cp_apply_type_quals_to_decl (type_quals, decl);
10742 return decl;
10746 /* Subroutine of start_function. Ensure that each of the parameter
10747 types (as listed in PARMS) is complete, as is required for a
10748 function definition. */
10750 static void
10751 require_complete_types_for_parms (tree parms)
10753 for (; parms; parms = DECL_CHAIN (parms))
10755 if (dependent_type_p (TREE_TYPE (parms)))
10756 continue;
10757 if (!VOID_TYPE_P (TREE_TYPE (parms))
10758 && complete_type_or_else (TREE_TYPE (parms), parms))
10760 relayout_decl (parms);
10761 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10763 else
10764 /* grokparms or complete_type_or_else will have already issued
10765 an error. */
10766 TREE_TYPE (parms) = error_mark_node;
10770 /* Returns nonzero if T is a local variable. */
10773 local_variable_p (const_tree t)
10775 if ((TREE_CODE (t) == VAR_DECL
10776 /* A VAR_DECL with a context that is a _TYPE is a static data
10777 member. */
10778 && !TYPE_P (CP_DECL_CONTEXT (t))
10779 /* Any other non-local variable must be at namespace scope. */
10780 && !DECL_NAMESPACE_SCOPE_P (t))
10781 || (TREE_CODE (t) == PARM_DECL))
10782 return 1;
10784 return 0;
10787 /* Like local_variable_p, but suitable for use as a tree-walking
10788 function. */
10790 static tree
10791 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10792 void * /*data*/)
10794 /* Check DECL_NAME to avoid including temporaries. We don't check
10795 DECL_ARTIFICIAL because we do want to complain about 'this'. */
10796 if (local_variable_p (*tp) && DECL_NAME (*tp))
10797 return *tp;
10798 else if (TYPE_P (*tp))
10799 *walk_subtrees = 0;
10801 return NULL_TREE;
10804 /* Check that ARG, which is a default-argument expression for a
10805 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
10806 something goes wrong. DECL may also be a _TYPE node, rather than a
10807 DECL, if there is no DECL available. */
10809 tree
10810 check_default_argument (tree decl, tree arg)
10812 tree var;
10813 tree decl_type;
10815 if (TREE_CODE (arg) == DEFAULT_ARG)
10816 /* We get a DEFAULT_ARG when looking at an in-class declaration
10817 with a default argument. Ignore the argument for now; we'll
10818 deal with it after the class is complete. */
10819 return arg;
10821 if (TYPE_P (decl))
10823 decl_type = decl;
10824 decl = NULL_TREE;
10826 else
10827 decl_type = TREE_TYPE (decl);
10829 if (arg == error_mark_node
10830 || decl == error_mark_node
10831 || TREE_TYPE (arg) == error_mark_node
10832 || decl_type == error_mark_node)
10833 /* Something already went wrong. There's no need to check
10834 further. */
10835 return error_mark_node;
10837 /* [dcl.fct.default]
10839 A default argument expression is implicitly converted to the
10840 parameter type. */
10841 ++cp_unevaluated_operand;
10842 perform_implicit_conversion_flags (decl_type, arg, tf_warning_or_error,
10843 LOOKUP_NORMAL);
10844 --cp_unevaluated_operand;
10846 if (warn_zero_as_null_pointer_constant
10847 && c_inhibit_evaluation_warnings == 0
10848 && TYPE_PTR_OR_PTRMEM_P (decl_type)
10849 && null_ptr_cst_p (arg)
10850 && !NULLPTR_TYPE_P (TREE_TYPE (arg)))
10852 warning (OPT_Wzero_as_null_pointer_constant,
10853 "zero as null pointer constant");
10854 return nullptr_node;
10857 /* [dcl.fct.default]
10859 Local variables shall not be used in default argument
10860 expressions.
10862 The keyword `this' shall not be used in a default argument of a
10863 member function. */
10864 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10865 if (var)
10867 if (DECL_NAME (var) == this_identifier)
10868 permerror (input_location, "default argument %qE uses %qD", arg, var);
10869 else
10870 error ("default argument %qE uses local variable %qD", arg, var);
10871 return error_mark_node;
10874 /* All is well. */
10875 return arg;
10878 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
10880 static tree
10881 type_is_deprecated (tree type)
10883 enum tree_code code;
10884 if (TREE_DEPRECATED (type))
10885 return type;
10886 if (TYPE_NAME (type)
10887 && TREE_DEPRECATED (TYPE_NAME (type)))
10888 return type;
10890 /* Do warn about using typedefs to a deprecated class. */
10891 if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10892 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10894 code = TREE_CODE (type);
10896 if (code == POINTER_TYPE || code == REFERENCE_TYPE
10897 || code == OFFSET_TYPE || code == FUNCTION_TYPE
10898 || code == METHOD_TYPE || code == ARRAY_TYPE)
10899 return type_is_deprecated (TREE_TYPE (type));
10901 if (TYPE_PTRMEMFUNC_P (type))
10902 return type_is_deprecated
10903 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10905 return NULL_TREE;
10908 /* Decode the list of parameter types for a function type.
10909 Given the list of things declared inside the parens,
10910 return a list of types.
10912 If this parameter does not end with an ellipsis, we append
10913 void_list_node.
10915 *PARMS is set to the chain of PARM_DECLs created. */
10917 static tree
10918 grokparms (tree parmlist, tree *parms)
10920 tree result = NULL_TREE;
10921 tree decls = NULL_TREE;
10922 tree parm;
10923 int any_error = 0;
10925 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10927 tree type = NULL_TREE;
10928 tree init = TREE_PURPOSE (parm);
10929 tree decl = TREE_VALUE (parm);
10930 const char *errmsg;
10932 if (parm == void_list_node)
10933 break;
10935 if (! decl || TREE_TYPE (decl) == error_mark_node)
10936 continue;
10938 type = TREE_TYPE (decl);
10939 if (VOID_TYPE_P (type))
10941 if (same_type_p (type, void_type_node)
10942 && DECL_SELF_REFERENCE_P (type)
10943 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10944 /* this is a parmlist of `(void)', which is ok. */
10945 break;
10946 cxx_incomplete_type_error (decl, type);
10947 /* It's not a good idea to actually create parameters of
10948 type `void'; other parts of the compiler assume that a
10949 void type terminates the parameter list. */
10950 type = error_mark_node;
10951 TREE_TYPE (decl) = error_mark_node;
10954 if (type != error_mark_node
10955 && TYPE_FOR_JAVA (type)
10956 && MAYBE_CLASS_TYPE_P (type))
10958 error ("parameter %qD has Java class type", decl);
10959 type = error_mark_node;
10960 TREE_TYPE (decl) = error_mark_node;
10961 init = NULL_TREE;
10964 if (type != error_mark_node
10965 && (errmsg = targetm.invalid_parameter_type (type)))
10967 error (errmsg);
10968 type = error_mark_node;
10969 TREE_TYPE (decl) = error_mark_node;
10972 if (type != error_mark_node)
10974 if (deprecated_state != DEPRECATED_SUPPRESS)
10976 tree deptype = type_is_deprecated (type);
10977 if (deptype)
10978 warn_deprecated_use (deptype, NULL_TREE);
10981 /* Top-level qualifiers on the parameters are
10982 ignored for function types. */
10983 type = cp_build_qualified_type (type, 0);
10984 if (TREE_CODE (type) == METHOD_TYPE)
10986 error ("parameter %qD invalidly declared method type", decl);
10987 type = build_pointer_type (type);
10988 TREE_TYPE (decl) = type;
10990 else if (abstract_virtuals_error (decl, type))
10991 any_error = 1; /* Seems like a good idea. */
10992 else if (POINTER_TYPE_P (type))
10994 /* [dcl.fct]/6, parameter types cannot contain pointers
10995 (references) to arrays of unknown bound. */
10996 tree t = TREE_TYPE (type);
10997 int ptr = TYPE_PTR_P (type);
10999 while (1)
11001 if (TYPE_PTR_P (t))
11002 ptr = 1;
11003 else if (TREE_CODE (t) != ARRAY_TYPE)
11004 break;
11005 else if (!TYPE_DOMAIN (t))
11006 break;
11007 t = TREE_TYPE (t);
11009 if (TREE_CODE (t) == ARRAY_TYPE)
11010 error (ptr
11011 ? G_("parameter %qD includes pointer to array of "
11012 "unknown bound %qT")
11013 : G_("parameter %qD includes reference to array of "
11014 "unknown bound %qT"),
11015 decl, t);
11018 if (any_error)
11019 init = NULL_TREE;
11020 else if (init && !processing_template_decl)
11021 init = check_default_argument (decl, init);
11024 DECL_CHAIN (decl) = decls;
11025 decls = decl;
11026 result = tree_cons (init, type, result);
11028 decls = nreverse (decls);
11029 result = nreverse (result);
11030 if (parm)
11031 result = chainon (result, void_list_node);
11032 *parms = decls;
11034 return result;
11038 /* D is a constructor or overloaded `operator='.
11040 Let T be the class in which D is declared. Then, this function
11041 returns:
11043 -1 if D's is an ill-formed constructor or copy assignment operator
11044 whose first parameter is of type `T'.
11045 0 if D is not a copy constructor or copy assignment
11046 operator.
11047 1 if D is a copy constructor or copy assignment operator whose
11048 first parameter is a reference to non-const qualified T.
11049 2 if D is a copy constructor or copy assignment operator whose
11050 first parameter is a reference to const qualified T.
11052 This function can be used as a predicate. Positive values indicate
11053 a copy constructor and nonzero values indicate a copy assignment
11054 operator. */
11057 copy_fn_p (const_tree d)
11059 tree args;
11060 tree arg_type;
11061 int result = 1;
11063 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11065 if (TREE_CODE (d) == TEMPLATE_DECL
11066 || (DECL_TEMPLATE_INFO (d)
11067 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11068 /* Instantiations of template member functions are never copy
11069 functions. Note that member functions of templated classes are
11070 represented as template functions internally, and we must
11071 accept those as copy functions. */
11072 return 0;
11074 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11075 if (!args)
11076 return 0;
11078 arg_type = TREE_VALUE (args);
11079 if (arg_type == error_mark_node)
11080 return 0;
11082 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11084 /* Pass by value copy assignment operator. */
11085 result = -1;
11087 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11088 && !TYPE_REF_IS_RVALUE (arg_type)
11089 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11091 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11092 result = 2;
11094 else
11095 return 0;
11097 args = TREE_CHAIN (args);
11099 if (args && args != void_list_node && !TREE_PURPOSE (args))
11100 /* There are more non-optional args. */
11101 return 0;
11103 return result;
11106 /* D is a constructor or overloaded `operator='.
11108 Let T be the class in which D is declared. Then, this function
11109 returns true when D is a move constructor or move assignment
11110 operator, false otherwise. */
11112 bool
11113 move_fn_p (const_tree d)
11115 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11117 if (cxx_dialect == cxx98)
11118 /* There are no move constructors if we are in C++98 mode. */
11119 return false;
11121 if (TREE_CODE (d) == TEMPLATE_DECL
11122 || (DECL_TEMPLATE_INFO (d)
11123 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11124 /* Instantiations of template member functions are never move
11125 functions. Note that member functions of templated classes are
11126 represented as template functions internally, and we must
11127 accept those as move functions. */
11128 return 0;
11130 return move_signature_fn_p (d);
11133 /* D is a constructor or overloaded `operator='.
11135 Then, this function returns true when D has the same signature as a move
11136 constructor or move assignment operator (because either it is such a
11137 ctor/op= or it is a template specialization with the same signature),
11138 false otherwise. */
11140 bool
11141 move_signature_fn_p (const_tree d)
11143 tree args;
11144 tree arg_type;
11145 bool result = false;
11147 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11148 if (!args)
11149 return 0;
11151 arg_type = TREE_VALUE (args);
11152 if (arg_type == error_mark_node)
11153 return 0;
11155 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11156 && TYPE_REF_IS_RVALUE (arg_type)
11157 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11158 DECL_CONTEXT (d)))
11159 result = true;
11161 args = TREE_CHAIN (args);
11163 if (args && args != void_list_node && !TREE_PURPOSE (args))
11164 /* There are more non-optional args. */
11165 return false;
11167 return result;
11170 /* Remember any special properties of member function DECL. */
11172 void
11173 grok_special_member_properties (tree decl)
11175 tree class_type;
11177 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11178 return;
11180 class_type = DECL_CONTEXT (decl);
11181 if (DECL_CONSTRUCTOR_P (decl))
11183 int ctor = copy_fn_p (decl);
11185 if (!DECL_ARTIFICIAL (decl))
11186 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11188 if (ctor > 0)
11190 /* [class.copy]
11192 A non-template constructor for class X is a copy
11193 constructor if its first parameter is of type X&, const
11194 X&, volatile X& or const volatile X&, and either there
11195 are no other parameters or else all other parameters have
11196 default arguments. */
11197 TYPE_HAS_COPY_CTOR (class_type) = 1;
11198 if (user_provided_p (decl))
11199 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11200 if (ctor > 1)
11201 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11203 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11205 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11206 if (user_provided_p (decl))
11207 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
11209 else if (move_fn_p (decl) && user_provided_p (decl))
11210 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11211 else if (is_list_ctor (decl))
11212 TYPE_HAS_LIST_CTOR (class_type) = 1;
11214 if (DECL_DECLARED_CONSTEXPR_P (decl)
11215 && !copy_fn_p (decl) && !move_fn_p (decl))
11216 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11218 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11220 /* [class.copy]
11222 A non-template assignment operator for class X is a copy
11223 assignment operator if its parameter is of type X, X&, const
11224 X&, volatile X& or const volatile X&. */
11226 int assop = copy_fn_p (decl);
11228 if (assop)
11230 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11231 if (user_provided_p (decl))
11232 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11233 if (assop != 1)
11234 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11236 else if (move_fn_p (decl) && user_provided_p (decl))
11237 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11239 /* Destructors are handled in check_methods. */
11242 /* Check a constructor DECL has the correct form. Complains
11243 if the class has a constructor of the form X(X). */
11246 grok_ctor_properties (const_tree ctype, const_tree decl)
11248 int ctor_parm = copy_fn_p (decl);
11250 if (ctor_parm < 0)
11252 /* [class.copy]
11254 A declaration of a constructor for a class X is ill-formed if
11255 its first parameter is of type (optionally cv-qualified) X
11256 and either there are no other parameters or else all other
11257 parameters have default arguments.
11259 We *don't* complain about member template instantiations that
11260 have this form, though; they can occur as we try to decide
11261 what constructor to use during overload resolution. Since
11262 overload resolution will never prefer such a constructor to
11263 the non-template copy constructor (which is either explicitly
11264 or implicitly defined), there's no need to worry about their
11265 existence. Theoretically, they should never even be
11266 instantiated, but that's hard to forestall. */
11267 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11268 ctype, ctype);
11269 return 0;
11272 return 1;
11275 /* An operator with this code is unary, but can also be binary. */
11277 static int
11278 ambi_op_p (enum tree_code code)
11280 return (code == INDIRECT_REF
11281 || code == ADDR_EXPR
11282 || code == UNARY_PLUS_EXPR
11283 || code == NEGATE_EXPR
11284 || code == PREINCREMENT_EXPR
11285 || code == PREDECREMENT_EXPR);
11288 /* An operator with this name can only be unary. */
11290 static int
11291 unary_op_p (enum tree_code code)
11293 return (code == TRUTH_NOT_EXPR
11294 || code == BIT_NOT_EXPR
11295 || code == COMPONENT_REF
11296 || code == TYPE_EXPR);
11299 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11300 errors are issued for invalid declarations. */
11302 bool
11303 grok_op_properties (tree decl, bool complain)
11305 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11306 tree argtype;
11307 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11308 tree name = DECL_NAME (decl);
11309 enum tree_code operator_code;
11310 int arity;
11311 bool ellipsis_p;
11312 tree class_type;
11314 /* Count the number of arguments and check for ellipsis. */
11315 for (argtype = argtypes, arity = 0;
11316 argtype && argtype != void_list_node;
11317 argtype = TREE_CHAIN (argtype))
11318 ++arity;
11319 ellipsis_p = !argtype;
11321 class_type = DECL_CONTEXT (decl);
11322 if (class_type && !CLASS_TYPE_P (class_type))
11323 class_type = NULL_TREE;
11325 if (DECL_CONV_FN_P (decl))
11326 operator_code = TYPE_EXPR;
11327 else
11330 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11331 if (ansi_opname (CODE) == name) \
11333 operator_code = (CODE); \
11334 break; \
11336 else if (ansi_assopname (CODE) == name) \
11338 operator_code = (CODE); \
11339 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11340 break; \
11343 #include "operators.def"
11344 #undef DEF_OPERATOR
11346 gcc_unreachable ();
11348 while (0);
11349 gcc_assert (operator_code != MAX_TREE_CODES);
11350 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11352 if (class_type)
11353 switch (operator_code)
11355 case NEW_EXPR:
11356 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11357 break;
11359 case DELETE_EXPR:
11360 TYPE_GETS_DELETE (class_type) |= 1;
11361 break;
11363 case VEC_NEW_EXPR:
11364 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11365 break;
11367 case VEC_DELETE_EXPR:
11368 TYPE_GETS_DELETE (class_type) |= 2;
11369 break;
11371 default:
11372 break;
11375 /* [basic.std.dynamic.allocation]/1:
11377 A program is ill-formed if an allocation function is declared
11378 in a namespace scope other than global scope or declared static
11379 in global scope.
11381 The same also holds true for deallocation functions. */
11382 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11383 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11385 if (DECL_NAMESPACE_SCOPE_P (decl))
11387 if (CP_DECL_CONTEXT (decl) != global_namespace)
11389 error ("%qD may not be declared within a namespace", decl);
11390 return false;
11392 else if (!TREE_PUBLIC (decl))
11394 error ("%qD may not be declared as static", decl);
11395 return false;
11400 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11402 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11403 DECL_IS_OPERATOR_NEW (decl) = 1;
11405 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11406 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11407 else
11409 /* An operator function must either be a non-static member function
11410 or have at least one parameter of a class, a reference to a class,
11411 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11412 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11414 if (operator_code == TYPE_EXPR
11415 || operator_code == CALL_EXPR
11416 || operator_code == COMPONENT_REF
11417 || operator_code == ARRAY_REF
11418 || operator_code == NOP_EXPR)
11420 error ("%qD must be a nonstatic member function", decl);
11421 return false;
11423 else
11425 tree p;
11427 if (DECL_STATIC_FUNCTION_P (decl))
11429 error ("%qD must be either a non-static member "
11430 "function or a non-member function", decl);
11431 return false;
11434 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11436 tree arg = non_reference (TREE_VALUE (p));
11437 if (arg == error_mark_node)
11438 return false;
11440 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11441 because these checks are performed even on
11442 template functions. */
11443 if (MAYBE_CLASS_TYPE_P (arg)
11444 || TREE_CODE (arg) == ENUMERAL_TYPE)
11445 break;
11448 if (!p || p == void_list_node)
11450 if (complain)
11451 error ("%qD must have an argument of class or "
11452 "enumerated type", decl);
11453 return false;
11458 /* There are no restrictions on the arguments to an overloaded
11459 "operator ()". */
11460 if (operator_code == CALL_EXPR)
11461 return true;
11463 /* Warn about conversion operators that will never be used. */
11464 if (IDENTIFIER_TYPENAME_P (name)
11465 && ! DECL_TEMPLATE_INFO (decl)
11466 && warn_conversion
11467 /* Warn only declaring the function; there is no need to
11468 warn again about out-of-class definitions. */
11469 && class_type == current_class_type)
11471 tree t = TREE_TYPE (name);
11472 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11474 if (ref)
11475 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11477 if (TREE_CODE (t) == VOID_TYPE)
11478 warning (OPT_Wconversion,
11480 ? G_("conversion to a reference to void "
11481 "will never use a type conversion operator")
11482 : G_("conversion to void "
11483 "will never use a type conversion operator"));
11484 else if (class_type)
11486 if (t == class_type)
11487 warning (OPT_Wconversion,
11489 ? G_("conversion to a reference to the same type "
11490 "will never use a type conversion operator")
11491 : G_("conversion to the same type "
11492 "will never use a type conversion operator"));
11493 /* Don't force t to be complete here. */
11494 else if (MAYBE_CLASS_TYPE_P (t)
11495 && COMPLETE_TYPE_P (t)
11496 && DERIVED_FROM_P (t, class_type))
11497 warning (OPT_Wconversion,
11499 ? G_("conversion to a reference to a base class "
11500 "will never use a type conversion operator")
11501 : G_("conversion to a base class "
11502 "will never use a type conversion operator"));
11507 if (operator_code == COND_EXPR)
11509 /* 13.4.0.3 */
11510 error ("ISO C++ prohibits overloading operator ?:");
11511 return false;
11513 else if (ellipsis_p)
11515 error ("%qD must not have variable number of arguments", decl);
11516 return false;
11518 else if (ambi_op_p (operator_code))
11520 if (arity == 1)
11521 /* We pick the one-argument operator codes by default, so
11522 we don't have to change anything. */
11524 else if (arity == 2)
11526 /* If we thought this was a unary operator, we now know
11527 it to be a binary operator. */
11528 switch (operator_code)
11530 case INDIRECT_REF:
11531 operator_code = MULT_EXPR;
11532 break;
11534 case ADDR_EXPR:
11535 operator_code = BIT_AND_EXPR;
11536 break;
11538 case UNARY_PLUS_EXPR:
11539 operator_code = PLUS_EXPR;
11540 break;
11542 case NEGATE_EXPR:
11543 operator_code = MINUS_EXPR;
11544 break;
11546 case PREINCREMENT_EXPR:
11547 operator_code = POSTINCREMENT_EXPR;
11548 break;
11550 case PREDECREMENT_EXPR:
11551 operator_code = POSTDECREMENT_EXPR;
11552 break;
11554 default:
11555 gcc_unreachable ();
11558 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11560 if ((operator_code == POSTINCREMENT_EXPR
11561 || operator_code == POSTDECREMENT_EXPR)
11562 && ! processing_template_decl
11563 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11565 if (methodp)
11566 error ("postfix %qD must take %<int%> as its argument",
11567 decl);
11568 else
11569 error ("postfix %qD must take %<int%> as its second "
11570 "argument", decl);
11571 return false;
11574 else
11576 if (methodp)
11577 error ("%qD must take either zero or one argument", decl);
11578 else
11579 error ("%qD must take either one or two arguments", decl);
11580 return false;
11583 /* More Effective C++ rule 6. */
11584 if (warn_ecpp
11585 && (operator_code == POSTINCREMENT_EXPR
11586 || operator_code == POSTDECREMENT_EXPR
11587 || operator_code == PREINCREMENT_EXPR
11588 || operator_code == PREDECREMENT_EXPR))
11590 tree arg = TREE_VALUE (argtypes);
11591 tree ret = TREE_TYPE (TREE_TYPE (decl));
11592 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11593 arg = TREE_TYPE (arg);
11594 arg = TYPE_MAIN_VARIANT (arg);
11595 if (operator_code == PREINCREMENT_EXPR
11596 || operator_code == PREDECREMENT_EXPR)
11598 if (TREE_CODE (ret) != REFERENCE_TYPE
11599 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11600 arg))
11601 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11602 build_reference_type (arg));
11604 else
11606 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11607 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11611 else if (unary_op_p (operator_code))
11613 if (arity != 1)
11615 if (methodp)
11616 error ("%qD must take %<void%>", decl);
11617 else
11618 error ("%qD must take exactly one argument", decl);
11619 return false;
11622 else /* if (binary_op_p (operator_code)) */
11624 if (arity != 2)
11626 if (methodp)
11627 error ("%qD must take exactly one argument", decl);
11628 else
11629 error ("%qD must take exactly two arguments", decl);
11630 return false;
11633 /* More Effective C++ rule 7. */
11634 if (warn_ecpp
11635 && (operator_code == TRUTH_ANDIF_EXPR
11636 || operator_code == TRUTH_ORIF_EXPR
11637 || operator_code == COMPOUND_EXPR))
11638 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11639 decl);
11642 /* Effective C++ rule 23. */
11643 if (warn_ecpp
11644 && arity == 2
11645 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11646 && (operator_code == PLUS_EXPR
11647 || operator_code == MINUS_EXPR
11648 || operator_code == TRUNC_DIV_EXPR
11649 || operator_code == MULT_EXPR
11650 || operator_code == TRUNC_MOD_EXPR)
11651 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11652 warning (OPT_Weffc__, "%qD should return by value", decl);
11654 /* [over.oper]/8 */
11655 for (; argtypes && argtypes != void_list_node;
11656 argtypes = TREE_CHAIN (argtypes))
11657 if (TREE_PURPOSE (argtypes))
11659 TREE_PURPOSE (argtypes) = NULL_TREE;
11660 if (operator_code == POSTINCREMENT_EXPR
11661 || operator_code == POSTDECREMENT_EXPR)
11663 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
11664 decl);
11666 else
11668 error ("%qD cannot have default arguments", decl);
11669 return false;
11673 return true;
11676 /* Return a string giving the keyword associate with CODE. */
11678 static const char *
11679 tag_name (enum tag_types code)
11681 switch (code)
11683 case record_type:
11684 return "struct";
11685 case class_type:
11686 return "class";
11687 case union_type:
11688 return "union";
11689 case enum_type:
11690 return "enum";
11691 case typename_type:
11692 return "typename";
11693 default:
11694 gcc_unreachable ();
11698 /* Name lookup in an elaborated-type-specifier (after the keyword
11699 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11700 elaborated-type-specifier is invalid, issue a diagnostic and return
11701 error_mark_node; otherwise, return the *_TYPE to which it referred.
11702 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11704 tree
11705 check_elaborated_type_specifier (enum tag_types tag_code,
11706 tree decl,
11707 bool allow_template_p)
11709 tree type;
11711 if (decl == error_mark_node)
11712 return error_mark_node;
11714 /* In the case of:
11716 struct S { struct S *p; };
11718 name lookup will find the TYPE_DECL for the implicit "S::S"
11719 typedef. Adjust for that here. */
11720 if (DECL_SELF_REFERENCE_P (decl))
11721 decl = TYPE_NAME (TREE_TYPE (decl));
11723 type = TREE_TYPE (decl);
11725 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11726 is false for this case as well. */
11727 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11729 error ("using template type parameter %qT after %qs",
11730 type, tag_name (tag_code));
11731 return error_mark_node;
11733 /* Accept template template parameters. */
11734 else if (allow_template_p
11735 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
11736 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
11738 /* [dcl.type.elab]
11740 If the identifier resolves to a typedef-name or the
11741 simple-template-id resolves to an alias template
11742 specialization, the elaborated-type-specifier is ill-formed.
11744 In other words, the only legitimate declaration to use in the
11745 elaborated type specifier is the implicit typedef created when
11746 the type is declared. */
11747 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11748 && !DECL_SELF_REFERENCE_P (decl)
11749 && tag_code != typename_type)
11751 if (alias_template_specialization_p (type))
11752 error ("using alias template specialization %qT after %qs",
11753 type, tag_name (tag_code));
11754 else
11755 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11756 inform (DECL_SOURCE_LOCATION (decl),
11757 "%qD has a previous declaration here", decl);
11758 return error_mark_node;
11760 else if (TREE_CODE (type) != RECORD_TYPE
11761 && TREE_CODE (type) != UNION_TYPE
11762 && tag_code != enum_type
11763 && tag_code != typename_type)
11765 error ("%qT referred to as %qs", type, tag_name (tag_code));
11766 error ("%q+T has a previous declaration here", type);
11767 return error_mark_node;
11769 else if (TREE_CODE (type) != ENUMERAL_TYPE
11770 && tag_code == enum_type)
11772 error ("%qT referred to as enum", type);
11773 error ("%q+T has a previous declaration here", type);
11774 return error_mark_node;
11776 else if (!allow_template_p
11777 && TREE_CODE (type) == RECORD_TYPE
11778 && CLASSTYPE_IS_TEMPLATE (type))
11780 /* If a class template appears as elaborated type specifier
11781 without a template header such as:
11783 template <class T> class C {};
11784 void f(class C); // No template header here
11786 then the required template argument is missing. */
11787 error ("template argument required for %<%s %T%>",
11788 tag_name (tag_code),
11789 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11790 return error_mark_node;
11793 return type;
11796 /* Lookup NAME in elaborate type specifier in scope according to
11797 SCOPE and issue diagnostics if necessary.
11798 Return *_TYPE node upon success, NULL_TREE when the NAME is not
11799 found, and ERROR_MARK_NODE for type error. */
11801 static tree
11802 lookup_and_check_tag (enum tag_types tag_code, tree name,
11803 tag_scope scope, bool template_header_p)
11805 tree t;
11806 tree decl;
11807 if (scope == ts_global)
11809 /* First try ordinary name lookup, ignoring hidden class name
11810 injected via friend declaration. */
11811 decl = lookup_name_prefer_type (name, 2);
11812 /* If that fails, the name will be placed in the smallest
11813 non-class, non-function-prototype scope according to 3.3.1/5.
11814 We may already have a hidden name declared as friend in this
11815 scope. So lookup again but not ignoring hidden names.
11816 If we find one, that name will be made visible rather than
11817 creating a new tag. */
11818 if (!decl)
11819 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11821 else
11822 decl = lookup_type_scope (name, scope);
11824 if (decl
11825 && (DECL_CLASS_TEMPLATE_P (decl)
11826 || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
11827 decl = DECL_TEMPLATE_RESULT (decl);
11829 if (decl && TREE_CODE (decl) == TYPE_DECL)
11831 /* Look for invalid nested type:
11832 class C {
11833 class C {};
11834 }; */
11835 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11837 error ("%qD has the same name as the class in which it is "
11838 "declared",
11839 decl);
11840 return error_mark_node;
11843 /* Two cases we need to consider when deciding if a class
11844 template is allowed as an elaborated type specifier:
11845 1. It is a self reference to its own class.
11846 2. It comes with a template header.
11848 For example:
11850 template <class T> class C {
11851 class C *c1; // DECL_SELF_REFERENCE_P is true
11852 class D;
11854 template <class U> class C; // template_header_p is true
11855 template <class T> class C<T>::D {
11856 class C *c2; // DECL_SELF_REFERENCE_P is true
11857 }; */
11859 t = check_elaborated_type_specifier (tag_code,
11860 decl,
11861 template_header_p
11862 | DECL_SELF_REFERENCE_P (decl));
11863 return t;
11865 else if (decl && TREE_CODE (decl) == TREE_LIST)
11867 error ("reference to %qD is ambiguous", name);
11868 print_candidates (decl);
11869 return error_mark_node;
11871 else
11872 return NULL_TREE;
11875 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11876 Define the tag as a forward-reference if it is not defined.
11878 If a declaration is given, process it here, and report an error if
11879 multiple declarations are not identical.
11881 SCOPE is TS_CURRENT when this is also a definition. Only look in
11882 the current frame for the name (since C++ allows new names in any
11883 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11884 declaration. Only look beginning from the current scope outward up
11885 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
11887 TEMPLATE_HEADER_P is true when this declaration is preceded by
11888 a set of template parameters. */
11890 static tree
11891 xref_tag_1 (enum tag_types tag_code, tree name,
11892 tag_scope scope, bool template_header_p)
11894 enum tree_code code;
11895 tree t;
11896 tree context = NULL_TREE;
11898 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11900 switch (tag_code)
11902 case record_type:
11903 case class_type:
11904 code = RECORD_TYPE;
11905 break;
11906 case union_type:
11907 code = UNION_TYPE;
11908 break;
11909 case enum_type:
11910 code = ENUMERAL_TYPE;
11911 break;
11912 default:
11913 gcc_unreachable ();
11916 /* In case of anonymous name, xref_tag is only called to
11917 make type node and push name. Name lookup is not required. */
11918 if (ANON_AGGRNAME_P (name))
11919 t = NULL_TREE;
11920 else
11921 t = lookup_and_check_tag (tag_code, name,
11922 scope, template_header_p);
11924 if (t == error_mark_node)
11925 return error_mark_node;
11927 if (scope != ts_current && t && current_class_type
11928 && template_class_depth (current_class_type)
11929 && template_header_p)
11931 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
11932 return t;
11934 /* Since SCOPE is not TS_CURRENT, we are not looking at a
11935 definition of this tag. Since, in addition, we are currently
11936 processing a (member) template declaration of a template
11937 class, we must be very careful; consider:
11939 template <class X>
11940 struct S1
11942 template <class U>
11943 struct S2
11944 { template <class V>
11945 friend struct S1; };
11947 Here, the S2::S1 declaration should not be confused with the
11948 outer declaration. In particular, the inner version should
11949 have a template parameter of level 2, not level 1. This
11950 would be particularly important if the member declaration
11951 were instead:
11953 template <class V = U> friend struct S1;
11955 say, when we should tsubst into `U' when instantiating
11956 S2. On the other hand, when presented with:
11958 template <class T>
11959 struct S1 {
11960 template <class U>
11961 struct S2 {};
11962 template <class U>
11963 friend struct S2;
11966 we must find the inner binding eventually. We
11967 accomplish this by making sure that the new type we
11968 create to represent this declaration has the right
11969 TYPE_CONTEXT. */
11970 context = TYPE_CONTEXT (t);
11971 t = NULL_TREE;
11974 if (! t)
11976 /* If no such tag is yet defined, create a forward-reference node
11977 and record it as the "definition".
11978 When a real declaration of this type is found,
11979 the forward-reference will be altered into a real type. */
11980 if (code == ENUMERAL_TYPE)
11982 error ("use of enum %q#D without previous declaration", name);
11983 return error_mark_node;
11985 else
11987 t = make_class_type (code);
11988 TYPE_CONTEXT (t) = context;
11989 t = pushtag (name, t, scope);
11992 else
11994 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11996 if (!redeclare_class_template (t, current_template_parms))
11997 return error_mark_node;
11999 else if (!processing_template_decl
12000 && CLASS_TYPE_P (t)
12001 && CLASSTYPE_IS_TEMPLATE (t))
12003 error ("redeclaration of %qT as a non-template", t);
12004 error ("previous declaration %q+D", t);
12005 return error_mark_node;
12008 /* Make injected friend class visible. */
12009 if (scope != ts_within_enclosing_non_class
12010 && hidden_name_p (TYPE_NAME (t)))
12012 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12013 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12015 if (TYPE_TEMPLATE_INFO (t))
12017 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12018 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12023 return t;
12026 /* Wrapper for xref_tag_1. */
12028 tree
12029 xref_tag (enum tag_types tag_code, tree name,
12030 tag_scope scope, bool template_header_p)
12032 tree ret;
12033 bool subtime;
12034 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12035 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12036 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12037 return ret;
12041 tree
12042 xref_tag_from_type (tree old, tree id, tag_scope scope)
12044 enum tag_types tag_kind;
12046 if (TREE_CODE (old) == RECORD_TYPE)
12047 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12048 else
12049 tag_kind = union_type;
12051 if (id == NULL_TREE)
12052 id = TYPE_IDENTIFIER (old);
12054 return xref_tag (tag_kind, id, scope, false);
12057 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12058 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12059 access_* node, and the TREE_VALUE is the type of the base-class.
12060 Non-NULL TREE_TYPE indicates virtual inheritance.
12062 Returns true if the binfo hierarchy was successfully created,
12063 false if an error was detected. */
12065 bool
12066 xref_basetypes (tree ref, tree base_list)
12068 tree *basep;
12069 tree binfo, base_binfo;
12070 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12071 unsigned max_bases = 0; /* Maximum direct bases. */
12072 int i;
12073 tree default_access;
12074 tree igo_prev; /* Track Inheritance Graph Order. */
12076 if (ref == error_mark_node)
12077 return false;
12079 /* The base of a derived class is private by default, all others are
12080 public. */
12081 default_access = (TREE_CODE (ref) == RECORD_TYPE
12082 && CLASSTYPE_DECLARED_CLASS (ref)
12083 ? access_private_node : access_public_node);
12085 /* First, make sure that any templates in base-classes are
12086 instantiated. This ensures that if we call ourselves recursively
12087 we do not get confused about which classes are marked and which
12088 are not. */
12089 basep = &base_list;
12090 while (*basep)
12092 tree basetype = TREE_VALUE (*basep);
12094 /* The dependent_type_p call below should really be dependent_scope_p
12095 so that we give a hard error about using an incomplete type as a
12096 base, but we allow it with a pedwarn for backward
12097 compatibility. */
12098 if (processing_template_decl
12099 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12100 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12101 if (!dependent_type_p (basetype)
12102 && !complete_type_or_else (basetype, NULL))
12103 /* An incomplete type. Remove it from the list. */
12104 *basep = TREE_CHAIN (*basep);
12105 else
12107 max_bases++;
12108 if (TREE_TYPE (*basep))
12109 max_vbases++;
12110 if (CLASS_TYPE_P (basetype))
12111 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
12112 basep = &TREE_CHAIN (*basep);
12116 TYPE_MARKED_P (ref) = 1;
12118 /* The binfo slot should be empty, unless this is an (ill-formed)
12119 redefinition. */
12120 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12122 error ("redefinition of %q#T", ref);
12123 return false;
12126 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12128 binfo = make_tree_binfo (max_bases);
12130 TYPE_BINFO (ref) = binfo;
12131 BINFO_OFFSET (binfo) = size_zero_node;
12132 BINFO_TYPE (binfo) = ref;
12134 /* Apply base-class info set up to the variants of this type. */
12135 fixup_type_variants (ref);
12137 if (max_bases)
12139 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
12140 /* An aggregate cannot have baseclasses. */
12141 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12143 if (TREE_CODE (ref) == UNION_TYPE)
12145 error ("derived union %qT invalid", ref);
12146 return false;
12150 if (max_bases > 1)
12152 if (TYPE_FOR_JAVA (ref))
12154 error ("Java class %qT cannot have multiple bases", ref);
12155 return false;
12159 if (max_vbases)
12161 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
12163 if (TYPE_FOR_JAVA (ref))
12165 error ("Java class %qT cannot have virtual bases", ref);
12166 return false;
12170 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12172 tree access = TREE_PURPOSE (base_list);
12173 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12174 tree basetype = TREE_VALUE (base_list);
12176 if (access == access_default_node)
12177 access = default_access;
12179 if (PACK_EXPANSION_P (basetype))
12180 basetype = PACK_EXPANSION_PATTERN (basetype);
12181 if (TREE_CODE (basetype) == TYPE_DECL)
12182 basetype = TREE_TYPE (basetype);
12183 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12185 error ("base type %qT fails to be a struct or class type",
12186 basetype);
12187 return false;
12190 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12191 TYPE_FOR_JAVA (ref) = 1;
12193 base_binfo = NULL_TREE;
12194 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12196 base_binfo = TYPE_BINFO (basetype);
12197 /* The original basetype could have been a typedef'd type. */
12198 basetype = BINFO_TYPE (base_binfo);
12200 /* Inherit flags from the base. */
12201 TYPE_HAS_NEW_OPERATOR (ref)
12202 |= TYPE_HAS_NEW_OPERATOR (basetype);
12203 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12204 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12205 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12206 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12207 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12208 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12209 CLASSTYPE_REPEATED_BASE_P (ref)
12210 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12213 /* We must do this test after we've seen through a typedef
12214 type. */
12215 if (TYPE_MARKED_P (basetype))
12217 if (basetype == ref)
12218 error ("recursive type %qT undefined", basetype);
12219 else
12220 error ("duplicate base type %qT invalid", basetype);
12221 return false;
12224 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12225 /* Regenerate the pack expansion for the bases. */
12226 basetype = make_pack_expansion (basetype);
12228 TYPE_MARKED_P (basetype) = 1;
12230 base_binfo = copy_binfo (base_binfo, basetype, ref,
12231 &igo_prev, via_virtual);
12232 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12233 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12235 BINFO_BASE_APPEND (binfo, base_binfo);
12236 BINFO_BASE_ACCESS_APPEND (binfo, access);
12239 if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12240 /* If we didn't get max_vbases vbases, we must have shared at
12241 least one of them, and are therefore diamond shaped. */
12242 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12244 /* Unmark all the types. */
12245 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12246 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12247 TYPE_MARKED_P (ref) = 0;
12249 /* Now see if we have a repeated base type. */
12250 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12252 for (base_binfo = binfo; base_binfo;
12253 base_binfo = TREE_CHAIN (base_binfo))
12255 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12257 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12258 break;
12260 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12262 for (base_binfo = binfo; base_binfo;
12263 base_binfo = TREE_CHAIN (base_binfo))
12264 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12265 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12266 else
12267 break;
12270 return true;
12274 /* Copies the enum-related properties from type SRC to type DST.
12275 Used with the underlying type of an enum and the enum itself. */
12276 static void
12277 copy_type_enum (tree dst, tree src)
12279 tree t;
12280 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12282 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12283 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12284 TYPE_SIZE (t) = TYPE_SIZE (src);
12285 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12286 SET_TYPE_MODE (dst, TYPE_MODE (src));
12287 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12288 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12289 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12290 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12294 /* Begin compiling the definition of an enumeration type.
12295 NAME is its name,
12297 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12299 UNDERLYING_TYPE is the type that will be used as the storage for
12300 the enumeration type. This should be NULL_TREE if no storage type
12301 was specified.
12303 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12305 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12307 Returns the type object, as yet incomplete.
12308 Also records info about it so that build_enumerator
12309 may be used to declare the individual values as they are read. */
12311 tree
12312 start_enum (tree name, tree enumtype, tree underlying_type,
12313 bool scoped_enum_p, bool *is_new)
12315 tree prevtype = NULL_TREE;
12316 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12318 if (is_new)
12319 *is_new = false;
12320 /* [C++0x dcl.enum]p5:
12322 If not explicitly specified, the underlying type of a scoped
12323 enumeration type is int. */
12324 if (!underlying_type && scoped_enum_p)
12325 underlying_type = integer_type_node;
12327 if (underlying_type)
12328 underlying_type = cv_unqualified (underlying_type);
12330 /* If this is the real definition for a previous forward reference,
12331 fill in the contents in the same object that used to be the
12332 forward reference. */
12333 if (!enumtype)
12334 enumtype = lookup_and_check_tag (enum_type, name,
12335 /*tag_scope=*/ts_current,
12336 /*template_header_p=*/false);
12338 /* In case of a template_decl, the only check that should be deferred
12339 to instantiation time is the comparison of underlying types. */
12340 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12342 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12344 error_at (input_location, "scoped/unscoped mismatch "
12345 "in enum %q#T", enumtype);
12346 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12347 "previous definition here");
12348 enumtype = error_mark_node;
12350 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12352 error_at (input_location, "underlying type mismatch "
12353 "in enum %q#T", enumtype);
12354 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12355 "previous definition here");
12356 enumtype = error_mark_node;
12358 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12359 && !dependent_type_p (underlying_type)
12360 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12361 && !same_type_p (underlying_type,
12362 ENUM_UNDERLYING_TYPE (enumtype)))
12364 error_at (input_location, "different underlying type "
12365 "in enum %q#T", enumtype);
12366 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12367 "previous definition here");
12368 underlying_type = NULL_TREE;
12372 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12373 || processing_template_decl)
12375 /* In case of error, make a dummy enum to allow parsing to
12376 continue. */
12377 if (enumtype == error_mark_node)
12379 name = make_anon_name ();
12380 enumtype = NULL_TREE;
12383 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12384 of an opaque enum, or an opaque enum of an already defined
12385 enumeration (C++0x only).
12386 In any other case, it'll be NULL_TREE. */
12387 if (!enumtype)
12389 if (is_new)
12390 *is_new = true;
12392 prevtype = enumtype;
12394 /* Do not push the decl more than once, unless we need to
12395 compare underlying types at instantiation time */
12396 if (!enumtype
12397 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12398 || (underlying_type
12399 && dependent_type_p (underlying_type))
12400 || (ENUM_UNDERLYING_TYPE (enumtype)
12401 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12403 enumtype = cxx_make_type (ENUMERAL_TYPE);
12404 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12406 else
12407 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12408 false);
12410 if (enumtype == error_mark_node)
12411 return error_mark_node;
12413 /* The enum is considered opaque until the opening '{' of the
12414 enumerator list. */
12415 SET_OPAQUE_ENUM_P (enumtype, true);
12416 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12419 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12421 if (underlying_type)
12423 if (CP_INTEGRAL_TYPE_P (underlying_type))
12425 copy_type_enum (enumtype, underlying_type);
12426 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12428 else if (dependent_type_p (underlying_type))
12429 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12430 else
12431 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12432 underlying_type, enumtype);
12435 /* If into a template class, the returned enum is always the first
12436 declaration (opaque or not) seen. This way all the references to
12437 this type will be to the same declaration. The following ones are used
12438 only to check for definition errors. */
12439 if (prevtype && processing_template_decl)
12440 return prevtype;
12441 else
12442 return enumtype;
12445 /* After processing and defining all the values of an enumeration type,
12446 install their decls in the enumeration type.
12447 ENUMTYPE is the type object. */
12449 void
12450 finish_enum_value_list (tree enumtype)
12452 tree values;
12453 tree underlying_type;
12454 tree decl;
12455 tree value;
12456 tree minnode, maxnode;
12457 tree t;
12459 bool fixed_underlying_type_p
12460 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12462 /* We built up the VALUES in reverse order. */
12463 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12465 /* For an enum defined in a template, just set the type of the values;
12466 all further processing is postponed until the template is
12467 instantiated. We need to set the type so that tsubst of a CONST_DECL
12468 works. */
12469 if (processing_template_decl)
12471 for (values = TYPE_VALUES (enumtype);
12472 values;
12473 values = TREE_CHAIN (values))
12474 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12475 return;
12478 /* Determine the minimum and maximum values of the enumerators. */
12479 if (TYPE_VALUES (enumtype))
12481 minnode = maxnode = NULL_TREE;
12483 for (values = TYPE_VALUES (enumtype);
12484 values;
12485 values = TREE_CHAIN (values))
12487 decl = TREE_VALUE (values);
12489 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12490 each enumerator has the type of its enumeration. Prior to the
12491 closing brace, the type of each enumerator is the type of its
12492 initializing value. */
12493 TREE_TYPE (decl) = enumtype;
12495 /* Update the minimum and maximum values, if appropriate. */
12496 value = DECL_INITIAL (decl);
12497 if (value == error_mark_node)
12498 value = integer_zero_node;
12499 /* Figure out what the minimum and maximum values of the
12500 enumerators are. */
12501 if (!minnode)
12502 minnode = maxnode = value;
12503 else if (tree_int_cst_lt (maxnode, value))
12504 maxnode = value;
12505 else if (tree_int_cst_lt (value, minnode))
12506 minnode = value;
12509 else
12510 /* [dcl.enum]
12512 If the enumerator-list is empty, the underlying type is as if
12513 the enumeration had a single enumerator with value 0. */
12514 minnode = maxnode = integer_zero_node;
12516 if (!fixed_underlying_type_p)
12518 /* Compute the number of bits require to represent all values of the
12519 enumeration. We must do this before the type of MINNODE and
12520 MAXNODE are transformed, since tree_int_cst_min_precision relies
12521 on the TREE_TYPE of the value it is passed. */
12522 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12523 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12524 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12525 int precision = MAX (lowprec, highprec);
12526 unsigned int itk;
12527 bool use_short_enum;
12529 /* Determine the underlying type of the enumeration.
12531 [dcl.enum]
12533 The underlying type of an enumeration is an integral type that
12534 can represent all the enumerator values defined in the
12535 enumeration. It is implementation-defined which integral type is
12536 used as the underlying type for an enumeration except that the
12537 underlying type shall not be larger than int unless the value of
12538 an enumerator cannot fit in an int or unsigned int.
12540 We use "int" or an "unsigned int" as the underlying type, even if
12541 a smaller integral type would work, unless the user has
12542 explicitly requested that we use the smallest possible type. The
12543 user can request that for all enumerations with a command line
12544 flag, or for just one enumeration with an attribute. */
12546 use_short_enum = flag_short_enums
12547 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12549 for (itk = (use_short_enum ? itk_char : itk_int);
12550 itk != itk_none;
12551 itk++)
12553 underlying_type = integer_types[itk];
12554 if (underlying_type != NULL_TREE
12555 && TYPE_PRECISION (underlying_type) >= precision
12556 && TYPE_UNSIGNED (underlying_type) == unsignedp)
12557 break;
12559 if (itk == itk_none)
12561 /* DR 377
12563 IF no integral type can represent all the enumerator values, the
12564 enumeration is ill-formed. */
12565 error ("no integral type can represent all of the enumerator values "
12566 "for %qT", enumtype);
12567 precision = TYPE_PRECISION (long_long_integer_type_node);
12568 underlying_type = integer_types[itk_unsigned_long_long];
12571 /* [dcl.enum]
12573 The value of sizeof() applied to an enumeration type, an object
12574 of an enumeration type, or an enumerator, is the value of sizeof()
12575 applied to the underlying type. */
12576 copy_type_enum (enumtype, underlying_type);
12578 /* Compute the minimum and maximum values for the type.
12580 [dcl.enum]
12582 For an enumeration where emin is the smallest enumerator and emax
12583 is the largest, the values of the enumeration are the values of the
12584 underlying type in the range bmin to bmax, where bmin and bmax are,
12585 respectively, the smallest and largest values of the smallest bit-
12586 field that can store emin and emax. */
12588 /* The middle-end currently assumes that types with TYPE_PRECISION
12589 narrower than their underlying type are suitably zero or sign
12590 extended to fill their mode. Similarly, it assumes that the front
12591 end assures that a value of a particular type must be within
12592 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12594 We used to set these fields based on bmin and bmax, but that led
12595 to invalid assumptions like optimizing away bounds checking. So
12596 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12597 TYPE_MAX_VALUE to the values for the mode above and only restrict
12598 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12599 ENUM_UNDERLYING_TYPE (enumtype)
12600 = build_distinct_type_copy (underlying_type);
12601 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12602 set_min_and_max_values_for_integral_type
12603 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12605 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12606 if (flag_strict_enums)
12607 set_min_and_max_values_for_integral_type (enumtype, precision,
12608 unsignedp);
12610 else
12611 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12613 /* Convert each of the enumerators to the type of the underlying
12614 type of the enumeration. */
12615 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12617 location_t saved_location;
12619 decl = TREE_VALUE (values);
12620 saved_location = input_location;
12621 input_location = DECL_SOURCE_LOCATION (decl);
12622 if (fixed_underlying_type_p)
12623 /* If the enumeration type has a fixed underlying type, we
12624 already checked all of the enumerator values. */
12625 value = DECL_INITIAL (decl);
12626 else
12627 value = perform_implicit_conversion (underlying_type,
12628 DECL_INITIAL (decl),
12629 tf_warning_or_error);
12630 input_location = saved_location;
12632 /* Do not clobber shared ints. */
12633 value = copy_node (value);
12635 TREE_TYPE (value) = enumtype;
12636 DECL_INITIAL (decl) = value;
12639 /* Fix up all variant types of this enum type. */
12640 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12641 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12643 if (at_class_scope_p ()
12644 && COMPLETE_TYPE_P (current_class_type)
12645 && UNSCOPED_ENUM_P (enumtype))
12646 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12647 current_class_type);
12649 /* Finish debugging output for this type. */
12650 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12653 /* Finishes the enum type. This is called only the first time an
12654 enumeration is seen, be it opaque or odinary.
12655 ENUMTYPE is the type object. */
12657 void
12658 finish_enum (tree enumtype)
12660 if (processing_template_decl)
12662 if (at_function_scope_p ())
12663 add_stmt (build_min (TAG_DEFN, enumtype));
12664 return;
12667 /* If this is a forward declaration, there should not be any variants,
12668 though we can get a variant in the middle of an enum-specifier with
12669 wacky code like 'enum E { e = sizeof(const E*) };' */
12670 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12671 && (TYPE_VALUES (enumtype)
12672 || !TYPE_NEXT_VARIANT (enumtype)));
12675 /* Build and install a CONST_DECL for an enumeration constant of the
12676 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12677 LOC is the location of NAME.
12678 Assignment of sequential values by default is handled here. */
12680 void
12681 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12683 tree decl;
12684 tree context;
12685 tree type;
12687 /* If the VALUE was erroneous, pretend it wasn't there; that will
12688 result in the enum being assigned the next value in sequence. */
12689 if (value == error_mark_node)
12690 value = NULL_TREE;
12692 /* Remove no-op casts from the value. */
12693 if (value)
12694 STRIP_TYPE_NOPS (value);
12696 if (! processing_template_decl)
12698 /* Validate and default VALUE. */
12699 if (value != NULL_TREE)
12701 value = cxx_constant_value (value);
12703 if (TREE_CODE (value) != INTEGER_CST
12704 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12706 error ("enumerator value for %qD is not an integer constant",
12707 name);
12708 value = NULL_TREE;
12712 /* Default based on previous value. */
12713 if (value == NULL_TREE)
12715 if (TYPE_VALUES (enumtype))
12717 tree prev_value;
12718 bool overflowed;
12720 /* C++03 7.2/4: If no initializer is specified for the first
12721 enumerator, the type is an unspecified integral
12722 type. Otherwise the type is the same as the type of the
12723 initializing value of the preceding enumerator unless the
12724 incremented value is not representable in that type, in
12725 which case the type is an unspecified integral type
12726 sufficient to contain the incremented value. */
12727 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12728 if (error_operand_p (prev_value))
12729 value = error_mark_node;
12730 else
12732 double_int di = TREE_INT_CST (prev_value)
12733 .add_with_sign (double_int_one,
12734 false, &overflowed);
12735 if (!overflowed)
12737 tree type = TREE_TYPE (prev_value);
12738 bool pos = TYPE_UNSIGNED (type) || !di.is_negative ();
12739 if (!double_int_fits_to_tree_p (type, di))
12741 unsigned int itk;
12742 for (itk = itk_int; itk != itk_none; itk++)
12744 type = integer_types[itk];
12745 if (type != NULL_TREE
12746 && (pos || !TYPE_UNSIGNED (type))
12747 && double_int_fits_to_tree_p (type, di))
12748 break;
12750 if (type && cxx_dialect < cxx0x
12751 && itk > itk_unsigned_long)
12752 pedwarn (input_location, OPT_Wlong_long, pos ? "\
12753 incremented enumerator value is too large for %<unsigned long%>" : "\
12754 incremented enumerator value is too large for %<long%>");
12756 if (type == NULL_TREE)
12757 overflowed = true;
12758 else
12759 value = double_int_to_tree (type, di);
12762 if (overflowed)
12764 error ("overflow in enumeration values at %qD", name);
12765 value = error_mark_node;
12769 else
12770 value = integer_zero_node;
12773 /* Remove no-op casts from the value. */
12774 STRIP_TYPE_NOPS (value);
12776 /* If the underlying type of the enum is fixed, check whether
12777 the enumerator values fits in the underlying type. If it
12778 does not fit, the program is ill-formed [C++0x dcl.enum]. */
12779 if (ENUM_UNDERLYING_TYPE (enumtype)
12780 && value
12781 && TREE_CODE (value) == INTEGER_CST
12782 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12784 error ("enumerator value %E is too large for underlying type %<%T%>",
12785 value, ENUM_UNDERLYING_TYPE (enumtype));
12787 /* Silently convert the value so that we can continue. */
12788 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12789 value, tf_none);
12793 /* C++ associates enums with global, function, or class declarations. */
12794 context = current_scope ();
12796 /* Build the actual enumeration constant. Note that the enumeration
12797 constants have the underlying type of the enum (if it is fixed)
12798 or the type of their initializer (if the underlying type of the
12799 enum is not fixed):
12801 [ C++0x dcl.enum ]
12803 If the underlying type is fixed, the type of each enumerator
12804 prior to the closing brace is the underlying type; if the
12805 initializing value of an enumerator cannot be represented by
12806 the underlying type, the program is ill-formed. If the
12807 underlying type is not fixed, the type of each enumerator is
12808 the type of its initializing value.
12810 If the underlying type is not fixed, it will be computed by
12811 finish_enum and we will reset the type of this enumerator. Of
12812 course, if we're processing a template, there may be no value. */
12813 type = value ? TREE_TYPE (value) : NULL_TREE;
12815 decl = build_decl (loc, CONST_DECL, name, type);
12817 DECL_CONTEXT (decl) = enumtype;
12818 TREE_CONSTANT (decl) = 1;
12819 TREE_READONLY (decl) = 1;
12820 DECL_INITIAL (decl) = value;
12822 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12823 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12824 on the TYPE_FIELDS list for `S'. (That's so that you can say
12825 things like `S::i' later.) */
12826 finish_member_declaration (decl);
12827 else
12828 pushdecl (decl);
12830 /* Add this enumeration constant to the list for this type. */
12831 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12834 /* Look for an enumerator with the given NAME within the enumeration
12835 type ENUMTYPE. This routine is used primarily for qualified name
12836 lookup into an enumerator in C++0x, e.g.,
12838 enum class Color { Red, Green, Blue };
12840 Color color = Color::Red;
12842 Returns the value corresponding to the enumerator, or
12843 NULL_TREE if no such enumerator was found. */
12844 tree
12845 lookup_enumerator (tree enumtype, tree name)
12847 tree e;
12848 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12850 e = purpose_member (name, TYPE_VALUES (enumtype));
12851 return e? TREE_VALUE (e) : NULL_TREE;
12855 /* We're defining DECL. Make sure that its type is OK. */
12857 static void
12858 check_function_type (tree decl, tree current_function_parms)
12860 tree fntype = TREE_TYPE (decl);
12861 tree return_type = complete_type (TREE_TYPE (fntype));
12863 /* In a function definition, arg types must be complete. */
12864 require_complete_types_for_parms (current_function_parms);
12866 if (dependent_type_p (return_type)
12867 || type_uses_auto (return_type))
12868 return;
12869 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12870 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12872 tree args = TYPE_ARG_TYPES (fntype);
12874 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12875 error ("return type %q#T is incomplete", return_type);
12876 else
12877 error ("return type has Java class type %q#T", return_type);
12879 /* Make it return void instead. */
12880 if (TREE_CODE (fntype) == METHOD_TYPE)
12881 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12882 void_type_node,
12883 TREE_CHAIN (args));
12884 else
12885 fntype = build_function_type (void_type_node, args);
12886 fntype
12887 = build_exception_variant (fntype,
12888 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12889 fntype = (cp_build_type_attribute_variant
12890 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12891 TREE_TYPE (decl) = fntype;
12893 else
12894 abstract_virtuals_error (decl, TREE_TYPE (fntype));
12897 /* Create the FUNCTION_DECL for a function definition.
12898 DECLSPECS and DECLARATOR are the parts of the declaration;
12899 they describe the function's name and the type it returns,
12900 but twisted together in a fashion that parallels the syntax of C.
12902 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12903 DECLARATOR is really the DECL for the function we are about to
12904 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12905 indicating that the function is an inline defined in-class.
12907 This function creates a binding context for the function body
12908 as well as setting up the FUNCTION_DECL in current_function_decl.
12910 For C++, we must first check whether that datum makes any sense.
12911 For example, "class A local_a(1,2);" means that variable local_a
12912 is an aggregate of type A, which should have a constructor
12913 applied to it with the argument list [1, 2].
12915 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12916 or may be a BLOCK if the function has been defined previously
12917 in this translation unit. On exit, DECL_INITIAL (decl1) will be
12918 error_mark_node if the function has never been defined, or
12919 a BLOCK if the function has been defined somewhere. */
12921 void
12922 start_preparsed_function (tree decl1, tree attrs, int flags)
12924 tree ctype = NULL_TREE;
12925 tree fntype;
12926 tree restype;
12927 int doing_friend = 0;
12928 cp_binding_level *bl;
12929 tree current_function_parms;
12930 struct c_fileinfo *finfo
12931 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12932 bool honor_interface;
12934 /* Sanity check. */
12935 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12936 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12938 fntype = TREE_TYPE (decl1);
12939 if (TREE_CODE (fntype) == METHOD_TYPE)
12940 ctype = TYPE_METHOD_BASETYPE (fntype);
12942 /* ISO C++ 11.4/5. A friend function defined in a class is in
12943 the (lexical) scope of the class in which it is defined. */
12944 if (!ctype && DECL_FRIEND_P (decl1))
12946 ctype = DECL_FRIEND_CONTEXT (decl1);
12948 /* CTYPE could be null here if we're dealing with a template;
12949 for example, `inline friend float foo()' inside a template
12950 will have no CTYPE set. */
12951 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12952 ctype = NULL_TREE;
12953 else
12954 doing_friend = 1;
12957 if (DECL_DECLARED_INLINE_P (decl1)
12958 && lookup_attribute ("noinline", attrs))
12959 warning (0, "inline function %q+D given attribute noinline", decl1);
12961 /* Handle gnu_inline attribute. */
12962 if (GNU_INLINE_P (decl1))
12964 DECL_EXTERNAL (decl1) = 1;
12965 DECL_NOT_REALLY_EXTERN (decl1) = 0;
12966 DECL_INTERFACE_KNOWN (decl1) = 1;
12967 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12970 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12971 /* This is a constructor, we must ensure that any default args
12972 introduced by this definition are propagated to the clones
12973 now. The clones are used directly in overload resolution. */
12974 adjust_clone_args (decl1);
12976 /* Sometimes we don't notice that a function is a static member, and
12977 build a METHOD_TYPE for it. Fix that up now. */
12978 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12979 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12981 /* Set up current_class_type, and enter the scope of the class, if
12982 appropriate. */
12983 if (ctype)
12984 push_nested_class (ctype);
12985 else if (DECL_STATIC_FUNCTION_P (decl1))
12986 push_nested_class (DECL_CONTEXT (decl1));
12988 /* Now that we have entered the scope of the class, we must restore
12989 the bindings for any template parameters surrounding DECL1, if it
12990 is an inline member template. (Order is important; consider the
12991 case where a template parameter has the same name as a field of
12992 the class.) It is not until after this point that
12993 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
12994 if (flags & SF_INCLASS_INLINE)
12995 maybe_begin_member_template_processing (decl1);
12997 /* Effective C++ rule 15. */
12998 if (warn_ecpp
12999 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13000 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13001 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13003 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13004 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13005 if (!DECL_INITIAL (decl1))
13006 DECL_INITIAL (decl1) = error_mark_node;
13008 /* This function exists in static storage.
13009 (This does not mean `static' in the C sense!) */
13010 TREE_STATIC (decl1) = 1;
13012 /* We must call push_template_decl after current_class_type is set
13013 up. (If we are processing inline definitions after exiting a
13014 class scope, current_class_type will be NULL_TREE until set above
13015 by push_nested_class.) */
13016 if (processing_template_decl)
13018 /* FIXME: Handle error_mark_node more gracefully. */
13019 tree newdecl1 = push_template_decl (decl1);
13020 if (newdecl1 != error_mark_node)
13021 decl1 = newdecl1;
13024 /* We are now in the scope of the function being defined. */
13025 current_function_decl = decl1;
13027 /* Save the parm names or decls from this function's declarator
13028 where store_parm_decls will find them. */
13029 current_function_parms = DECL_ARGUMENTS (decl1);
13031 /* Make sure the parameter and return types are reasonable. When
13032 you declare a function, these types can be incomplete, but they
13033 must be complete when you define the function. */
13034 check_function_type (decl1, current_function_parms);
13036 /* Build the return declaration for the function. */
13037 restype = TREE_TYPE (fntype);
13039 if (DECL_RESULT (decl1) == NULL_TREE)
13041 tree resdecl;
13043 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13044 DECL_ARTIFICIAL (resdecl) = 1;
13045 DECL_IGNORED_P (resdecl) = 1;
13046 DECL_RESULT (decl1) = resdecl;
13048 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13051 /* Let the user know we're compiling this function. */
13052 announce_function (decl1);
13054 /* Record the decl so that the function name is defined.
13055 If we already have a decl for this name, and it is a FUNCTION_DECL,
13056 use the old decl. */
13057 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13059 /* A specialization is not used to guide overload resolution. */
13060 if (!DECL_FUNCTION_MEMBER_P (decl1)
13061 && !(DECL_USE_TEMPLATE (decl1) &&
13062 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13064 tree olddecl = pushdecl (decl1);
13066 if (olddecl == error_mark_node)
13067 /* If something went wrong when registering the declaration,
13068 use DECL1; we have to have a FUNCTION_DECL to use when
13069 parsing the body of the function. */
13071 else
13073 /* Otherwise, OLDDECL is either a previous declaration
13074 of the same function or DECL1 itself. */
13076 if (warn_missing_declarations
13077 && olddecl == decl1
13078 && !DECL_MAIN_P (decl1)
13079 && TREE_PUBLIC (decl1)
13080 && !DECL_DECLARED_INLINE_P (decl1))
13082 tree context;
13084 /* Check whether DECL1 is in an anonymous
13085 namespace. */
13086 for (context = DECL_CONTEXT (decl1);
13087 context;
13088 context = DECL_CONTEXT (context))
13090 if (TREE_CODE (context) == NAMESPACE_DECL
13091 && DECL_NAME (context) == NULL_TREE)
13092 break;
13095 if (context == NULL)
13096 warning (OPT_Wmissing_declarations,
13097 "no previous declaration for %q+D", decl1);
13100 decl1 = olddecl;
13103 else
13105 /* We need to set the DECL_CONTEXT. */
13106 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13107 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13109 fntype = TREE_TYPE (decl1);
13111 /* If #pragma weak applies, mark the decl appropriately now.
13112 The pragma only applies to global functions. Because
13113 determining whether or not the #pragma applies involves
13114 computing the mangled name for the declaration, we cannot
13115 apply the pragma until after we have merged this declaration
13116 with any previous declarations; if the original declaration
13117 has a linkage specification, that specification applies to
13118 the definition as well, and may affect the mangled name. */
13119 if (DECL_FILE_SCOPE_P (decl1))
13120 maybe_apply_pragma_weak (decl1);
13123 /* Reset this in case the call to pushdecl changed it. */
13124 current_function_decl = decl1;
13126 gcc_assert (DECL_INITIAL (decl1));
13128 /* This function may already have been parsed, in which case just
13129 return; our caller will skip over the body without parsing. */
13130 if (DECL_INITIAL (decl1) != error_mark_node)
13131 return;
13133 /* Initialize RTL machinery. We cannot do this until
13134 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13135 even when processing a template; this is how we get
13136 CFUN set up, and our per-function variables initialized.
13137 FIXME factor out the non-RTL stuff. */
13138 bl = current_binding_level;
13139 allocate_struct_function (decl1, processing_template_decl);
13141 /* Initialize the language data structures. Whenever we start
13142 a new function, we destroy temporaries in the usual way. */
13143 cfun->language = ggc_alloc_cleared_language_function ();
13144 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13145 current_binding_level = bl;
13147 if (!processing_template_decl && type_uses_auto (restype))
13149 FNDECL_USED_AUTO (decl1) = true;
13150 current_function_auto_return_pattern = restype;
13153 /* Start the statement-tree, start the tree now. */
13154 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13156 /* If we are (erroneously) defining a function that we have already
13157 defined before, wipe out what we knew before. */
13158 if (!DECL_PENDING_INLINE_P (decl1))
13159 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13161 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13163 /* We know that this was set up by `grokclassfn'. We do not
13164 wait until `store_parm_decls', since evil parse errors may
13165 never get us to that point. Here we keep the consistency
13166 between `current_class_type' and `current_class_ptr'. */
13167 tree t = DECL_ARGUMENTS (decl1);
13169 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13170 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
13172 cp_function_chain->x_current_class_ref
13173 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13174 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13175 cp_function_chain->x_current_class_ptr = t;
13177 /* Constructors and destructors need to know whether they're "in
13178 charge" of initializing virtual base classes. */
13179 t = DECL_CHAIN (t);
13180 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13182 current_in_charge_parm = t;
13183 t = DECL_CHAIN (t);
13185 if (DECL_HAS_VTT_PARM_P (decl1))
13187 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13188 current_vtt_parm = t;
13192 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13193 /* Implicitly-defined methods (like the
13194 destructor for a class in which no destructor
13195 is explicitly declared) must not be defined
13196 until their definition is needed. So, we
13197 ignore interface specifications for
13198 compiler-generated functions. */
13199 && !DECL_ARTIFICIAL (decl1));
13201 if (processing_template_decl)
13202 /* Don't mess with interface flags. */;
13203 else if (DECL_INTERFACE_KNOWN (decl1))
13205 tree ctx = decl_function_context (decl1);
13207 if (DECL_NOT_REALLY_EXTERN (decl1))
13208 DECL_EXTERNAL (decl1) = 0;
13210 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
13211 && TREE_PUBLIC (ctx))
13212 /* This is a function in a local class in an extern inline
13213 function. */
13214 comdat_linkage (decl1);
13216 /* If this function belongs to an interface, it is public.
13217 If it belongs to someone else's interface, it is also external.
13218 This only affects inlines and template instantiations. */
13219 else if (!finfo->interface_unknown && honor_interface)
13221 if (DECL_DECLARED_INLINE_P (decl1)
13222 || DECL_TEMPLATE_INSTANTIATION (decl1))
13224 DECL_EXTERNAL (decl1)
13225 = (finfo->interface_only
13226 || (DECL_DECLARED_INLINE_P (decl1)
13227 && ! flag_implement_inlines
13228 && !DECL_VINDEX (decl1)));
13230 /* For WIN32 we also want to put these in linkonce sections. */
13231 maybe_make_one_only (decl1);
13233 else
13234 DECL_EXTERNAL (decl1) = 0;
13235 DECL_INTERFACE_KNOWN (decl1) = 1;
13236 /* If this function is in an interface implemented in this file,
13237 make sure that the back end knows to emit this function
13238 here. */
13239 if (!DECL_EXTERNAL (decl1))
13240 mark_needed (decl1);
13242 else if (finfo->interface_unknown && finfo->interface_only
13243 && honor_interface)
13245 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13246 interface, we will have both finfo->interface_unknown and
13247 finfo->interface_only set. In that case, we don't want to
13248 use the normal heuristics because someone will supply a
13249 #pragma implementation elsewhere, and deducing it here would
13250 produce a conflict. */
13251 comdat_linkage (decl1);
13252 DECL_EXTERNAL (decl1) = 0;
13253 DECL_INTERFACE_KNOWN (decl1) = 1;
13254 DECL_DEFER_OUTPUT (decl1) = 1;
13256 else
13258 /* This is a definition, not a reference.
13259 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13260 if (!GNU_INLINE_P (decl1))
13261 DECL_EXTERNAL (decl1) = 0;
13263 if ((DECL_DECLARED_INLINE_P (decl1)
13264 || DECL_TEMPLATE_INSTANTIATION (decl1))
13265 && ! DECL_INTERFACE_KNOWN (decl1))
13266 DECL_DEFER_OUTPUT (decl1) = 1;
13267 else
13268 DECL_INTERFACE_KNOWN (decl1) = 1;
13271 /* Determine the ELF visibility attribute for the function. We must not
13272 do this before calling "pushdecl", as we must allow "duplicate_decls"
13273 to merge any attributes appropriately. We also need to wait until
13274 linkage is set. */
13275 if (!DECL_CLONED_FUNCTION_P (decl1))
13276 determine_visibility (decl1);
13278 begin_scope (sk_function_parms, decl1);
13280 ++function_depth;
13282 if (DECL_DESTRUCTOR_P (decl1)
13283 || (DECL_CONSTRUCTOR_P (decl1)
13284 && targetm.cxx.cdtor_returns_this ()))
13286 cdtor_label = build_decl (input_location,
13287 LABEL_DECL, NULL_TREE, NULL_TREE);
13288 DECL_CONTEXT (cdtor_label) = current_function_decl;
13291 start_fname_decls ();
13293 store_parm_decls (current_function_parms);
13297 /* Like start_preparsed_function, except that instead of a
13298 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13300 Returns 1 on success. If the DECLARATOR is not suitable for a function
13301 (it defines a datum instead), we return 0, which tells
13302 yyparse to report a parse error. */
13305 start_function (cp_decl_specifier_seq *declspecs,
13306 const cp_declarator *declarator,
13307 tree attrs)
13309 tree decl1;
13311 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13312 if (decl1 == error_mark_node)
13313 return 0;
13314 /* If the declarator is not suitable for a function definition,
13315 cause a syntax error. */
13316 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13318 error ("invalid function declaration");
13319 return 0;
13322 if (DECL_MAIN_P (decl1))
13323 /* main must return int. grokfndecl should have corrected it
13324 (and issued a diagnostic) if the user got it wrong. */
13325 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13326 integer_type_node));
13328 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13330 return 1;
13333 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13334 FN. */
13336 static bool
13337 use_eh_spec_block (tree fn)
13339 return (flag_exceptions && flag_enforce_eh_specs
13340 && !processing_template_decl
13341 && !type_throw_all_p (TREE_TYPE (fn))
13342 /* We insert the EH_SPEC_BLOCK only in the original
13343 function; then, it is copied automatically to the
13344 clones. */
13345 && !DECL_CLONED_FUNCTION_P (fn)
13346 /* Implicitly-generated constructors and destructors have
13347 exception specifications. However, those specifications
13348 are the union of the possible exceptions specified by the
13349 constructors/destructors for bases and members, so no
13350 unallowed exception will ever reach this function. By
13351 not creating the EH_SPEC_BLOCK we save a little memory,
13352 and we avoid spurious warnings about unreachable
13353 code. */
13354 && !DECL_DEFAULTED_FN (fn));
13357 /* Store the parameter declarations into the current function declaration.
13358 This is called after parsing the parameter declarations, before
13359 digesting the body of the function.
13361 Also install to binding contour return value identifier, if any. */
13363 static void
13364 store_parm_decls (tree current_function_parms)
13366 tree fndecl = current_function_decl;
13367 tree parm;
13369 /* This is a chain of any other decls that came in among the parm
13370 declarations. If a parm is declared with enum {foo, bar} x;
13371 then CONST_DECLs for foo and bar are put here. */
13372 tree nonparms = NULL_TREE;
13374 if (current_function_parms)
13376 /* This case is when the function was defined with an ANSI prototype.
13377 The parms already have decls, so we need not do anything here
13378 except record them as in effect
13379 and complain if any redundant old-style parm decls were written. */
13381 tree specparms = current_function_parms;
13382 tree next;
13384 /* Must clear this because it might contain TYPE_DECLs declared
13385 at class level. */
13386 current_binding_level->names = NULL;
13388 /* If we're doing semantic analysis, then we'll call pushdecl
13389 for each of these. We must do them in reverse order so that
13390 they end in the correct forward order. */
13391 specparms = nreverse (specparms);
13393 for (parm = specparms; parm; parm = next)
13395 next = DECL_CHAIN (parm);
13396 if (TREE_CODE (parm) == PARM_DECL)
13398 if (DECL_NAME (parm) == NULL_TREE
13399 || TREE_CODE (parm) != VOID_TYPE)
13400 pushdecl (parm);
13401 else
13402 error ("parameter %qD declared void", parm);
13404 else
13406 /* If we find an enum constant or a type tag,
13407 put it aside for the moment. */
13408 TREE_CHAIN (parm) = NULL_TREE;
13409 nonparms = chainon (nonparms, parm);
13413 /* Get the decls in their original chain order and record in the
13414 function. This is all and only the PARM_DECLs that were
13415 pushed into scope by the loop above. */
13416 DECL_ARGUMENTS (fndecl) = getdecls ();
13418 else
13419 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13421 /* Now store the final chain of decls for the arguments
13422 as the decl-chain of the current lexical scope.
13423 Put the enumerators in as well, at the front so that
13424 DECL_ARGUMENTS is not modified. */
13425 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13427 if (use_eh_spec_block (current_function_decl))
13428 current_eh_spec_block = begin_eh_spec_block ();
13432 /* We have finished doing semantic analysis on DECL, but have not yet
13433 generated RTL for its body. Save away our current state, so that
13434 when we want to generate RTL later we know what to do. */
13436 static void
13437 save_function_data (tree decl)
13439 struct language_function *f;
13441 /* Save the language-specific per-function data so that we can
13442 get it back when we really expand this function. */
13443 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13445 /* Make a copy. */
13446 f = ggc_alloc_language_function ();
13447 memcpy (f, cp_function_chain, sizeof (struct language_function));
13448 DECL_SAVED_FUNCTION_DATA (decl) = f;
13450 /* Clear out the bits we don't need. */
13451 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13452 f->bindings = NULL;
13453 f->x_local_names = NULL;
13454 f->base.local_typedefs = NULL;
13458 /* Set the return value of the constructor (if present). */
13460 static void
13461 finish_constructor_body (void)
13463 tree val;
13464 tree exprstmt;
13466 if (targetm.cxx.cdtor_returns_this ()
13467 && (! TYPE_FOR_JAVA (current_class_type)))
13469 /* Any return from a constructor will end up here. */
13470 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13472 val = DECL_ARGUMENTS (current_function_decl);
13473 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13474 DECL_RESULT (current_function_decl), val);
13475 /* Return the address of the object. */
13476 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13477 add_stmt (exprstmt);
13481 /* Do all the processing for the beginning of a destructor; set up the
13482 vtable pointers and cleanups for bases and members. */
13484 static void
13485 begin_destructor_body (void)
13487 tree compound_stmt;
13489 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13490 issued an error message. We still want to try to process the
13491 body of the function, but initialize_vtbl_ptrs will crash if
13492 TYPE_BINFO is NULL. */
13493 if (COMPLETE_TYPE_P (current_class_type))
13495 compound_stmt = begin_compound_stmt (0);
13496 /* Make all virtual function table pointers in non-virtual base
13497 classes point to CURRENT_CLASS_TYPE's virtual function
13498 tables. */
13499 initialize_vtbl_ptrs (current_class_ptr);
13500 finish_compound_stmt (compound_stmt);
13502 /* And insert cleanups for our bases and members so that they
13503 will be properly destroyed if we throw. */
13504 push_base_cleanups ();
13508 /* At the end of every destructor we generate code to delete the object if
13509 necessary. Do that now. */
13511 static void
13512 finish_destructor_body (void)
13514 tree exprstmt;
13516 /* Any return from a destructor will end up here; that way all base
13517 and member cleanups will be run when the function returns. */
13518 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13520 /* In a virtual destructor, we must call delete. */
13521 if (DECL_VIRTUAL_P (current_function_decl))
13523 tree if_stmt;
13524 tree virtual_size = cxx_sizeof (current_class_type);
13526 /* [class.dtor]
13528 At the point of definition of a virtual destructor (including
13529 an implicit definition), non-placement operator delete shall
13530 be looked up in the scope of the destructor's class and if
13531 found shall be accessible and unambiguous. */
13532 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13533 virtual_size,
13534 /*global_p=*/false,
13535 /*placement=*/NULL_TREE,
13536 /*alloc_fn=*/NULL_TREE,
13537 tf_warning_or_error);
13539 if_stmt = begin_if_stmt ();
13540 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13541 current_in_charge_parm,
13542 integer_one_node),
13543 if_stmt);
13544 finish_expr_stmt (exprstmt);
13545 finish_then_clause (if_stmt);
13546 finish_if_stmt (if_stmt);
13549 if (targetm.cxx.cdtor_returns_this ())
13551 tree val;
13553 val = DECL_ARGUMENTS (current_function_decl);
13554 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13555 DECL_RESULT (current_function_decl), val);
13556 /* Return the address of the object. */
13557 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13558 add_stmt (exprstmt);
13562 /* Do the necessary processing for the beginning of a function body, which
13563 in this case includes member-initializers, but not the catch clauses of
13564 a function-try-block. Currently, this means opening a binding level
13565 for the member-initializers (in a ctor), member cleanups (in a dtor),
13566 and capture proxies (in a lambda operator()). */
13568 tree
13569 begin_function_body (void)
13571 tree stmt;
13573 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13574 return NULL_TREE;
13576 if (processing_template_decl)
13577 /* Do nothing now. */;
13578 else
13579 /* Always keep the BLOCK node associated with the outermost pair of
13580 curly braces of a function. These are needed for correct
13581 operation of dwarfout.c. */
13582 keep_next_level (true);
13584 stmt = begin_compound_stmt (BCS_FN_BODY);
13586 if (processing_template_decl)
13587 /* Do nothing now. */;
13588 else if (DECL_DESTRUCTOR_P (current_function_decl))
13589 begin_destructor_body ();
13591 return stmt;
13594 /* Do the processing for the end of a function body. Currently, this means
13595 closing out the cleanups for fully-constructed bases and members, and in
13596 the case of the destructor, deleting the object if desired. Again, this
13597 is only meaningful for [cd]tors, since they are the only functions where
13598 there is a significant distinction between the main body and any
13599 function catch clauses. Handling, say, main() return semantics here
13600 would be wrong, as flowing off the end of a function catch clause for
13601 main() would also need to return 0. */
13603 void
13604 finish_function_body (tree compstmt)
13606 if (compstmt == NULL_TREE)
13607 return;
13609 /* Close the block. */
13610 finish_compound_stmt (compstmt);
13612 if (processing_template_decl)
13613 /* Do nothing now. */;
13614 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13615 finish_constructor_body ();
13616 else if (DECL_DESTRUCTOR_P (current_function_decl))
13617 finish_destructor_body ();
13620 /* Given a function, returns the BLOCK corresponding to the outermost level
13621 of curly braces, skipping the artificial block created for constructor
13622 initializers. */
13624 tree
13625 outer_curly_brace_block (tree fndecl)
13627 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13628 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13629 /* Skip the artificial function body block. */
13630 block = BLOCK_SUBBLOCKS (block);
13631 return block;
13634 /* If FNDECL is a class's key method, add the class to the list of
13635 keyed classes that should be emitted. */
13637 static void
13638 record_key_method_defined (tree fndecl)
13640 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13641 && DECL_VIRTUAL_P (fndecl)
13642 && !processing_template_decl)
13644 tree fnclass = DECL_CONTEXT (fndecl);
13645 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13646 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13650 /* Subroutine of finish_function.
13651 Save the body of constexpr functions for possible
13652 future compile time evaluation. */
13654 static void
13655 maybe_save_function_definition (tree fun)
13657 if (!processing_template_decl
13658 && DECL_DECLARED_CONSTEXPR_P (fun)
13659 && !DECL_CLONED_FUNCTION_P (fun))
13660 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13663 /* Finish up a function declaration and compile that function
13664 all the way to assembler language output. The free the storage
13665 for the function definition.
13667 FLAGS is a bitwise or of the following values:
13668 2 - INCLASS_INLINE
13669 We just finished processing the body of an in-class inline
13670 function definition. (This processing will have taken place
13671 after the class definition is complete.) */
13673 tree
13674 finish_function (int flags)
13676 tree fndecl = current_function_decl;
13677 tree fntype, ctype = NULL_TREE;
13678 int inclass_inline = (flags & 2) != 0;
13680 /* When we get some parse errors, we can end up without a
13681 current_function_decl, so cope. */
13682 if (fndecl == NULL_TREE)
13683 return error_mark_node;
13685 if (c_dialect_objc ())
13686 objc_finish_function ();
13688 gcc_assert (!defer_mark_used_calls);
13689 defer_mark_used_calls = true;
13691 record_key_method_defined (fndecl);
13693 fntype = TREE_TYPE (fndecl);
13695 /* TREE_READONLY (fndecl) = 1;
13696 This caused &foo to be of type ptr-to-const-function
13697 which then got a warning when stored in a ptr-to-function variable. */
13699 gcc_assert (building_stmt_list_p ());
13700 /* The current function is being defined, so its DECL_INITIAL should
13701 be set, and unless there's a multiple definition, it should be
13702 error_mark_node. */
13703 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13705 /* For a cloned function, we've already got all the code we need;
13706 there's no need to add any extra bits. */
13707 if (!DECL_CLONED_FUNCTION_P (fndecl))
13709 /* Make it so that `main' always returns 0 by default. */
13710 if (DECL_MAIN_P (current_function_decl))
13711 finish_return_stmt (integer_zero_node);
13713 if (use_eh_spec_block (current_function_decl))
13714 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13715 (TREE_TYPE (current_function_decl)),
13716 current_eh_spec_block);
13719 /* If we're saving up tree structure, tie off the function now. */
13720 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13722 finish_fname_decls ();
13724 /* If this function can't throw any exceptions, remember that. */
13725 if (!processing_template_decl
13726 && !cp_function_chain->can_throw
13727 && !flag_non_call_exceptions
13728 && !decl_replaceable_p (fndecl))
13729 TREE_NOTHROW (fndecl) = 1;
13731 /* This must come after expand_function_end because cleanups might
13732 have declarations (from inline functions) that need to go into
13733 this function's blocks. */
13735 /* If the current binding level isn't the outermost binding level
13736 for this function, either there is a bug, or we have experienced
13737 syntax errors and the statement tree is malformed. */
13738 if (current_binding_level->kind != sk_function_parms)
13740 /* Make sure we have already experienced errors. */
13741 gcc_assert (errorcount);
13743 /* Throw away the broken statement tree and extra binding
13744 levels. */
13745 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13747 while (current_binding_level->kind != sk_function_parms)
13749 if (current_binding_level->kind == sk_class)
13750 pop_nested_class ();
13751 else
13752 poplevel (0, 0, 0);
13755 poplevel (1, 0, 1);
13757 /* Statements should always be full-expressions at the outermost set
13758 of curly braces for a function. */
13759 gcc_assert (stmts_are_full_exprs_p ());
13761 /* If there are no return statements in a function with auto return type,
13762 the return type is void. But if the declared type is something like
13763 auto*, this is an error. */
13764 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
13765 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
13767 if (!is_auto (current_function_auto_return_pattern)
13768 && !current_function_returns_value && !current_function_returns_null)
13770 error ("no return statements in function returning %qT",
13771 current_function_auto_return_pattern);
13772 inform (input_location, "only plain %<auto%> return type can be "
13773 "deduced to %<void%>");
13775 apply_deduced_return_type (fndecl, void_type_node);
13776 fntype = TREE_TYPE (fndecl);
13779 /* Save constexpr function body before it gets munged by
13780 the NRV transformation. */
13781 maybe_save_function_definition (fndecl);
13783 /* Set up the named return value optimization, if we can. Candidate
13784 variables are selected in check_return_expr. */
13785 if (current_function_return_value)
13787 tree r = current_function_return_value;
13788 tree outer;
13790 if (r != error_mark_node
13791 /* This is only worth doing for fns that return in memory--and
13792 simpler, since we don't have to worry about promoted modes. */
13793 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13794 /* Only allow this for variables declared in the outer scope of
13795 the function so we know that their lifetime always ends with a
13796 return; see g++.dg/opt/nrv6.C. We could be more flexible if
13797 we were to do this optimization in tree-ssa. */
13798 && (outer = outer_curly_brace_block (fndecl))
13799 && chain_member (r, BLOCK_VARS (outer)))
13800 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13802 current_function_return_value = NULL_TREE;
13805 /* Remember that we were in class scope. */
13806 if (current_class_name)
13807 ctype = current_class_type;
13809 /* Must mark the RESULT_DECL as being in this function. */
13810 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13812 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13813 to the FUNCTION_DECL node itself. */
13814 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13816 /* Save away current state, if appropriate. */
13817 if (!processing_template_decl)
13818 save_function_data (fndecl);
13820 /* Complain if there's just no return statement. */
13821 if (warn_return_type
13822 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13823 && !dependent_type_p (TREE_TYPE (fntype))
13824 && !current_function_returns_value && !current_function_returns_null
13825 /* Don't complain if we abort or throw. */
13826 && !current_function_returns_abnormally
13827 /* Don't complain if we are declared noreturn. */
13828 && !TREE_THIS_VOLATILE (fndecl)
13829 && !DECL_NAME (DECL_RESULT (fndecl))
13830 && !TREE_NO_WARNING (fndecl)
13831 /* Structor return values (if any) are set by the compiler. */
13832 && !DECL_CONSTRUCTOR_P (fndecl)
13833 && !DECL_DESTRUCTOR_P (fndecl)
13834 && targetm.warn_func_return (fndecl))
13836 warning (OPT_Wreturn_type,
13837 "no return statement in function returning non-void");
13838 TREE_NO_WARNING (fndecl) = 1;
13841 /* Store the end of the function, so that we get good line number
13842 info for the epilogue. */
13843 cfun->function_end_locus = input_location;
13845 /* Complain about parameters that are only set, but never otherwise used. */
13846 if (warn_unused_but_set_parameter
13847 && !processing_template_decl
13848 && errorcount == unused_but_set_errorcount
13849 && !DECL_CLONED_FUNCTION_P (fndecl))
13851 tree decl;
13853 for (decl = DECL_ARGUMENTS (fndecl);
13854 decl;
13855 decl = DECL_CHAIN (decl))
13856 if (TREE_USED (decl)
13857 && TREE_CODE (decl) == PARM_DECL
13858 && !DECL_READ_P (decl)
13859 && DECL_NAME (decl)
13860 && !DECL_ARTIFICIAL (decl)
13861 && !TREE_NO_WARNING (decl)
13862 && !DECL_IN_SYSTEM_HEADER (decl)
13863 && TREE_TYPE (decl) != error_mark_node
13864 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13865 && (!CLASS_TYPE_P (TREE_TYPE (decl))
13866 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13867 warning (OPT_Wunused_but_set_parameter,
13868 "parameter %q+D set but not used", decl);
13869 unused_but_set_errorcount = errorcount;
13872 /* Complain about locally defined typedefs that are not used in this
13873 function. */
13874 maybe_warn_unused_local_typedefs ();
13876 /* Genericize before inlining. */
13877 if (!processing_template_decl)
13879 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13880 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13881 cp_genericize (fndecl);
13882 /* Clear out the bits we don't need. */
13883 f->x_current_class_ptr = NULL;
13884 f->x_current_class_ref = NULL;
13885 f->x_eh_spec_block = NULL;
13886 f->x_in_charge_parm = NULL;
13887 f->x_vtt_parm = NULL;
13888 f->x_return_value = NULL;
13889 f->bindings = NULL;
13890 f->extern_decl_map = NULL;
13892 /* Clear out the bits we don't need. */
13893 local_names = NULL;
13895 /* We're leaving the context of this function, so zap cfun. It's still in
13896 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
13897 set_cfun (NULL);
13898 current_function_decl = NULL;
13900 /* If this is an in-class inline definition, we may have to pop the
13901 bindings for the template parameters that we added in
13902 maybe_begin_member_template_processing when start_function was
13903 called. */
13904 if (inclass_inline)
13905 maybe_end_member_template_processing ();
13907 /* Leave the scope of the class. */
13908 if (ctype)
13909 pop_nested_class ();
13911 --function_depth;
13913 /* Clean up. */
13914 current_function_decl = NULL_TREE;
13916 defer_mark_used_calls = false;
13917 if (deferred_mark_used_calls)
13919 unsigned int i;
13920 tree decl;
13922 FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13923 mark_used (decl);
13924 VEC_free (tree, gc, deferred_mark_used_calls);
13927 return fndecl;
13930 /* Create the FUNCTION_DECL for a function definition.
13931 DECLSPECS and DECLARATOR are the parts of the declaration;
13932 they describe the return type and the name of the function,
13933 but twisted together in a fashion that parallels the syntax of C.
13935 This function creates a binding context for the function body
13936 as well as setting up the FUNCTION_DECL in current_function_decl.
13938 Returns a FUNCTION_DECL on success.
13940 If the DECLARATOR is not suitable for a function (it defines a datum
13941 instead), we return 0, which tells yyparse to report a parse error.
13943 May return void_type_node indicating that this method is actually
13944 a friend. See grokfield for more details.
13946 Came here with a `.pushlevel' .
13948 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13949 CHANGES TO CODE IN `grokfield'. */
13951 tree
13952 grokmethod (cp_decl_specifier_seq *declspecs,
13953 const cp_declarator *declarator, tree attrlist)
13955 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13956 &attrlist);
13958 if (fndecl == error_mark_node)
13959 return error_mark_node;
13961 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13963 error ("invalid member function declaration");
13964 return error_mark_node;
13967 if (attrlist)
13968 cplus_decl_attributes (&fndecl, attrlist, 0);
13970 /* Pass friends other than inline friend functions back. */
13971 if (fndecl == void_type_node)
13972 return fndecl;
13974 if (DECL_IN_AGGR_P (fndecl))
13976 if (DECL_CLASS_SCOPE_P (fndecl))
13977 error ("%qD is already defined in class %qT", fndecl,
13978 DECL_CONTEXT (fndecl));
13979 return error_mark_node;
13982 check_template_shadow (fndecl);
13984 DECL_DECLARED_INLINE_P (fndecl) = 1;
13985 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13987 /* We process method specializations in finish_struct_1. */
13988 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13990 fndecl = push_template_decl (fndecl);
13991 if (fndecl == error_mark_node)
13992 return fndecl;
13995 if (! DECL_FRIEND_P (fndecl))
13997 if (DECL_CHAIN (fndecl))
13999 fndecl = copy_node (fndecl);
14000 TREE_CHAIN (fndecl) = NULL_TREE;
14004 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14006 DECL_IN_AGGR_P (fndecl) = 1;
14007 return fndecl;
14011 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14012 we can lay it out later, when and if its type becomes complete. */
14014 void
14015 maybe_register_incomplete_var (tree var)
14017 gcc_assert (TREE_CODE (var) == VAR_DECL);
14019 /* Keep track of variables with incomplete types. */
14020 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14021 && DECL_EXTERNAL (var))
14023 tree inner_type = TREE_TYPE (var);
14025 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14026 inner_type = TREE_TYPE (inner_type);
14027 inner_type = TYPE_MAIN_VARIANT (inner_type);
14029 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14030 /* RTTI TD entries are created while defining the type_info. */
14031 || (TYPE_LANG_SPECIFIC (inner_type)
14032 && TYPE_BEING_DEFINED (inner_type)))
14034 incomplete_var iv = {var, inner_type};
14035 VEC_safe_push (incomplete_var, gc, incomplete_vars, iv);
14040 /* Called when a class type (given by TYPE) is defined. If there are
14041 any existing VAR_DECLs whose type has been completed by this
14042 declaration, update them now. */
14044 void
14045 complete_vars (tree type)
14047 unsigned ix;
14048 incomplete_var *iv;
14050 for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
14052 if (same_type_p (type, iv->incomplete_type))
14054 tree var = iv->decl;
14055 tree type = TREE_TYPE (var);
14056 /* Complete the type of the variable. The VAR_DECL itself
14057 will be laid out in expand_expr. */
14058 complete_type (type);
14059 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14060 /* Remove this entry from the list. */
14061 VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
14063 else
14064 ix++;
14067 /* Check for pending declarations which may have abstract type. */
14068 complete_type_check_abstract (type);
14071 /* If DECL is of a type which needs a cleanup, build and return an
14072 expression to perform that cleanup here. Return NULL_TREE if no
14073 cleanup need be done. */
14075 tree
14076 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14078 tree type;
14079 tree attr;
14080 tree cleanup;
14082 /* Assume no cleanup is required. */
14083 cleanup = NULL_TREE;
14085 if (error_operand_p (decl))
14086 return cleanup;
14088 /* Handle "__attribute__((cleanup))". We run the cleanup function
14089 before the destructor since the destructor is what actually
14090 terminates the lifetime of the object. */
14091 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14092 if (attr)
14094 tree id;
14095 tree fn;
14096 tree arg;
14098 /* Get the name specified by the user for the cleanup function. */
14099 id = TREE_VALUE (TREE_VALUE (attr));
14100 /* Look up the name to find the cleanup function to call. It is
14101 important to use lookup_name here because that is what is
14102 used in c-common.c:handle_cleanup_attribute when performing
14103 initial checks on the attribute. Note that those checks
14104 include ensuring that the function found is not an overloaded
14105 function, or an object with an overloaded call operator,
14106 etc.; we can rely on the fact that the function found is an
14107 ordinary FUNCTION_DECL. */
14108 fn = lookup_name (id);
14109 arg = build_address (decl);
14110 mark_used (decl);
14111 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14112 if (cleanup == error_mark_node)
14113 return error_mark_node;
14115 /* Handle ordinary C++ destructors. */
14116 type = TREE_TYPE (decl);
14117 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14119 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14120 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
14121 && CLASSTYPE_VBASECLASSES (type));
14122 tree addr;
14123 tree call;
14125 if (TREE_CODE (type) == ARRAY_TYPE)
14126 addr = decl;
14127 else
14128 addr = build_address (decl);
14130 /* Optimize for space over speed here. */
14131 if (!has_vbases || flag_expensive_optimizations)
14132 flags |= LOOKUP_NONVIRTUAL;
14134 call = build_delete (TREE_TYPE (addr), addr,
14135 sfk_complete_destructor, flags, 0, complain);
14136 if (call == error_mark_node)
14137 cleanup = error_mark_node;
14138 else if (cleanup)
14139 cleanup = cp_build_compound_expr (cleanup, call, complain);
14140 else
14141 cleanup = call;
14144 /* build_delete sets the location of the destructor call to the
14145 current location, even though the destructor is going to be
14146 called later, at the end of the current scope. This can lead to
14147 a "jumpy" behaviour for users of debuggers when they step around
14148 the end of the block. So let's unset the location of the
14149 destructor call instead. */
14150 if (cleanup != NULL && EXPR_P (cleanup))
14151 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14152 return cleanup;
14156 /* When a stmt has been parsed, this function is called. */
14158 void
14159 finish_stmt (void)
14163 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14164 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14165 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14167 tree
14168 static_fn_type (tree memfntype)
14170 tree fntype;
14171 tree args;
14173 if (TYPE_PTRMEMFUNC_P (memfntype))
14174 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14175 if (POINTER_TYPE_P (memfntype)
14176 || TREE_CODE (memfntype) == FUNCTION_DECL)
14177 memfntype = TREE_TYPE (memfntype);
14178 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14179 return memfntype;
14180 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14181 args = TYPE_ARG_TYPES (memfntype);
14182 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14183 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
14184 fntype = (cp_build_type_attribute_variant
14185 (fntype, TYPE_ATTRIBUTES (memfntype)));
14186 fntype = (build_exception_variant
14187 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14188 return fntype;
14191 /* DECL was originally constructed as a non-static member function,
14192 but turned out to be static. Update it accordingly. */
14194 void
14195 revert_static_member_fn (tree decl)
14197 tree stype = static_fn_type (decl);
14198 cp_cv_quals quals = type_memfn_quals (stype);
14200 if (quals != TYPE_UNQUALIFIED)
14201 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
14203 TREE_TYPE (decl) = stype;
14205 if (DECL_ARGUMENTS (decl))
14206 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14207 DECL_STATIC_FUNCTION_P (decl) = 1;
14210 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14211 one of the language-independent trees. */
14213 enum cp_tree_node_structure_enum
14214 cp_tree_node_structure (union lang_tree_node * t)
14216 switch (TREE_CODE (&t->generic))
14218 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14219 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14220 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14221 case OVERLOAD: return TS_CP_OVERLOAD;
14222 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14223 case PTRMEM_CST: return TS_CP_PTRMEM;
14224 case BASELINK: return TS_CP_BASELINK;
14225 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14226 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14227 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14228 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14229 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14230 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14231 default: return TS_CP_GENERIC;
14235 /* Build the void_list_node (void_type_node having been created). */
14236 tree
14237 build_void_list_node (void)
14239 tree t = build_tree_list (NULL_TREE, void_type_node);
14240 return t;
14243 bool
14244 cp_missing_noreturn_ok_p (tree decl)
14246 /* A missing noreturn is ok for the `main' function. */
14247 return DECL_MAIN_P (decl);
14250 /* Return the COMDAT group into which DECL should be placed. */
14252 tree
14253 cxx_comdat_group (tree decl)
14255 tree name;
14257 /* Virtual tables, construction virtual tables, and virtual table
14258 tables all go in a single COMDAT group, named after the primary
14259 virtual table. */
14260 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
14261 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
14262 /* For all other DECLs, the COMDAT group is the mangled name of the
14263 declaration itself. */
14264 else
14266 while (DECL_THUNK_P (decl))
14268 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14269 into the same section as the target function. In that case
14270 we must return target's name. */
14271 tree target = THUNK_TARGET (decl);
14272 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14273 && DECL_SECTION_NAME (target) != NULL
14274 && DECL_ONE_ONLY (target))
14275 decl = target;
14276 else
14277 break;
14279 name = DECL_ASSEMBLER_NAME (decl);
14282 return name;
14285 #include "gt-cp-decl.h"