* include/bits/regex_compiler.h (__detail::__has_contiguous_iter):
[official-gcc.git] / gcc / cp / decl.c
blob8b7a89fcd991afd91c1f595dc69b0d5d1a78ed7a
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2013 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "tree-iterator.h"
37 #include "tree-inline.h"
38 #include "decl.h"
39 #include "intl.h"
40 #include "toplev.h"
41 #include "hashtab.h"
42 #include "tm_p.h"
43 #include "target.h"
44 #include "c-family/c-common.h"
45 #include "c-family/c-objc.h"
46 #include "c-family/c-pragma.h"
47 #include "c-family/c-target.h"
48 #include "c-family/c-ubsan.h"
49 #include "diagnostic.h"
50 #include "intl.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "pointer-set.h"
54 #include "splay-tree.h"
55 #include "plugin.h"
56 #include "cgraph.h"
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60 BSP_VAR, /* variable */
61 BSP_PARM, /* parameter */
62 BSP_TYPE, /* type */
63 BSP_FIELD /* field */
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, int);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76 int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static int member_function_or_else (tree, tree, enum overload_flags);
81 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
82 int);
83 static void check_for_uninitialized_const_var (tree);
84 static hashval_t typename_hash (const void *);
85 static int typename_compare (const void *, const void *);
86 static tree local_variable_p_walkfn (tree *, int *, void *);
87 static tree record_builtin_java_type (const char *, int);
88 static const char *tag_name (enum tag_types);
89 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
90 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
91 static void maybe_deduce_size_from_array_init (tree, tree);
92 static void layout_var_decl (tree);
93 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
94 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
95 static void save_function_data (tree);
96 static void copy_type_enum (tree , tree);
97 static void check_function_type (tree, tree);
98 static void finish_constructor_body (void);
99 static void begin_destructor_body (void);
100 static void finish_destructor_body (void);
101 static void record_key_method_defined (tree);
102 static tree create_array_type_for_decl (tree, tree, tree);
103 static tree get_atexit_node (void);
104 static tree get_dso_handle_node (void);
105 static tree start_cleanup_fn (void);
106 static void end_cleanup_fn (void);
107 static tree cp_make_fname_decl (location_t, tree, int);
108 static void initialize_predefined_identifiers (void);
109 static tree check_special_function_return_type
110 (special_function_kind, tree, tree);
111 static tree push_cp_library_fn (enum tree_code, tree, int);
112 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
113 static void store_parm_decls (tree);
114 static void initialize_local_var (tree, tree);
115 static void expand_static_init (tree, tree);
117 /* The following symbols are subsumed in the cp_global_trees array, and
118 listed here individually for documentation purposes.
120 C++ extensions
121 tree wchar_decl_node;
123 tree vtable_entry_type;
124 tree delta_type_node;
125 tree __t_desc_type_node;
127 tree class_type_node;
128 tree unknown_type_node;
130 Array type `vtable_entry_type[]'
132 tree vtbl_type_node;
133 tree vtbl_ptr_type_node;
135 Namespaces,
137 tree std_node;
138 tree abi_node;
140 A FUNCTION_DECL which can call `abort'. Not necessarily the
141 one that the user will declare, but sufficient to be called
142 by routines that want to abort the program.
144 tree abort_fndecl;
146 The FUNCTION_DECL for the default `::operator delete'.
148 tree global_delete_fndecl;
150 Used by RTTI
151 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
152 tree tinfo_var_id; */
154 tree cp_global_trees[CPTI_MAX];
156 /* Indicates that there is a type value in some namespace, although
157 that is not necessarily in scope at the moment. */
159 tree global_type_node;
161 /* The node that holds the "name" of the global scope. */
162 tree global_scope_name;
164 #define local_names cp_function_chain->x_local_names
166 /* A list of objects which have constructors or destructors
167 which reside in the global scope. The decl is stored in
168 the TREE_VALUE slot and the initializer is stored
169 in the TREE_PURPOSE slot. */
170 tree static_aggregates;
172 /* Like static_aggregates, but for thread_local variables. */
173 tree tls_aggregates;
175 /* -- end of C++ */
177 /* A node for the integer constant 2. */
179 tree integer_two_node;
181 /* Used only for jumps to as-yet undefined labels, since jumps to
182 defined labels can have their validity checked immediately. */
184 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
185 struct named_label_use_entry *next;
186 /* The binding level to which this entry is *currently* attached.
187 This is initially the binding level in which the goto appeared,
188 but is modified as scopes are closed. */
189 cp_binding_level *binding_level;
190 /* The head of the names list that was current when the goto appeared,
191 or the inner scope popped. These are the decls that will *not* be
192 skipped when jumping to the label. */
193 tree names_in_scope;
194 /* The location of the goto, for error reporting. */
195 location_t o_goto_locus;
196 /* True if an OpenMP structured block scope has been closed since
197 the goto appeared. This means that the branch from the label will
198 illegally exit an OpenMP scope. */
199 bool in_omp_scope;
202 /* A list of all LABEL_DECLs in the function that have names. Here so
203 we can clear out their names' definitions at the end of the
204 function, and so we can check the validity of jumps to these labels. */
206 struct GTY(()) named_label_entry {
207 /* The decl itself. */
208 tree label_decl;
210 /* The binding level to which the label is *currently* attached.
211 This is initially set to the binding level in which the label
212 is defined, but is modified as scopes are closed. */
213 cp_binding_level *binding_level;
214 /* The head of the names list that was current when the label was
215 defined, or the inner scope popped. These are the decls that will
216 be skipped when jumping to the label. */
217 tree names_in_scope;
218 /* A vector of all decls from all binding levels that would be
219 crossed by a backward branch to the label. */
220 vec<tree, va_gc> *bad_decls;
222 /* A list of uses of the label, before the label is defined. */
223 struct named_label_use_entry *uses;
225 /* The following bits are set after the label is defined, and are
226 updated as scopes are popped. They indicate that a backward jump
227 to the label will illegally enter a scope of the given flavor. */
228 bool in_try_scope;
229 bool in_catch_scope;
230 bool in_omp_scope;
233 #define named_labels cp_function_chain->x_named_labels
235 /* The number of function bodies which we are currently processing.
236 (Zero if we are at namespace scope, one inside the body of a
237 function, two inside the body of a function in a local class, etc.) */
238 int function_depth;
240 /* To avoid unwanted recursion, finish_function defers all mark_used calls
241 encountered during its execution until it finishes. */
242 bool defer_mark_used_calls;
243 vec<tree, va_gc> *deferred_mark_used_calls;
245 /* States indicating how grokdeclarator() should handle declspecs marked
246 with __attribute__((deprecated)). An object declared as
247 __attribute__((deprecated)) suppresses warnings of uses of other
248 deprecated items. */
249 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
252 /* A list of VAR_DECLs whose type was incomplete at the time the
253 variable was declared. */
255 typedef struct GTY(()) incomplete_var_d {
256 tree decl;
257 tree incomplete_type;
258 } incomplete_var;
261 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
263 /* Returns the kind of template specialization we are currently
264 processing, given that it's declaration contained N_CLASS_SCOPES
265 explicit scope qualifications. */
267 tmpl_spec_kind
268 current_tmpl_spec_kind (int n_class_scopes)
270 int n_template_parm_scopes = 0;
271 int seen_specialization_p = 0;
272 int innermost_specialization_p = 0;
273 cp_binding_level *b;
275 /* Scan through the template parameter scopes. */
276 for (b = current_binding_level;
277 b->kind == sk_template_parms;
278 b = b->level_chain)
280 /* If we see a specialization scope inside a parameter scope,
281 then something is wrong. That corresponds to a declaration
282 like:
284 template <class T> template <> ...
286 which is always invalid since [temp.expl.spec] forbids the
287 specialization of a class member template if the enclosing
288 class templates are not explicitly specialized as well. */
289 if (b->explicit_spec_p)
291 if (n_template_parm_scopes == 0)
292 innermost_specialization_p = 1;
293 else
294 seen_specialization_p = 1;
296 else if (seen_specialization_p == 1)
297 return tsk_invalid_member_spec;
299 ++n_template_parm_scopes;
302 /* Handle explicit instantiations. */
303 if (processing_explicit_instantiation)
305 if (n_template_parm_scopes != 0)
306 /* We've seen a template parameter list during an explicit
307 instantiation. For example:
309 template <class T> template void f(int);
311 This is erroneous. */
312 return tsk_invalid_expl_inst;
313 else
314 return tsk_expl_inst;
317 if (n_template_parm_scopes < n_class_scopes)
318 /* We've not seen enough template headers to match all the
319 specialized classes present. For example:
321 template <class T> void R<T>::S<T>::f(int);
323 This is invalid; there needs to be one set of template
324 parameters for each class. */
325 return tsk_insufficient_parms;
326 else if (n_template_parm_scopes == n_class_scopes)
327 /* We're processing a non-template declaration (even though it may
328 be a member of a template class.) For example:
330 template <class T> void S<T>::f(int);
332 The `class T' matches the `S<T>', leaving no template headers
333 corresponding to the `f'. */
334 return tsk_none;
335 else if (n_template_parm_scopes > n_class_scopes + 1)
336 /* We've got too many template headers. For example:
338 template <> template <class T> void f (T);
340 There need to be more enclosing classes. */
341 return tsk_excessive_parms;
342 else
343 /* This must be a template. It's of the form:
345 template <class T> template <class U> void S<T>::f(U);
347 This is a specialization if the innermost level was a
348 specialization; otherwise it's just a definition of the
349 template. */
350 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
353 /* Exit the current scope. */
355 void
356 finish_scope (void)
358 poplevel (0, 0, 0);
361 /* When a label goes out of scope, check to see if that label was used
362 in a valid manner, and issue any appropriate warnings or errors. */
364 static void
365 pop_label (tree label, tree old_value)
367 if (!processing_template_decl)
369 if (DECL_INITIAL (label) == NULL_TREE)
371 location_t location;
373 error ("label %q+D used but not defined", label);
374 location = input_location; /* FIXME want (input_filename, (line)0) */
375 /* Avoid crashing later. */
376 define_label (location, DECL_NAME (label));
378 else
379 warn_for_unused_label (label);
382 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
385 /* At the end of a function, all labels declared within the function
386 go out of scope. BLOCK is the top-level block for the
387 function. */
389 static int
390 pop_labels_1 (void **slot, void *data)
392 struct named_label_entry *ent = (struct named_label_entry *) *slot;
393 tree block = (tree) data;
395 pop_label (ent->label_decl, NULL_TREE);
397 /* Put the labels into the "variables" of the top-level block,
398 so debugger can see them. */
399 DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400 BLOCK_VARS (block) = ent->label_decl;
402 htab_clear_slot (named_labels, slot);
404 return 1;
407 static void
408 pop_labels (tree block)
410 if (named_labels)
412 htab_traverse (named_labels, pop_labels_1, block);
413 named_labels = NULL;
417 /* At the end of a block with local labels, restore the outer definition. */
419 static void
420 pop_local_label (tree label, tree old_value)
422 struct named_label_entry dummy;
423 void **slot;
425 pop_label (label, old_value);
427 dummy.label_decl = label;
428 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429 htab_clear_slot (named_labels, slot);
432 /* The following two routines are used to interface to Objective-C++.
433 The binding level is purposely treated as an opaque type. */
435 void *
436 objc_get_current_scope (void)
438 return current_binding_level;
441 /* The following routine is used by the NeXT-style SJLJ exceptions;
442 variables get marked 'volatile' so as to not be clobbered by
443 _setjmp()/_longjmp() calls. All variables in the current scope,
444 as well as parent scopes up to (but not including) ENCLOSING_BLK
445 shall be thusly marked. */
447 void
448 objc_mark_locals_volatile (void *enclosing_blk)
450 cp_binding_level *scope;
452 for (scope = current_binding_level;
453 scope && scope != enclosing_blk;
454 scope = scope->level_chain)
456 tree decl;
458 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459 objc_volatilize_decl (decl);
461 /* Do not climb up past the current function. */
462 if (scope->kind == sk_function_parms)
463 break;
467 /* Update data for defined and undefined labels when leaving a scope. */
469 static int
470 poplevel_named_label_1 (void **slot, void *data)
472 struct named_label_entry *ent = (struct named_label_entry *) *slot;
473 cp_binding_level *bl = (cp_binding_level *) data;
474 cp_binding_level *obl = bl->level_chain;
476 if (ent->binding_level == bl)
478 tree decl;
480 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481 TREE_LISTs representing OVERLOADs, so be careful. */
482 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483 ? DECL_CHAIN (decl)
484 : TREE_CHAIN (decl)))
485 if (decl_jump_unsafe (decl))
486 vec_safe_push (ent->bad_decls, decl);
488 ent->binding_level = obl;
489 ent->names_in_scope = obl->names;
490 switch (bl->kind)
492 case sk_try:
493 ent->in_try_scope = true;
494 break;
495 case sk_catch:
496 ent->in_catch_scope = true;
497 break;
498 case sk_omp:
499 ent->in_omp_scope = true;
500 break;
501 default:
502 break;
505 else if (ent->uses)
507 struct named_label_use_entry *use;
509 for (use = ent->uses; use ; use = use->next)
510 if (use->binding_level == bl)
512 use->binding_level = obl;
513 use->names_in_scope = obl->names;
514 if (bl->kind == sk_omp)
515 use->in_omp_scope = true;
519 return 1;
522 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523 when errors were reported, except for -Werror-unused-but-set-*. */
524 static int unused_but_set_errorcount;
526 /* Exit a binding level.
527 Pop the level off, and restore the state of the identifier-decl mappings
528 that were in effect when this level was entered.
530 If KEEP == 1, this level had explicit declarations, so
531 and create a "block" (a BLOCK node) for the level
532 to record its declarations and subblocks for symbol table output.
534 If FUNCTIONBODY is nonzero, this level is the body of a function,
535 so create a block as if KEEP were set and also clear out all
536 label names.
538 If REVERSE is nonzero, reverse the order of decls before putting
539 them into the BLOCK. */
541 tree
542 poplevel (int keep, int reverse, int functionbody)
544 tree link;
545 /* The chain of decls was accumulated in reverse order.
546 Put it into forward order, just for cleanliness. */
547 tree decls;
548 tree subblocks;
549 tree block;
550 tree decl;
551 int leaving_for_scope;
552 scope_kind kind;
553 unsigned ix;
554 cp_label_binding *label_bind;
556 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
557 restart:
559 block = NULL_TREE;
561 gcc_assert (current_binding_level->kind != sk_class);
563 if (current_binding_level->kind == sk_cleanup)
564 functionbody = 0;
565 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
567 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
569 /* We used to use KEEP == 2 to indicate that the new block should go
570 at the beginning of the list of blocks at this binding level,
571 rather than the end. This hack is no longer used. */
572 gcc_assert (keep == 0 || keep == 1);
574 if (current_binding_level->keep)
575 keep = 1;
577 /* Any uses of undefined labels, and any defined labels, now operate
578 under constraints of next binding contour. */
579 if (cfun && !functionbody && named_labels)
580 htab_traverse (named_labels, poplevel_named_label_1,
581 current_binding_level);
583 /* Get the decls in the order they were written.
584 Usually current_binding_level->names is in reverse order.
585 But parameter decls were previously put in forward order. */
587 if (reverse)
588 current_binding_level->names
589 = decls = nreverse (current_binding_level->names);
590 else
591 decls = current_binding_level->names;
593 /* If there were any declarations or structure tags in that level,
594 or if this level is a function body,
595 create a BLOCK to record them for the life of this function. */
596 block = NULL_TREE;
597 if (keep == 1 || functionbody)
598 block = make_node (BLOCK);
599 if (block != NULL_TREE)
601 BLOCK_VARS (block) = decls;
602 BLOCK_SUBBLOCKS (block) = subblocks;
605 /* In each subblock, record that this is its superior. */
606 if (keep >= 0)
607 for (link = subblocks; link; link = BLOCK_CHAIN (link))
608 BLOCK_SUPERCONTEXT (link) = block;
610 /* We still support the old for-scope rules, whereby the variables
611 in a for-init statement were in scope after the for-statement
612 ended. We only use the new rules if flag_new_for_scope is
613 nonzero. */
614 leaving_for_scope
615 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617 /* Before we remove the declarations first check for unused variables. */
618 if ((warn_unused_variable || warn_unused_but_set_variable)
619 && !processing_template_decl)
620 for (tree d = getdecls (); d; d = TREE_CHAIN (d))
622 /* There are cases where D itself is a TREE_LIST. See in
623 push_local_binding where the list of decls returned by
624 getdecls is built. */
625 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
626 // See through references for improved -Wunused-variable (PR 38958).
627 tree type = non_reference (TREE_TYPE (decl));
628 if (VAR_P (decl)
629 && (! TREE_USED (decl) || !DECL_READ_P (decl))
630 && ! DECL_IN_SYSTEM_HEADER (decl)
631 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
632 && type != error_mark_node
633 && (!CLASS_TYPE_P (type)
634 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
635 || lookup_attribute ("warn_unused",
636 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
638 if (! TREE_USED (decl))
639 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
640 else if (DECL_CONTEXT (decl) == current_function_decl
641 // For -Wunused-but-set-variable leave references alone.
642 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
643 && errorcount == unused_but_set_errorcount)
645 warning (OPT_Wunused_but_set_variable,
646 "variable %q+D set but not used", decl);
647 unused_but_set_errorcount = errorcount;
652 /* Remove declarations for all the DECLs in this level. */
653 for (link = decls; link; link = TREE_CHAIN (link))
655 if (leaving_for_scope && VAR_P (link)
656 /* It's hard to make this ARM compatibility hack play nicely with
657 lambdas, and it really isn't necessary in C++11 mode. */
658 && cxx_dialect < cxx11
659 && DECL_NAME (link))
661 tree name = DECL_NAME (link);
662 cxx_binding *ob;
663 tree ns_binding;
665 ob = outer_binding (name,
666 IDENTIFIER_BINDING (name),
667 /*class_p=*/true);
668 if (!ob)
669 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
670 else
671 ns_binding = NULL_TREE;
673 if (ob && ob->scope == current_binding_level->level_chain)
674 /* We have something like:
676 int i;
677 for (int i; ;);
679 and we are leaving the `for' scope. There's no reason to
680 keep the binding of the inner `i' in this case. */
681 pop_binding (name, link);
682 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
683 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
684 /* Here, we have something like:
686 typedef int I;
688 void f () {
689 for (int I; ;);
692 We must pop the for-scope binding so we know what's a
693 type and what isn't. */
694 pop_binding (name, link);
695 else
697 /* Mark this VAR_DECL as dead so that we can tell we left it
698 there only for backward compatibility. */
699 DECL_DEAD_FOR_LOCAL (link) = 1;
701 /* Keep track of what should have happened when we
702 popped the binding. */
703 if (ob && ob->value)
705 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
706 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
709 /* Add it to the list of dead variables in the next
710 outermost binding to that we can remove these when we
711 leave that binding. */
712 vec_safe_push (
713 current_binding_level->level_chain->dead_vars_from_for,
714 link);
716 /* Although we don't pop the cxx_binding, we do clear
717 its SCOPE since the scope is going away now. */
718 IDENTIFIER_BINDING (name)->scope
719 = current_binding_level->level_chain;
722 else
724 tree name;
726 /* Remove the binding. */
727 decl = link;
729 if (TREE_CODE (decl) == TREE_LIST)
730 decl = TREE_VALUE (decl);
731 name = decl;
733 if (TREE_CODE (name) == OVERLOAD)
734 name = OVL_FUNCTION (name);
736 gcc_assert (DECL_P (name));
737 pop_binding (DECL_NAME (name), decl);
741 /* Remove declarations for any `for' variables from inner scopes
742 that we kept around. */
743 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
744 ix, decl)
745 pop_binding (DECL_NAME (decl), decl);
747 /* Restore the IDENTIFIER_TYPE_VALUEs. */
748 for (link = current_binding_level->type_shadowed;
749 link; link = TREE_CHAIN (link))
750 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
752 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
753 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
754 ix, label_bind)
755 pop_local_label (label_bind->label, label_bind->prev_value);
757 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
758 list if a `using' declaration put them there. The debugging
759 back ends won't understand OVERLOAD, so we remove them here.
760 Because the BLOCK_VARS are (temporarily) shared with
761 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
762 popped all the bindings. */
763 if (block)
765 tree* d;
767 for (d = &BLOCK_VARS (block); *d; )
769 if (TREE_CODE (*d) == TREE_LIST)
770 *d = TREE_CHAIN (*d);
771 else
772 d = &DECL_CHAIN (*d);
776 /* If the level being exited is the top level of a function,
777 check over all the labels. */
778 if (functionbody)
780 /* Since this is the top level block of a function, the vars are
781 the function's parameters. Don't leave them in the BLOCK
782 because they are found in the FUNCTION_DECL instead. */
783 BLOCK_VARS (block) = 0;
784 pop_labels (block);
787 kind = current_binding_level->kind;
788 if (kind == sk_cleanup)
790 tree stmt;
792 /* If this is a temporary binding created for a cleanup, then we'll
793 have pushed a statement list level. Pop that, create a new
794 BIND_EXPR for the block, and insert it into the stream. */
795 stmt = pop_stmt_list (current_binding_level->statement_list);
796 stmt = c_build_bind_expr (input_location, block, stmt);
797 add_stmt (stmt);
800 leave_scope ();
801 if (functionbody)
803 /* The current function is being defined, so its DECL_INITIAL
804 should be error_mark_node. */
805 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
806 DECL_INITIAL (current_function_decl) = block;
808 else if (block)
809 current_binding_level->blocks
810 = block_chainon (current_binding_level->blocks, block);
812 /* If we did not make a block for the level just exited,
813 any blocks made for inner levels
814 (since they cannot be recorded as subblocks in that level)
815 must be carried forward so they will later become subblocks
816 of something else. */
817 else if (subblocks)
818 current_binding_level->blocks
819 = block_chainon (current_binding_level->blocks, subblocks);
821 /* Each and every BLOCK node created here in `poplevel' is important
822 (e.g. for proper debugging information) so if we created one
823 earlier, mark it as "used". */
824 if (block)
825 TREE_USED (block) = 1;
827 /* All temporary bindings created for cleanups are popped silently. */
828 if (kind == sk_cleanup)
829 goto restart;
831 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
832 return block;
835 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
836 itself, calling F for each. The DATA is passed to F as well. */
838 static int
839 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
841 int result = 0;
842 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
844 result |= (*f) (name_space, data);
846 for (; current; current = DECL_CHAIN (current))
847 result |= walk_namespaces_r (current, f, data);
849 return result;
852 /* Walk all the namespaces, calling F for each. The DATA is passed to
853 F as well. */
856 walk_namespaces (walk_namespaces_fn f, void* data)
858 return walk_namespaces_r (global_namespace, f, data);
861 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
862 DATA is non-NULL, this is the last time we will call
863 wrapup_global_declarations for this NAMESPACE. */
866 wrapup_globals_for_namespace (tree name_space, void* data)
868 cp_binding_level *level = NAMESPACE_LEVEL (name_space);
869 vec<tree, va_gc> *statics = level->static_decls;
870 tree *vec = statics->address ();
871 int len = statics->length ();
872 int last_time = (data != 0);
874 if (last_time)
876 check_global_declarations (vec, len);
877 emit_debug_global_declarations (vec, len);
878 return 0;
881 /* Write out any globals that need to be output. */
882 return wrapup_global_declarations (vec, len);
886 /* In C++, you don't have to write `struct S' to refer to `S'; you
887 can just use `S'. We accomplish this by creating a TYPE_DECL as
888 if the user had written `typedef struct S S'. Create and return
889 the TYPE_DECL for TYPE. */
891 tree
892 create_implicit_typedef (tree name, tree type)
894 tree decl;
896 decl = build_decl (input_location, TYPE_DECL, name, type);
897 DECL_ARTIFICIAL (decl) = 1;
898 /* There are other implicit type declarations, like the one *within*
899 a class that allows you to write `S::S'. We must distinguish
900 amongst these. */
901 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
902 TYPE_NAME (type) = decl;
903 TYPE_STUB_DECL (type) = decl;
905 return decl;
908 /* Remember a local name for name-mangling purposes. */
910 static void
911 push_local_name (tree decl)
913 size_t i, nelts;
914 tree t, name;
916 timevar_start (TV_NAME_LOOKUP);
918 name = DECL_NAME (decl);
920 nelts = vec_safe_length (local_names);
921 for (i = 0; i < nelts; i++)
923 t = (*local_names)[i];
924 if (DECL_NAME (t) == name)
926 if (!DECL_LANG_SPECIFIC (decl))
927 retrofit_lang_decl (decl);
928 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
929 if (DECL_DISCRIMINATOR_SET_P (t))
930 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
931 else
932 DECL_DISCRIMINATOR (decl) = 1;
934 (*local_names)[i] = decl;
935 timevar_stop (TV_NAME_LOOKUP);
936 return;
940 vec_safe_push (local_names, decl);
941 timevar_stop (TV_NAME_LOOKUP);
944 /* Subroutine of duplicate_decls: return truthvalue of whether
945 or not types of these decls match.
947 For C++, we must compare the parameter list so that `int' can match
948 `int&' in a parameter position, but `int&' is not confused with
949 `const int&'. */
952 decls_match (tree newdecl, tree olddecl)
954 int types_match;
956 if (newdecl == olddecl)
957 return 1;
959 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
960 /* If the two DECLs are not even the same kind of thing, we're not
961 interested in their types. */
962 return 0;
964 gcc_assert (DECL_P (newdecl));
966 if (TREE_CODE (newdecl) == FUNCTION_DECL)
968 tree f1 = TREE_TYPE (newdecl);
969 tree f2 = TREE_TYPE (olddecl);
970 tree p1 = TYPE_ARG_TYPES (f1);
971 tree p2 = TYPE_ARG_TYPES (f2);
972 tree r2;
974 /* Specializations of different templates are different functions
975 even if they have the same type. */
976 tree t1 = (DECL_USE_TEMPLATE (newdecl)
977 ? DECL_TI_TEMPLATE (newdecl)
978 : NULL_TREE);
979 tree t2 = (DECL_USE_TEMPLATE (olddecl)
980 ? DECL_TI_TEMPLATE (olddecl)
981 : NULL_TREE);
982 if (t1 != t2)
983 return 0;
985 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
986 && ! (DECL_EXTERN_C_P (newdecl)
987 && DECL_EXTERN_C_P (olddecl)))
988 return 0;
990 /* A new declaration doesn't match a built-in one unless it
991 is also extern "C". */
992 if (DECL_IS_BUILTIN (olddecl)
993 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
994 return 0;
996 if (TREE_CODE (f1) != TREE_CODE (f2))
997 return 0;
999 /* A declaration with deduced return type should use its pre-deduction
1000 type for declaration matching. */
1001 r2 = fndecl_declared_return_type (olddecl);
1003 if (same_type_p (TREE_TYPE (f1), r2))
1005 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1006 && (DECL_BUILT_IN (olddecl)
1007 #ifndef NO_IMPLICIT_EXTERN_C
1008 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1009 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1010 #endif
1013 types_match = self_promoting_args_p (p1);
1014 if (p1 == void_list_node)
1015 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1017 #ifndef NO_IMPLICIT_EXTERN_C
1018 else if (!prototype_p (f1)
1019 && (DECL_EXTERN_C_P (olddecl)
1020 && DECL_IN_SYSTEM_HEADER (olddecl)
1021 && !DECL_CLASS_SCOPE_P (olddecl))
1022 && (DECL_EXTERN_C_P (newdecl)
1023 && DECL_IN_SYSTEM_HEADER (newdecl)
1024 && !DECL_CLASS_SCOPE_P (newdecl)))
1026 types_match = self_promoting_args_p (p2);
1027 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1029 #endif
1030 else
1031 types_match =
1032 compparms (p1, p2)
1033 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1034 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1035 || comp_type_attributes (TREE_TYPE (newdecl),
1036 TREE_TYPE (olddecl)) != 0);
1038 else
1039 types_match = 0;
1041 /* The decls dont match if they correspond to two different versions
1042 of the same function. Disallow extern "C" functions to be
1043 versions for now. */
1044 if (types_match
1045 && !DECL_EXTERN_C_P (newdecl)
1046 && !DECL_EXTERN_C_P (olddecl)
1047 && targetm.target_option.function_versions (newdecl, olddecl))
1049 /* Mark functions as versions if necessary. Modify the mangled decl
1050 name if necessary. */
1051 if (DECL_FUNCTION_VERSIONED (newdecl)
1052 && DECL_FUNCTION_VERSIONED (olddecl))
1053 return 0;
1054 if (!DECL_FUNCTION_VERSIONED (newdecl))
1056 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1057 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1058 mangle_decl (newdecl);
1060 if (!DECL_FUNCTION_VERSIONED (olddecl))
1062 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1063 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1064 mangle_decl (olddecl);
1066 record_function_versions (olddecl, newdecl);
1067 return 0;
1070 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1072 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1073 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1074 return 0;
1076 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1077 DECL_TEMPLATE_PARMS (olddecl)))
1078 return 0;
1080 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1081 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1082 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1083 else
1084 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1085 DECL_TEMPLATE_RESULT (newdecl));
1087 else
1089 /* Need to check scope for variable declaration (VAR_DECL).
1090 For typedef (TYPE_DECL), scope is ignored. */
1091 if (VAR_P (newdecl)
1092 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1093 /* [dcl.link]
1094 Two declarations for an object with C language linkage
1095 with the same name (ignoring the namespace that qualify
1096 it) that appear in different namespace scopes refer to
1097 the same object. */
1098 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1099 return 0;
1101 if (TREE_TYPE (newdecl) == error_mark_node)
1102 types_match = TREE_TYPE (olddecl) == error_mark_node;
1103 else if (TREE_TYPE (olddecl) == NULL_TREE)
1104 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1105 else if (TREE_TYPE (newdecl) == NULL_TREE)
1106 types_match = 0;
1107 else
1108 types_match = comptypes (TREE_TYPE (newdecl),
1109 TREE_TYPE (olddecl),
1110 COMPARE_REDECLARATION);
1113 return types_match;
1116 /* If NEWDECL is `static' and an `extern' was seen previously,
1117 warn about it. OLDDECL is the previous declaration.
1119 Note that this does not apply to the C++ case of declaring
1120 a variable `extern const' and then later `const'.
1122 Don't complain about built-in functions, since they are beyond
1123 the user's control. */
1125 void
1126 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1128 if (TREE_CODE (newdecl) == TYPE_DECL
1129 || TREE_CODE (newdecl) == TEMPLATE_DECL
1130 || TREE_CODE (newdecl) == CONST_DECL
1131 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1132 return;
1134 /* Don't get confused by static member functions; that's a different
1135 use of `static'. */
1136 if (TREE_CODE (newdecl) == FUNCTION_DECL
1137 && DECL_STATIC_FUNCTION_P (newdecl))
1138 return;
1140 /* If the old declaration was `static', or the new one isn't, then
1141 everything is OK. */
1142 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1143 return;
1145 /* It's OK to declare a builtin function as `static'. */
1146 if (TREE_CODE (olddecl) == FUNCTION_DECL
1147 && DECL_ARTIFICIAL (olddecl))
1148 return;
1150 if (permerror (input_location,
1151 "%qD was declared %<extern%> and later %<static%>", newdecl))
1152 inform (input_location, "previous declaration of %q+D", olddecl);
1155 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1156 function templates. If their exception specifications do not
1157 match, issue a diagnostic. */
1159 static void
1160 check_redeclaration_exception_specification (tree new_decl,
1161 tree old_decl)
1163 tree new_type;
1164 tree old_type;
1165 tree new_exceptions;
1166 tree old_exceptions;
1168 new_type = TREE_TYPE (new_decl);
1169 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1170 old_type = TREE_TYPE (old_decl);
1171 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1173 /* [except.spec]
1175 If any declaration of a function has an exception-specification,
1176 all declarations, including the definition and an explicit
1177 specialization, of that function shall have an
1178 exception-specification with the same set of type-ids. */
1179 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1180 && ! DECL_IS_BUILTIN (old_decl)
1181 && flag_exceptions
1182 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1184 error ("declaration of %qF has a different exception specifier",
1185 new_decl);
1186 error ("from previous declaration %q+F", old_decl);
1190 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1191 Otherwise issue diagnostics. */
1193 static bool
1194 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1196 old_decl = STRIP_TEMPLATE (old_decl);
1197 new_decl = STRIP_TEMPLATE (new_decl);
1198 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1199 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1200 return true;
1201 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1202 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1203 return true;
1204 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1206 if (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 /* 7.1.5 [dcl.constexpr]
1214 Note: An explicit specialization can differ from the template
1215 declaration with respect to the constexpr specifier. */
1216 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1217 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1218 return true;
1220 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1221 error ("from previous declaration %q+D", old_decl);
1222 return false;
1225 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1226 && lookup_attribute ("gnu_inline", \
1227 DECL_ATTRIBUTES (fn)))
1229 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1230 If the redeclaration is invalid, a diagnostic is issued, and the
1231 error_mark_node is returned. Otherwise, OLDDECL is returned.
1233 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1234 returned.
1236 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1238 tree
1239 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1241 unsigned olddecl_uid = DECL_UID (olddecl);
1242 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1243 int new_defines_function = 0;
1244 tree new_template_info;
1246 if (newdecl == olddecl)
1247 return olddecl;
1249 types_match = decls_match (newdecl, olddecl);
1251 /* If either the type of the new decl or the type of the old decl is an
1252 error_mark_node, then that implies that we have already issued an
1253 error (earlier) for some bogus type specification, and in that case,
1254 it is rather pointless to harass the user with yet more error message
1255 about the same declaration, so just pretend the types match here. */
1256 if (TREE_TYPE (newdecl) == error_mark_node
1257 || TREE_TYPE (olddecl) == error_mark_node)
1258 return error_mark_node;
1260 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1261 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1263 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1264 && TREE_CODE (olddecl) != TEMPLATE_DECL
1265 && check_raw_literal_operator (olddecl))
1266 error ("literal operator template %q+D conflicts with"
1267 " raw literal operator %qD", newdecl, olddecl);
1268 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1269 && TREE_CODE (olddecl) == TEMPLATE_DECL
1270 && check_raw_literal_operator (newdecl))
1271 error ("raw literal operator %q+D conflicts with"
1272 " literal operator template %qD", newdecl, olddecl);
1275 if (DECL_P (olddecl)
1276 && TREE_CODE (newdecl) == FUNCTION_DECL
1277 && TREE_CODE (olddecl) == FUNCTION_DECL
1278 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1280 if (DECL_DECLARED_INLINE_P (newdecl)
1281 && DECL_UNINLINABLE (newdecl)
1282 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1283 /* Already warned elsewhere. */;
1284 else if (DECL_DECLARED_INLINE_P (olddecl)
1285 && DECL_UNINLINABLE (olddecl)
1286 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1287 /* Already warned. */;
1288 else if (DECL_DECLARED_INLINE_P (newdecl)
1289 && DECL_UNINLINABLE (olddecl)
1290 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1292 if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1293 newdecl))
1294 inform (input_location, "previous declaration of %q+D "
1295 "with attribute noinline", olddecl);
1297 else if (DECL_DECLARED_INLINE_P (olddecl)
1298 && DECL_UNINLINABLE (newdecl)
1299 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1301 if (warning (OPT_Wattributes, "function %q+D redeclared with "
1302 "attribute noinline", newdecl))
1303 inform (input_location, "previous declaration of %q+D was inline",
1304 olddecl);
1308 /* Check for redeclaration and other discrepancies. */
1309 if (TREE_CODE (olddecl) == FUNCTION_DECL
1310 && DECL_ARTIFICIAL (olddecl))
1312 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1313 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1315 /* Avoid warnings redeclaring built-ins which have not been
1316 explicitly declared. */
1317 if (DECL_ANTICIPATED (olddecl))
1318 return NULL_TREE;
1320 /* If you declare a built-in or predefined function name as static,
1321 the old definition is overridden, but optionally warn this was a
1322 bad choice of name. */
1323 if (! TREE_PUBLIC (newdecl))
1325 warning (OPT_Wshadow,
1326 DECL_BUILT_IN (olddecl)
1327 ? G_("shadowing built-in function %q#D")
1328 : G_("shadowing library function %q#D"), olddecl);
1329 /* Discard the old built-in function. */
1330 return NULL_TREE;
1332 /* If the built-in is not ansi, then programs can override
1333 it even globally without an error. */
1334 else if (! DECL_BUILT_IN (olddecl))
1335 warning (0, "library function %q#D redeclared as non-function %q#D",
1336 olddecl, newdecl);
1337 else
1339 error ("declaration of %q#D", newdecl);
1340 error ("conflicts with built-in declaration %q#D",
1341 olddecl);
1343 return NULL_TREE;
1345 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1347 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1348 error_at (DECL_SOURCE_LOCATION (newdecl),
1349 "redeclaration of %<pragma omp declare reduction%>");
1350 error_at (DECL_SOURCE_LOCATION (olddecl),
1351 "previous %<pragma omp declare reduction%> declaration");
1352 return error_mark_node;
1354 else if (!types_match)
1356 /* Avoid warnings redeclaring built-ins which have not been
1357 explicitly declared. */
1358 if (DECL_ANTICIPATED (olddecl))
1360 /* Deal with fileptr_type_node. FILE type is not known
1361 at the time we create the builtins. */
1362 tree t1, t2;
1364 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1365 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1366 t1 || t2;
1367 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1368 if (!t1 || !t2)
1369 break;
1370 else if (TREE_VALUE (t2) == fileptr_type_node)
1372 tree t = TREE_VALUE (t1);
1374 if (TYPE_PTR_P (t)
1375 && TYPE_NAME (TREE_TYPE (t))
1376 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1377 == get_identifier ("FILE")
1378 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1380 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1382 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1383 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1384 types_match = decls_match (newdecl, olddecl);
1385 if (types_match)
1386 return duplicate_decls (newdecl, olddecl,
1387 newdecl_is_friend);
1388 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1391 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1392 break;
1394 else if ((DECL_EXTERN_C_P (newdecl)
1395 && DECL_EXTERN_C_P (olddecl))
1396 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1397 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1399 /* A near match; override the builtin. */
1401 if (TREE_PUBLIC (newdecl))
1403 warning (0, "new declaration %q#D", newdecl);
1404 warning (0, "ambiguates built-in declaration %q#D",
1405 olddecl);
1407 else
1408 warning (OPT_Wshadow,
1409 DECL_BUILT_IN (olddecl)
1410 ? G_("shadowing built-in function %q#D")
1411 : G_("shadowing library function %q#D"), olddecl);
1413 else
1414 /* Discard the old built-in function. */
1415 return NULL_TREE;
1417 /* Replace the old RTL to avoid problems with inlining. */
1418 COPY_DECL_RTL (newdecl, olddecl);
1420 /* Even if the types match, prefer the new declarations type for
1421 built-ins which have not been explicitly declared, for
1422 exception lists, etc... */
1423 else if (DECL_IS_BUILTIN (olddecl))
1425 tree type = TREE_TYPE (newdecl);
1426 tree attribs = (*targetm.merge_type_attributes)
1427 (TREE_TYPE (olddecl), type);
1429 type = cp_build_type_attribute_variant (type, attribs);
1430 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1433 /* If a function is explicitly declared "throw ()", propagate that to
1434 the corresponding builtin. */
1435 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1436 && DECL_ANTICIPATED (olddecl)
1437 && TREE_NOTHROW (newdecl)
1438 && !TREE_NOTHROW (olddecl))
1440 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1441 tree tmpdecl = builtin_decl_explicit (fncode);
1442 if (tmpdecl && tmpdecl != olddecl && types_match)
1443 TREE_NOTHROW (tmpdecl) = 1;
1446 /* Whether or not the builtin can throw exceptions has no
1447 bearing on this declarator. */
1448 TREE_NOTHROW (olddecl) = 0;
1450 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1452 /* If a builtin function is redeclared as `static', merge
1453 the declarations, but make the original one static. */
1454 DECL_THIS_STATIC (olddecl) = 1;
1455 TREE_PUBLIC (olddecl) = 0;
1457 /* Make the old declaration consistent with the new one so
1458 that all remnants of the builtin-ness of this function
1459 will be banished. */
1460 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1461 COPY_DECL_RTL (newdecl, olddecl);
1464 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1466 /* C++ Standard, 3.3, clause 4:
1467 "[Note: a namespace name or a class template name must be unique
1468 in its declarative region (7.3.2, clause 14). ]" */
1469 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1470 && TREE_CODE (newdecl) != NAMESPACE_DECL
1471 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1472 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1473 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1474 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1476 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1477 && TREE_CODE (newdecl) != TYPE_DECL)
1478 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1479 && TREE_CODE (olddecl) != TYPE_DECL))
1481 /* We do nothing special here, because C++ does such nasty
1482 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1483 get shadowed, and know that if we need to find a TYPE_DECL
1484 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1485 slot of the identifier. */
1486 return NULL_TREE;
1489 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1490 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1491 || (TREE_CODE (olddecl) == FUNCTION_DECL
1492 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1493 return NULL_TREE;
1496 error ("%q#D redeclared as different kind of symbol", newdecl);
1497 if (TREE_CODE (olddecl) == TREE_LIST)
1498 olddecl = TREE_VALUE (olddecl);
1499 inform (input_location, "previous declaration of %q+#D", olddecl);
1501 return error_mark_node;
1503 else if (!types_match)
1505 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1506 /* These are certainly not duplicate declarations; they're
1507 from different scopes. */
1508 return NULL_TREE;
1510 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1512 /* The name of a class template may not be declared to refer to
1513 any other template, class, function, object, namespace, value,
1514 or type in the same scope. */
1515 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1516 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1518 error ("declaration of template %q#D", newdecl);
1519 error ("conflicts with previous declaration %q+#D", olddecl);
1520 return error_mark_node;
1522 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1523 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1524 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1525 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1526 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1527 DECL_TEMPLATE_PARMS (olddecl))
1528 /* Template functions can be disambiguated by
1529 return type. */
1530 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1531 TREE_TYPE (TREE_TYPE (olddecl))))
1533 error ("new declaration %q#D", newdecl);
1534 error ("ambiguates old declaration %q+#D", olddecl);
1536 return NULL_TREE;
1538 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1540 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1542 error ("declaration of C function %q#D conflicts with",
1543 newdecl);
1544 error ("previous declaration %q+#D here", olddecl);
1545 return NULL_TREE;
1547 /* For function versions, params and types match, but they
1548 are not ambiguous. */
1549 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1550 && !DECL_FUNCTION_VERSIONED (olddecl))
1551 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1552 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1554 error ("new declaration %q#D", newdecl);
1555 error ("ambiguates old declaration %q+#D", olddecl);
1556 return error_mark_node;
1558 else
1559 return NULL_TREE;
1561 else
1563 error ("conflicting declaration %q#D", newdecl);
1564 inform (input_location,
1565 "%q+D has a previous declaration as %q#D", olddecl, olddecl);
1566 return error_mark_node;
1569 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1570 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1571 && (!DECL_TEMPLATE_INFO (newdecl)
1572 || (DECL_TI_TEMPLATE (newdecl)
1573 != DECL_TI_TEMPLATE (olddecl))))
1574 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1575 && (!DECL_TEMPLATE_INFO (olddecl)
1576 || (DECL_TI_TEMPLATE (olddecl)
1577 != DECL_TI_TEMPLATE (newdecl))))))
1578 /* It's OK to have a template specialization and a non-template
1579 with the same type, or to have specializations of two
1580 different templates with the same type. Note that if one is a
1581 specialization, and the other is an instantiation of the same
1582 template, that we do not exit at this point. That situation
1583 can occur if we instantiate a template class, and then
1584 specialize one of its methods. This situation is valid, but
1585 the declarations must be merged in the usual way. */
1586 return NULL_TREE;
1587 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1588 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1589 && !DECL_USE_TEMPLATE (newdecl))
1590 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1591 && !DECL_USE_TEMPLATE (olddecl))))
1592 /* One of the declarations is a template instantiation, and the
1593 other is not a template at all. That's OK. */
1594 return NULL_TREE;
1595 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1597 /* In [namespace.alias] we have:
1599 In a declarative region, a namespace-alias-definition can be
1600 used to redefine a namespace-alias declared in that declarative
1601 region to refer only to the namespace to which it already
1602 refers.
1604 Therefore, if we encounter a second alias directive for the same
1605 alias, we can just ignore the second directive. */
1606 if (DECL_NAMESPACE_ALIAS (newdecl)
1607 && (DECL_NAMESPACE_ALIAS (newdecl)
1608 == DECL_NAMESPACE_ALIAS (olddecl)))
1609 return olddecl;
1610 /* [namespace.alias]
1612 A namespace-name or namespace-alias shall not be declared as
1613 the name of any other entity in the same declarative region.
1614 A namespace-name defined at global scope shall not be
1615 declared as the name of any other entity in any global scope
1616 of the program. */
1617 error ("declaration of namespace %qD conflicts with", newdecl);
1618 error ("previous declaration of namespace %q+D here", olddecl);
1619 return error_mark_node;
1621 else
1623 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1624 if (errmsg)
1626 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1627 if (DECL_NAME (olddecl) != NULL_TREE)
1628 inform (input_location,
1629 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1630 ? G_("%q+#D previously defined here")
1631 : G_("%q+#D previously declared here"), olddecl);
1632 return error_mark_node;
1634 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1635 && DECL_INITIAL (olddecl) != NULL_TREE
1636 && !prototype_p (TREE_TYPE (olddecl))
1637 && prototype_p (TREE_TYPE (newdecl)))
1639 /* Prototype decl follows defn w/o prototype. */
1640 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1641 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1642 "follows non-prototype definition here");
1644 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1645 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1647 /* [dcl.link]
1648 If two declarations of the same function or object
1649 specify different linkage-specifications ..., the program
1650 is ill-formed.... Except for functions with C++ linkage,
1651 a function declaration without a linkage specification
1652 shall not precede the first linkage specification for
1653 that function. A function can be declared without a
1654 linkage specification after an explicit linkage
1655 specification has been seen; the linkage explicitly
1656 specified in the earlier declaration is not affected by
1657 such a function declaration.
1659 DR 563 raises the question why the restrictions on
1660 functions should not also apply to objects. Older
1661 versions of G++ silently ignore the linkage-specification
1662 for this example:
1664 namespace N {
1665 extern int i;
1666 extern "C" int i;
1669 which is clearly wrong. Therefore, we now treat objects
1670 like functions. */
1671 if (current_lang_depth () == 0)
1673 /* There is no explicit linkage-specification, so we use
1674 the linkage from the previous declaration. */
1675 if (!DECL_LANG_SPECIFIC (newdecl))
1676 retrofit_lang_decl (newdecl);
1677 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1679 else
1681 error ("previous declaration of %q+#D with %qL linkage",
1682 olddecl, DECL_LANGUAGE (olddecl));
1683 error ("conflicts with new declaration with %qL linkage",
1684 DECL_LANGUAGE (newdecl));
1688 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1690 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1692 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1693 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1694 int i = 1;
1696 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1697 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1699 for (; t1 && t1 != void_list_node;
1700 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1701 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1703 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1704 TREE_PURPOSE (t2)))
1706 permerror (input_location, "default argument given for parameter %d of %q#D",
1707 i, newdecl);
1708 permerror (input_location, "after previous specification in %q+#D", olddecl);
1710 else
1712 error ("default argument given for parameter %d of %q#D",
1713 i, newdecl);
1714 error ("after previous specification in %q+#D",
1715 olddecl);
1721 /* Do not merge an implicit typedef with an explicit one. In:
1723 class A;
1725 typedef class A A __attribute__ ((foo));
1727 the attribute should apply only to the typedef. */
1728 if (TREE_CODE (olddecl) == TYPE_DECL
1729 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1730 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1731 return NULL_TREE;
1733 /* If new decl is `static' and an `extern' was seen previously,
1734 warn about it. */
1735 warn_extern_redeclared_static (newdecl, olddecl);
1737 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1738 return error_mark_node;
1740 /* We have committed to returning 1 at this point. */
1741 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1743 /* Now that functions must hold information normally held
1744 by field decls, there is extra work to do so that
1745 declaration information does not get destroyed during
1746 definition. */
1747 if (DECL_VINDEX (olddecl))
1748 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1749 if (DECL_CONTEXT (olddecl))
1750 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1751 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1752 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1753 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1754 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1755 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1756 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1757 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1758 SET_OVERLOADED_OPERATOR_CODE
1759 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1760 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1762 /* Optionally warn about more than one declaration for the same
1763 name, but don't warn about a function declaration followed by a
1764 definition. */
1765 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1766 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1767 /* Don't warn about extern decl followed by definition. */
1768 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1769 /* Don't warn about friends, let add_friend take care of it. */
1770 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1771 /* Don't warn about declaration followed by specialization. */
1772 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1773 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1775 if (warning (OPT_Wredundant_decls,
1776 "redundant redeclaration of %qD in same scope",
1777 newdecl))
1778 inform (input_location, "previous declaration of %q+D", olddecl);
1781 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1782 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1784 if (DECL_DELETED_FN (newdecl))
1786 error ("deleted definition of %qD", newdecl);
1787 error ("after previous declaration %q+D", olddecl);
1789 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1793 /* Deal with C++: must preserve virtual function table size. */
1794 if (TREE_CODE (olddecl) == TYPE_DECL)
1796 tree newtype = TREE_TYPE (newdecl);
1797 tree oldtype = TREE_TYPE (olddecl);
1799 if (newtype != error_mark_node && oldtype != error_mark_node
1800 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1801 CLASSTYPE_FRIEND_CLASSES (newtype)
1802 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1804 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1807 /* Copy all the DECL_... slots specified in the new decl
1808 except for any that we copy here from the old type. */
1809 DECL_ATTRIBUTES (newdecl)
1810 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1812 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1814 tree old_result;
1815 tree new_result;
1816 old_result = DECL_TEMPLATE_RESULT (olddecl);
1817 new_result = DECL_TEMPLATE_RESULT (newdecl);
1818 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1819 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1820 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1821 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1823 DECL_ATTRIBUTES (old_result)
1824 = (*targetm.merge_decl_attributes) (old_result, new_result);
1826 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1828 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1829 && DECL_INITIAL (new_result))
1831 if (DECL_INITIAL (old_result))
1832 DECL_UNINLINABLE (old_result) = 1;
1833 else
1834 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1835 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1836 DECL_NOT_REALLY_EXTERN (old_result)
1837 = DECL_NOT_REALLY_EXTERN (new_result);
1838 DECL_INTERFACE_KNOWN (old_result)
1839 = DECL_INTERFACE_KNOWN (new_result);
1840 DECL_DECLARED_INLINE_P (old_result)
1841 = DECL_DECLARED_INLINE_P (new_result);
1842 DECL_DISREGARD_INLINE_LIMITS (old_result)
1843 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1846 else
1848 DECL_DECLARED_INLINE_P (old_result)
1849 |= DECL_DECLARED_INLINE_P (new_result);
1850 DECL_DISREGARD_INLINE_LIMITS (old_result)
1851 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1852 check_redeclaration_exception_specification (newdecl, olddecl);
1856 /* If the new declaration is a definition, update the file and
1857 line information on the declaration, and also make
1858 the old declaration the same definition. */
1859 if (DECL_INITIAL (new_result) != NULL_TREE)
1861 DECL_SOURCE_LOCATION (olddecl)
1862 = DECL_SOURCE_LOCATION (old_result)
1863 = DECL_SOURCE_LOCATION (newdecl);
1864 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1865 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1867 tree parm;
1868 DECL_ARGUMENTS (old_result)
1869 = DECL_ARGUMENTS (new_result);
1870 for (parm = DECL_ARGUMENTS (old_result); parm;
1871 parm = DECL_CHAIN (parm))
1872 DECL_CONTEXT (parm) = old_result;
1876 return olddecl;
1879 if (types_match)
1881 /* Automatically handles default parameters. */
1882 tree oldtype = TREE_TYPE (olddecl);
1883 tree newtype;
1885 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1886 maybe_instantiate_noexcept (olddecl);
1888 /* Merge the data types specified in the two decls. */
1889 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1891 /* If merge_types produces a non-typedef type, just use the old type. */
1892 if (TREE_CODE (newdecl) == TYPE_DECL
1893 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1894 newtype = oldtype;
1896 if (VAR_P (newdecl))
1898 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1899 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1900 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1901 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1902 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1903 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1905 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1906 if (DECL_LANG_SPECIFIC (olddecl)
1907 && CP_DECL_THREADPRIVATE_P (olddecl))
1909 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1910 if (!DECL_LANG_SPECIFIC (newdecl))
1911 retrofit_lang_decl (newdecl);
1913 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1914 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1918 /* Do this after calling `merge_types' so that default
1919 parameters don't confuse us. */
1920 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1921 check_redeclaration_exception_specification (newdecl, olddecl);
1922 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1924 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1925 check_default_args (newdecl);
1927 /* Lay the type out, unless already done. */
1928 if (! same_type_p (newtype, oldtype)
1929 && TREE_TYPE (newdecl) != error_mark_node
1930 && !(processing_template_decl && uses_template_parms (newdecl)))
1931 layout_type (TREE_TYPE (newdecl));
1933 if ((VAR_P (newdecl)
1934 || TREE_CODE (newdecl) == PARM_DECL
1935 || TREE_CODE (newdecl) == RESULT_DECL
1936 || TREE_CODE (newdecl) == FIELD_DECL
1937 || TREE_CODE (newdecl) == TYPE_DECL)
1938 && !(processing_template_decl && uses_template_parms (newdecl)))
1939 layout_decl (newdecl, 0);
1941 /* Merge the type qualifiers. */
1942 if (TREE_READONLY (newdecl))
1943 TREE_READONLY (olddecl) = 1;
1944 if (TREE_THIS_VOLATILE (newdecl))
1945 TREE_THIS_VOLATILE (olddecl) = 1;
1946 if (TREE_NOTHROW (newdecl))
1947 TREE_NOTHROW (olddecl) = 1;
1949 /* Merge deprecatedness. */
1950 if (TREE_DEPRECATED (newdecl))
1951 TREE_DEPRECATED (olddecl) = 1;
1953 /* Preserve function specific target and optimization options */
1954 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1956 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1957 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1958 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1959 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1961 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1962 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1963 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1964 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1967 /* Merge the initialization information. */
1968 if (DECL_INITIAL (newdecl) == NULL_TREE
1969 && DECL_INITIAL (olddecl) != NULL_TREE)
1971 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1972 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1973 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1975 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1976 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1980 /* Merge the section attribute.
1981 We want to issue an error if the sections conflict but that must be
1982 done later in decl_attributes since we are called before attributes
1983 are assigned. */
1984 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1985 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1987 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1989 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1990 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1991 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1992 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1993 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1994 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1995 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1996 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1997 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1998 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1999 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2000 /* Keep the old RTL. */
2001 COPY_DECL_RTL (olddecl, newdecl);
2003 else if (VAR_P (newdecl)
2004 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2006 /* Keep the old RTL. We cannot keep the old RTL if the old
2007 declaration was for an incomplete object and the new
2008 declaration is not since many attributes of the RTL will
2009 change. */
2010 COPY_DECL_RTL (olddecl, newdecl);
2013 /* If cannot merge, then use the new type and qualifiers,
2014 and don't preserve the old rtl. */
2015 else
2017 /* Clean out any memory we had of the old declaration. */
2018 tree oldstatic = value_member (olddecl, static_aggregates);
2019 if (oldstatic)
2020 TREE_VALUE (oldstatic) = error_mark_node;
2022 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2023 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2024 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2025 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2028 /* Merge the storage class information. */
2029 merge_weak (newdecl, olddecl);
2031 if (DECL_ONE_ONLY (olddecl))
2032 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
2034 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2035 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2036 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2037 if (! DECL_EXTERNAL (olddecl))
2038 DECL_EXTERNAL (newdecl) = 0;
2040 new_template_info = NULL_TREE;
2041 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2043 bool new_redefines_gnu_inline = false;
2045 if (new_defines_function
2046 && ((DECL_INTERFACE_KNOWN (olddecl)
2047 && TREE_CODE (olddecl) == FUNCTION_DECL)
2048 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2049 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2050 == FUNCTION_DECL))))
2052 tree fn = olddecl;
2054 if (TREE_CODE (fn) == TEMPLATE_DECL)
2055 fn = DECL_TEMPLATE_RESULT (olddecl);
2057 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2060 if (!new_redefines_gnu_inline)
2062 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2063 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2064 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2066 DECL_TEMPLATE_INSTANTIATED (newdecl)
2067 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2068 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2070 /* If the OLDDECL is an instantiation and/or specialization,
2071 then the NEWDECL must be too. But, it may not yet be marked
2072 as such if the caller has created NEWDECL, but has not yet
2073 figured out that it is a redeclaration. */
2074 if (!DECL_USE_TEMPLATE (newdecl))
2075 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2077 /* Don't really know how much of the language-specific
2078 values we should copy from old to new. */
2079 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2080 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2081 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2082 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2084 if (LANG_DECL_HAS_MIN (newdecl))
2086 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2087 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2088 if (DECL_TEMPLATE_INFO (newdecl))
2089 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2090 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2092 /* Only functions have these fields. */
2093 if (DECL_DECLARES_FUNCTION_P (newdecl))
2095 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2096 olddecl_friend = DECL_FRIEND_P (olddecl);
2097 hidden_friend = (DECL_ANTICIPATED (olddecl)
2098 && DECL_HIDDEN_FRIEND_P (olddecl)
2099 && newdecl_is_friend);
2100 DECL_BEFRIENDING_CLASSES (newdecl)
2101 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2102 DECL_BEFRIENDING_CLASSES (olddecl));
2103 /* DECL_THUNKS is only valid for virtual functions,
2104 otherwise it is a DECL_FRIEND_CONTEXT. */
2105 if (DECL_VIRTUAL_P (newdecl))
2106 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2108 /* Only variables have this field. */
2109 else if (VAR_P (newdecl)
2110 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2111 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2114 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2116 tree parm;
2118 /* Merge parameter attributes. */
2119 tree oldarg, newarg;
2120 for (oldarg = DECL_ARGUMENTS(olddecl),
2121 newarg = DECL_ARGUMENTS(newdecl);
2122 oldarg && newarg;
2123 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2124 DECL_ATTRIBUTES (newarg)
2125 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2126 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2129 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2130 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2132 /* If newdecl is not a specialization, then it is not a
2133 template-related function at all. And that means that we
2134 should have exited above, returning 0. */
2135 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2137 if (DECL_ODR_USED (olddecl))
2138 /* From [temp.expl.spec]:
2140 If a template, a member template or the member of a class
2141 template is explicitly specialized then that
2142 specialization shall be declared before the first use of
2143 that specialization that would cause an implicit
2144 instantiation to take place, in every translation unit in
2145 which such a use occurs. */
2146 error ("explicit specialization of %qD after first use",
2147 olddecl);
2149 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2151 /* Don't propagate visibility from the template to the
2152 specialization here. We'll do that in determine_visibility if
2153 appropriate. */
2154 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2156 /* [temp.expl.spec/14] We don't inline explicit specialization
2157 just because the primary template says so. */
2159 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2160 the always_inline attribute. */
2161 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2162 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2164 if (DECL_DECLARED_INLINE_P (newdecl))
2165 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2166 else
2167 DECL_ATTRIBUTES (newdecl)
2168 = remove_attribute ("always_inline",
2169 DECL_ATTRIBUTES (newdecl));
2172 else if (new_defines_function && DECL_INITIAL (olddecl))
2174 /* Never inline re-defined extern inline functions.
2175 FIXME: this could be better handled by keeping both
2176 function as separate declarations. */
2177 DECL_UNINLINABLE (newdecl) = 1;
2179 else
2181 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2182 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2184 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2186 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2187 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2189 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2190 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2191 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2192 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2195 /* Preserve abstractness on cloned [cd]tors. */
2196 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2198 /* Update newdecl's parms to point at olddecl. */
2199 for (parm = DECL_ARGUMENTS (newdecl); parm;
2200 parm = DECL_CHAIN (parm))
2201 DECL_CONTEXT (parm) = olddecl;
2203 if (! types_match)
2205 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2206 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2207 COPY_DECL_RTL (newdecl, olddecl);
2209 if (! types_match || new_defines_function)
2211 /* These need to be copied so that the names are available.
2212 Note that if the types do match, we'll preserve inline
2213 info and other bits, but if not, we won't. */
2214 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2215 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2217 /* If redeclaring a builtin function, it stays built in
2218 if newdecl is a gnu_inline definition, or if newdecl is just
2219 a declaration. */
2220 if (DECL_BUILT_IN (olddecl)
2221 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2223 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2224 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2225 /* If we're keeping the built-in definition, keep the rtl,
2226 regardless of declaration matches. */
2227 COPY_DECL_RTL (olddecl, newdecl);
2228 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2230 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2231 switch (fncode)
2233 /* If a compatible prototype of these builtin functions
2234 is seen, assume the runtime implements it with the
2235 expected semantics. */
2236 case BUILT_IN_STPCPY:
2237 if (builtin_decl_explicit_p (fncode))
2238 set_builtin_decl_implicit_p (fncode, true);
2239 break;
2240 default:
2241 break;
2245 if (new_defines_function)
2246 /* If defining a function declared with other language
2247 linkage, use the previously declared language linkage. */
2248 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2249 else if (types_match)
2251 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2252 /* Don't clear out the arguments if we're just redeclaring a
2253 function. */
2254 if (DECL_ARGUMENTS (olddecl))
2255 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2258 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2259 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2261 /* Now preserve various other info from the definition. */
2262 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2263 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2264 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2265 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2267 /* Warn about conflicting visibility specifications. */
2268 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2269 && DECL_VISIBILITY_SPECIFIED (newdecl)
2270 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2272 warning_at (input_location, OPT_Wattributes,
2273 "%q+D: visibility attribute ignored because it", newdecl);
2274 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2275 "conflicts with previous declaration here");
2277 /* Choose the declaration which specified visibility. */
2278 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2280 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2281 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2283 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2284 so keep this behavior. */
2285 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2287 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2288 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2290 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2291 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2293 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2294 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2296 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2297 if (TREE_CODE (newdecl) == FIELD_DECL)
2298 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2300 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2301 with that from NEWDECL below. */
2302 if (DECL_LANG_SPECIFIC (olddecl))
2304 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2305 != DECL_LANG_SPECIFIC (newdecl));
2306 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2309 /* Merge the USED information. */
2310 if (TREE_USED (olddecl))
2311 TREE_USED (newdecl) = 1;
2312 else if (TREE_USED (newdecl))
2313 TREE_USED (olddecl) = 1;
2314 if (VAR_P (newdecl))
2316 if (DECL_READ_P (olddecl))
2317 DECL_READ_P (newdecl) = 1;
2318 else if (DECL_READ_P (newdecl))
2319 DECL_READ_P (olddecl) = 1;
2321 if (DECL_PRESERVE_P (olddecl))
2322 DECL_PRESERVE_P (newdecl) = 1;
2323 else if (DECL_PRESERVE_P (newdecl))
2324 DECL_PRESERVE_P (olddecl) = 1;
2326 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2327 to olddecl and deleted. */
2328 if (TREE_CODE (newdecl) == FUNCTION_DECL
2329 && DECL_FUNCTION_VERSIONED (olddecl))
2331 /* Set the flag for newdecl so that it gets copied to olddecl. */
2332 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2333 /* newdecl will be purged after copying to olddecl and is no longer
2334 a version. */
2335 delete_function_version (newdecl);
2338 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2340 int function_size;
2342 function_size = sizeof (struct tree_decl_common);
2344 memcpy ((char *) olddecl + sizeof (struct tree_common),
2345 (char *) newdecl + sizeof (struct tree_common),
2346 function_size - sizeof (struct tree_common));
2348 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2349 (char *) newdecl + sizeof (struct tree_decl_common),
2350 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2351 if (new_template_info)
2352 /* If newdecl is a template instantiation, it is possible that
2353 the following sequence of events has occurred:
2355 o A friend function was declared in a class template. The
2356 class template was instantiated.
2358 o The instantiation of the friend declaration was
2359 recorded on the instantiation list, and is newdecl.
2361 o Later, however, instantiate_class_template called pushdecl
2362 on the newdecl to perform name injection. But, pushdecl in
2363 turn called duplicate_decls when it discovered that another
2364 declaration of a global function with the same name already
2365 existed.
2367 o Here, in duplicate_decls, we decided to clobber newdecl.
2369 If we're going to do that, we'd better make sure that
2370 olddecl, and not newdecl, is on the list of
2371 instantiations so that if we try to do the instantiation
2372 again we won't get the clobbered declaration. */
2373 reregister_specialization (newdecl,
2374 new_template_info,
2375 olddecl);
2377 else
2379 size_t size = tree_code_size (TREE_CODE (olddecl));
2380 memcpy ((char *) olddecl + sizeof (struct tree_common),
2381 (char *) newdecl + sizeof (struct tree_common),
2382 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2383 switch (TREE_CODE (olddecl))
2385 case LABEL_DECL:
2386 case VAR_DECL:
2387 case RESULT_DECL:
2388 case PARM_DECL:
2389 case FIELD_DECL:
2390 case TYPE_DECL:
2391 case CONST_DECL:
2393 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2394 (char *) newdecl + sizeof (struct tree_decl_common),
2395 size - sizeof (struct tree_decl_common)
2396 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2398 break;
2399 default:
2400 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2401 (char *) newdecl + sizeof (struct tree_decl_common),
2402 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2403 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2404 break;
2407 DECL_UID (olddecl) = olddecl_uid;
2408 if (olddecl_friend)
2409 DECL_FRIEND_P (olddecl) = 1;
2410 if (hidden_friend)
2412 DECL_ANTICIPATED (olddecl) = 1;
2413 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2416 /* NEWDECL contains the merged attribute lists.
2417 Update OLDDECL to be the same. */
2418 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2420 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2421 so that encode_section_info has a chance to look at the new decl
2422 flags and attributes. */
2423 if (DECL_RTL_SET_P (olddecl)
2424 && (TREE_CODE (olddecl) == FUNCTION_DECL
2425 || (VAR_P (olddecl)
2426 && TREE_STATIC (olddecl))))
2427 make_decl_rtl (olddecl);
2429 /* The NEWDECL will no longer be needed. Because every out-of-class
2430 declaration of a member results in a call to duplicate_decls,
2431 freeing these nodes represents in a significant savings. */
2432 ggc_free (newdecl);
2434 return olddecl;
2437 /* Return zero if the declaration NEWDECL is valid
2438 when the declaration OLDDECL (assumed to be for the same name)
2439 has already been seen.
2440 Otherwise return an error message format string with a %s
2441 where the identifier should go. */
2443 static const char *
2444 redeclaration_error_message (tree newdecl, tree olddecl)
2446 if (TREE_CODE (newdecl) == TYPE_DECL)
2448 /* Because C++ can put things into name space for free,
2449 constructs like "typedef struct foo { ... } foo"
2450 would look like an erroneous redeclaration. */
2451 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2452 return NULL;
2453 else
2454 return G_("redefinition of %q#D");
2456 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2458 /* If this is a pure function, its olddecl will actually be
2459 the original initialization to `0' (which we force to call
2460 abort()). Don't complain about redefinition in this case. */
2461 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2462 && DECL_INITIAL (olddecl) == NULL_TREE)
2463 return NULL;
2465 /* If both functions come from different namespaces, this is not
2466 a redeclaration - this is a conflict with a used function. */
2467 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2468 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2469 && ! decls_match (olddecl, newdecl))
2470 return G_("%qD conflicts with used function");
2472 /* We'll complain about linkage mismatches in
2473 warn_extern_redeclared_static. */
2475 /* Defining the same name twice is no good. */
2476 if (DECL_INITIAL (olddecl) != NULL_TREE
2477 && DECL_INITIAL (newdecl) != NULL_TREE)
2479 if (DECL_NAME (olddecl) == NULL_TREE)
2480 return G_("%q#D not declared in class");
2481 else if (!GNU_INLINE_P (olddecl)
2482 || GNU_INLINE_P (newdecl))
2483 return G_("redefinition of %q#D");
2486 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2488 bool olda = GNU_INLINE_P (olddecl);
2489 bool newa = GNU_INLINE_P (newdecl);
2491 if (olda != newa)
2493 if (newa)
2494 return G_("%q+D redeclared inline with "
2495 "%<gnu_inline%> attribute");
2496 else
2497 return G_("%q+D redeclared inline without "
2498 "%<gnu_inline%> attribute");
2502 check_abi_tag_redeclaration
2503 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2504 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2506 return NULL;
2508 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2510 tree nt, ot;
2512 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2514 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2515 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2516 return G_("redefinition of %q#D");
2517 return NULL;
2520 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2521 || (DECL_TEMPLATE_RESULT (newdecl)
2522 == DECL_TEMPLATE_RESULT (olddecl)))
2523 return NULL;
2525 nt = DECL_TEMPLATE_RESULT (newdecl);
2526 if (DECL_TEMPLATE_INFO (nt))
2527 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2528 ot = DECL_TEMPLATE_RESULT (olddecl);
2529 if (DECL_TEMPLATE_INFO (ot))
2530 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2531 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2532 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2533 return G_("redefinition of %q#D");
2535 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2537 bool olda = GNU_INLINE_P (ot);
2538 bool newa = GNU_INLINE_P (nt);
2540 if (olda != newa)
2542 if (newa)
2543 return G_("%q+D redeclared inline with "
2544 "%<gnu_inline%> attribute");
2545 else
2546 return G_("%q+D redeclared inline without "
2547 "%<gnu_inline%> attribute");
2551 /* Core issue #226 (C++0x):
2553 If a friend function template declaration specifies a
2554 default template-argument, that declaration shall be a
2555 definition and shall be the only declaration of the
2556 function template in the translation unit. */
2557 if ((cxx_dialect != cxx98)
2558 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2559 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2560 /*is_primary=*/true,
2561 /*is_partial=*/false,
2562 /*is_friend_decl=*/2))
2563 return G_("redeclaration of friend %q#D "
2564 "may not have default template arguments");
2566 return NULL;
2568 else if (VAR_P (newdecl)
2569 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2570 && (! DECL_LANG_SPECIFIC (olddecl)
2571 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2572 || DECL_THREAD_LOCAL_P (newdecl)))
2574 /* Only variables can be thread-local, and all declarations must
2575 agree on this property. */
2576 if (DECL_THREAD_LOCAL_P (newdecl))
2577 return G_("thread-local declaration of %q#D follows "
2578 "non-thread-local declaration");
2579 else
2580 return G_("non-thread-local declaration of %q#D follows "
2581 "thread-local declaration");
2583 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2585 /* The objects have been declared at namespace scope. If either
2586 is a member of an anonymous union, then this is an invalid
2587 redeclaration. For example:
2589 int i;
2590 union { int i; };
2592 is invalid. */
2593 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2594 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2595 return G_("redeclaration of %q#D");
2596 /* If at least one declaration is a reference, there is no
2597 conflict. For example:
2599 int i = 3;
2600 extern int i;
2602 is valid. */
2603 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2604 return NULL;
2605 /* Reject two definitions. */
2606 return G_("redefinition of %q#D");
2608 else
2610 /* Objects declared with block scope: */
2611 /* Reject two definitions, and reject a definition
2612 together with an external reference. */
2613 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2614 return G_("redeclaration of %q#D");
2615 return NULL;
2619 /* Hash and equality functions for the named_label table. */
2621 static hashval_t
2622 named_label_entry_hash (const void *data)
2624 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2625 return DECL_UID (ent->label_decl);
2628 static int
2629 named_label_entry_eq (const void *a, const void *b)
2631 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2632 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2633 return ent_a->label_decl == ent_b->label_decl;
2636 /* Create a new label, named ID. */
2638 static tree
2639 make_label_decl (tree id, int local_p)
2641 struct named_label_entry *ent;
2642 void **slot;
2643 tree decl;
2645 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2647 DECL_CONTEXT (decl) = current_function_decl;
2648 DECL_MODE (decl) = VOIDmode;
2649 C_DECLARED_LABEL_FLAG (decl) = local_p;
2651 /* Say where one reference is to the label, for the sake of the
2652 error if it is not defined. */
2653 DECL_SOURCE_LOCATION (decl) = input_location;
2655 /* Record the fact that this identifier is bound to this label. */
2656 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2658 /* Create the label htab for the function on demand. */
2659 if (!named_labels)
2660 named_labels = htab_create_ggc (13, named_label_entry_hash,
2661 named_label_entry_eq, NULL);
2663 /* Record this label on the list of labels used in this function.
2664 We do this before calling make_label_decl so that we get the
2665 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2666 ent = ggc_alloc_cleared_named_label_entry ();
2667 ent->label_decl = decl;
2669 slot = htab_find_slot (named_labels, ent, INSERT);
2670 gcc_assert (*slot == NULL);
2671 *slot = ent;
2673 return decl;
2676 /* Look for a label named ID in the current function. If one cannot
2677 be found, create one. (We keep track of used, but undefined,
2678 labels, and complain about them at the end of a function.) */
2680 static tree
2681 lookup_label_1 (tree id)
2683 tree decl;
2685 /* You can't use labels at global scope. */
2686 if (current_function_decl == NULL_TREE)
2688 error ("label %qE referenced outside of any function", id);
2689 return NULL_TREE;
2692 /* See if we've already got this label. */
2693 decl = IDENTIFIER_LABEL_VALUE (id);
2694 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2695 return decl;
2697 decl = make_label_decl (id, /*local_p=*/0);
2698 return decl;
2701 /* Wrapper for lookup_label_1. */
2703 tree
2704 lookup_label (tree id)
2706 tree ret;
2707 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2708 ret = lookup_label_1 (id);
2709 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2710 return ret;
2713 /* Declare a local label named ID. */
2715 tree
2716 declare_local_label (tree id)
2718 tree decl;
2719 cp_label_binding bind;
2721 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2722 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2723 bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2725 decl = make_label_decl (id, /*local_p=*/1);
2726 bind.label = decl;
2727 vec_safe_push (current_binding_level->shadowed_labels, bind);
2729 return decl;
2732 /* Returns nonzero if it is ill-formed to jump past the declaration of
2733 DECL. Returns 2 if it's also a real problem. */
2735 static int
2736 decl_jump_unsafe (tree decl)
2738 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2739 with automatic storage duration is not in scope to a point where it is
2740 in scope is ill-formed unless the variable has scalar type, class type
2741 with a trivial default constructor and a trivial destructor, a
2742 cv-qualified version of one of these types, or an array of one of the
2743 preceding types and is declared without an initializer (8.5). */
2744 tree type = TREE_TYPE (decl);
2746 if (!VAR_P (decl) || TREE_STATIC (decl)
2747 || type == error_mark_node)
2748 return 0;
2750 type = strip_array_types (type);
2752 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2753 return 2;
2755 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2756 return 1;
2758 return 0;
2761 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2763 static void
2764 identify_goto (tree decl, const location_t *locus)
2766 if (decl)
2767 permerror (input_location, "jump to label %qD", decl);
2768 else
2769 permerror (input_location, "jump to case label");
2770 if (locus)
2771 permerror (*locus, " from here");
2774 /* Check that a single previously seen jump to a newly defined label
2775 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2776 the jump context; NAMES are the names in scope in LEVEL at the jump
2777 context; LOCUS is the source position of the jump or 0. Returns
2778 true if all is well. */
2780 static bool
2781 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2782 bool exited_omp, const location_t *locus)
2784 cp_binding_level *b;
2785 bool identified = false, saw_eh = false, saw_omp = false;
2787 if (exited_omp)
2789 identify_goto (decl, locus);
2790 error (" exits OpenMP structured block");
2791 identified = saw_omp = true;
2794 for (b = current_binding_level; b ; b = b->level_chain)
2796 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2798 for (new_decls = b->names; new_decls != old_decls;
2799 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2800 : TREE_CHAIN (new_decls)))
2802 int problem = decl_jump_unsafe (new_decls);
2803 if (! problem)
2804 continue;
2806 if (!identified)
2808 identify_goto (decl, locus);
2809 identified = true;
2811 if (problem > 1)
2812 error (" crosses initialization of %q+#D", new_decls);
2813 else
2814 permerror (input_location, " enters scope of %q+#D which has "
2815 "non-trivial destructor", new_decls);
2818 if (b == level)
2819 break;
2820 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2822 if (!identified)
2824 identify_goto (decl, locus);
2825 identified = true;
2827 if (b->kind == sk_try)
2828 error (" enters try block");
2829 else
2830 error (" enters catch block");
2831 saw_eh = true;
2833 if (b->kind == sk_omp && !saw_omp)
2835 if (!identified)
2837 identify_goto (decl, locus);
2838 identified = true;
2840 error (" enters OpenMP structured block");
2841 saw_omp = true;
2845 return !identified;
2848 static void
2849 check_previous_goto (tree decl, struct named_label_use_entry *use)
2851 check_previous_goto_1 (decl, use->binding_level,
2852 use->names_in_scope, use->in_omp_scope,
2853 &use->o_goto_locus);
2856 static bool
2857 check_switch_goto (cp_binding_level* level)
2859 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2862 /* Check that a new jump to a label DECL is OK. Called by
2863 finish_goto_stmt. */
2865 void
2866 check_goto (tree decl)
2868 struct named_label_entry *ent, dummy;
2869 bool saw_catch = false, identified = false;
2870 tree bad;
2871 unsigned ix;
2873 /* We can't know where a computed goto is jumping.
2874 So we assume that it's OK. */
2875 if (TREE_CODE (decl) != LABEL_DECL)
2876 return;
2878 /* We didn't record any information about this label when we created it,
2879 and there's not much point since it's trivial to analyze as a return. */
2880 if (decl == cdtor_label)
2881 return;
2883 dummy.label_decl = decl;
2884 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2885 gcc_assert (ent != NULL);
2887 /* If the label hasn't been defined yet, defer checking. */
2888 if (! DECL_INITIAL (decl))
2890 struct named_label_use_entry *new_use;
2892 /* Don't bother creating another use if the last goto had the
2893 same data, and will therefore create the same set of errors. */
2894 if (ent->uses
2895 && ent->uses->names_in_scope == current_binding_level->names)
2896 return;
2898 new_use = ggc_alloc_named_label_use_entry ();
2899 new_use->binding_level = current_binding_level;
2900 new_use->names_in_scope = current_binding_level->names;
2901 new_use->o_goto_locus = input_location;
2902 new_use->in_omp_scope = false;
2904 new_use->next = ent->uses;
2905 ent->uses = new_use;
2906 return;
2909 if (ent->in_try_scope || ent->in_catch_scope
2910 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
2912 permerror (input_location, "jump to label %q+D", decl);
2913 permerror (input_location, " from here");
2914 identified = true;
2917 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
2919 int u = decl_jump_unsafe (bad);
2921 if (u > 1 && DECL_ARTIFICIAL (bad))
2923 /* Can't skip init of __exception_info. */
2924 error_at (DECL_SOURCE_LOCATION (bad), " enters catch block");
2925 saw_catch = true;
2927 else if (u > 1)
2928 error (" skips initialization of %q+#D", bad);
2929 else
2930 permerror (input_location, " enters scope of %q+#D which has "
2931 "non-trivial destructor", bad);
2934 if (ent->in_try_scope)
2935 error (" enters try block");
2936 else if (ent->in_catch_scope && !saw_catch)
2937 error (" enters catch block");
2939 if (ent->in_omp_scope)
2940 error (" enters OpenMP structured block");
2941 else if (flag_openmp)
2943 cp_binding_level *b;
2944 for (b = current_binding_level; b ; b = b->level_chain)
2946 if (b == ent->binding_level)
2947 break;
2948 if (b->kind == sk_omp)
2950 if (!identified)
2952 permerror (input_location, "jump to label %q+D", decl);
2953 permerror (input_location, " from here");
2954 identified = true;
2956 error (" exits OpenMP structured block");
2957 break;
2963 /* Check that a return is ok wrt OpenMP structured blocks.
2964 Called by finish_return_stmt. Returns true if all is well. */
2966 bool
2967 check_omp_return (void)
2969 cp_binding_level *b;
2970 for (b = current_binding_level; b ; b = b->level_chain)
2971 if (b->kind == sk_omp)
2973 error ("invalid exit from OpenMP structured block");
2974 return false;
2976 else if (b->kind == sk_function_parms)
2977 break;
2978 return true;
2981 /* Define a label, specifying the location in the source file.
2982 Return the LABEL_DECL node for the label. */
2984 static tree
2985 define_label_1 (location_t location, tree name)
2987 struct named_label_entry *ent, dummy;
2988 cp_binding_level *p;
2989 tree decl;
2991 decl = lookup_label (name);
2993 dummy.label_decl = decl;
2994 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2995 gcc_assert (ent != NULL);
2997 /* After labels, make any new cleanups in the function go into their
2998 own new (temporary) binding contour. */
2999 for (p = current_binding_level;
3000 p->kind != sk_function_parms;
3001 p = p->level_chain)
3002 p->more_cleanups_ok = 0;
3004 if (name == get_identifier ("wchar_t"))
3005 permerror (input_location, "label named wchar_t");
3007 if (DECL_INITIAL (decl) != NULL_TREE)
3009 error ("duplicate label %qD", decl);
3010 return error_mark_node;
3012 else
3014 struct named_label_use_entry *use;
3016 /* Mark label as having been defined. */
3017 DECL_INITIAL (decl) = error_mark_node;
3018 /* Say where in the source. */
3019 DECL_SOURCE_LOCATION (decl) = location;
3021 ent->binding_level = current_binding_level;
3022 ent->names_in_scope = current_binding_level->names;
3024 for (use = ent->uses; use ; use = use->next)
3025 check_previous_goto (decl, use);
3026 ent->uses = NULL;
3029 return decl;
3032 /* Wrapper for define_label_1. */
3034 tree
3035 define_label (location_t location, tree name)
3037 tree ret;
3038 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3039 ret = define_label_1 (location, name);
3040 timevar_cond_stop (TV_NAME_LOOKUP, running);
3041 return ret;
3045 struct cp_switch
3047 cp_binding_level *level;
3048 struct cp_switch *next;
3049 /* The SWITCH_STMT being built. */
3050 tree switch_stmt;
3051 /* A splay-tree mapping the low element of a case range to the high
3052 element, or NULL_TREE if there is no high element. Used to
3053 determine whether or not a new case label duplicates an old case
3054 label. We need a tree, rather than simply a hash table, because
3055 of the GNU case range extension. */
3056 splay_tree cases;
3059 /* A stack of the currently active switch statements. The innermost
3060 switch statement is on the top of the stack. There is no need to
3061 mark the stack for garbage collection because it is only active
3062 during the processing of the body of a function, and we never
3063 collect at that point. */
3065 static struct cp_switch *switch_stack;
3067 /* Called right after a switch-statement condition is parsed.
3068 SWITCH_STMT is the switch statement being parsed. */
3070 void
3071 push_switch (tree switch_stmt)
3073 struct cp_switch *p = XNEW (struct cp_switch);
3074 p->level = current_binding_level;
3075 p->next = switch_stack;
3076 p->switch_stmt = switch_stmt;
3077 p->cases = splay_tree_new (case_compare, NULL, NULL);
3078 switch_stack = p;
3081 void
3082 pop_switch (void)
3084 struct cp_switch *cs = switch_stack;
3085 location_t switch_location;
3087 /* Emit warnings as needed. */
3088 switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3089 if (!processing_template_decl)
3090 c_do_switch_warnings (cs->cases, switch_location,
3091 SWITCH_STMT_TYPE (cs->switch_stmt),
3092 SWITCH_STMT_COND (cs->switch_stmt));
3094 splay_tree_delete (cs->cases);
3095 switch_stack = switch_stack->next;
3096 free (cs);
3099 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3100 condition. Note that if TYPE and VALUE are already integral we don't
3101 really do the conversion because the language-independent
3102 warning/optimization code will work better that way. */
3104 static tree
3105 case_conversion (tree type, tree value)
3107 if (value == NULL_TREE)
3108 return value;
3110 if (cxx_dialect >= cxx11
3111 && (SCOPED_ENUM_P (type)
3112 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3114 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3115 type = type_promotes_to (type);
3116 value = (perform_implicit_conversion_flags
3117 (type, value, tf_warning_or_error,
3118 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3120 return cxx_constant_value (value);
3123 /* Note that we've seen a definition of a case label, and complain if this
3124 is a bad place for one. */
3126 tree
3127 finish_case_label (location_t loc, tree low_value, tree high_value)
3129 tree cond, r;
3130 cp_binding_level *p;
3131 tree type;
3133 if (processing_template_decl)
3135 tree label;
3137 /* For templates, just add the case label; we'll do semantic
3138 analysis at instantiation-time. */
3139 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3140 return add_stmt (build_case_label (low_value, high_value, label));
3143 /* Find the condition on which this switch statement depends. */
3144 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3145 if (cond && TREE_CODE (cond) == TREE_LIST)
3146 cond = TREE_VALUE (cond);
3148 if (!check_switch_goto (switch_stack->level))
3149 return error_mark_node;
3151 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3153 low_value = case_conversion (type, low_value);
3154 high_value = case_conversion (type, high_value);
3156 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3157 low_value, high_value);
3159 /* After labels, make any new cleanups in the function go into their
3160 own new (temporary) binding contour. */
3161 for (p = current_binding_level;
3162 p->kind != sk_function_parms;
3163 p = p->level_chain)
3164 p->more_cleanups_ok = 0;
3166 return r;
3169 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
3171 static hashval_t
3172 typename_hash (const void* k)
3174 hashval_t hash;
3175 const_tree const t = (const_tree) k;
3177 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3178 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3180 return hash;
3183 typedef struct typename_info {
3184 tree scope;
3185 tree name;
3186 tree template_id;
3187 bool enum_p;
3188 bool class_p;
3189 } typename_info;
3191 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
3192 really of type `typename_info*' */
3194 static int
3195 typename_compare (const void * k1, const void * k2)
3197 const_tree const t1 = (const_tree) k1;
3198 const typename_info *const t2 = (const typename_info *) k2;
3200 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3201 && TYPE_CONTEXT (t1) == t2->scope
3202 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3203 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3204 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3207 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3208 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3210 Returns the new TYPENAME_TYPE. */
3212 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3214 static tree
3215 build_typename_type (tree context, tree name, tree fullname,
3216 enum tag_types tag_type)
3218 tree t;
3219 tree d;
3220 typename_info ti;
3221 void **e;
3222 hashval_t hash;
3224 if (typename_htab == NULL)
3225 typename_htab = htab_create_ggc (61, &typename_hash,
3226 &typename_compare, NULL);
3228 ti.scope = FROB_CONTEXT (context);
3229 ti.name = name;
3230 ti.template_id = fullname;
3231 ti.enum_p = tag_type == enum_type;
3232 ti.class_p = (tag_type == class_type
3233 || tag_type == record_type
3234 || tag_type == union_type);
3235 hash = (htab_hash_pointer (ti.scope)
3236 ^ htab_hash_pointer (ti.name));
3238 /* See if we already have this type. */
3239 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3240 if (*e)
3241 t = (tree) *e;
3242 else
3244 /* Build the TYPENAME_TYPE. */
3245 t = cxx_make_type (TYPENAME_TYPE);
3246 TYPE_CONTEXT (t) = ti.scope;
3247 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3248 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3249 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3251 /* Build the corresponding TYPE_DECL. */
3252 d = build_decl (input_location, TYPE_DECL, name, t);
3253 TYPE_NAME (TREE_TYPE (d)) = d;
3254 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3255 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3256 DECL_ARTIFICIAL (d) = 1;
3258 /* Store it in the hash table. */
3259 *e = t;
3261 /* TYPENAME_TYPEs must always be compared structurally, because
3262 they may or may not resolve down to another type depending on
3263 the currently open classes. */
3264 SET_TYPE_STRUCTURAL_EQUALITY (t);
3267 return t;
3270 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3271 provided to name the type. Returns an appropriate type, unless an
3272 error occurs, in which case error_mark_node is returned. If we
3273 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3274 return that, rather than the _TYPE it corresponds to, in other
3275 cases we look through the type decl. If TF_ERROR is set, complain
3276 about errors, otherwise be quiet. */
3278 tree
3279 make_typename_type (tree context, tree name, enum tag_types tag_type,
3280 tsubst_flags_t complain)
3282 tree fullname;
3283 tree t;
3284 bool want_template;
3286 if (name == error_mark_node
3287 || context == NULL_TREE
3288 || context == error_mark_node)
3289 return error_mark_node;
3291 if (TYPE_P (name))
3293 if (!(TYPE_LANG_SPECIFIC (name)
3294 && (CLASSTYPE_IS_TEMPLATE (name)
3295 || CLASSTYPE_USE_TEMPLATE (name))))
3296 name = TYPE_IDENTIFIER (name);
3297 else
3298 /* Create a TEMPLATE_ID_EXPR for the type. */
3299 name = build_nt (TEMPLATE_ID_EXPR,
3300 CLASSTYPE_TI_TEMPLATE (name),
3301 CLASSTYPE_TI_ARGS (name));
3303 else if (TREE_CODE (name) == TYPE_DECL)
3304 name = DECL_NAME (name);
3306 fullname = name;
3308 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3310 name = TREE_OPERAND (name, 0);
3311 if (TREE_CODE (name) == TEMPLATE_DECL)
3312 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3313 else if (TREE_CODE (name) == OVERLOAD)
3315 if (complain & tf_error)
3316 error ("%qD is not a type", name);
3317 return error_mark_node;
3320 if (TREE_CODE (name) == TEMPLATE_DECL)
3322 if (complain & tf_error)
3323 error ("%qD used without template parameters", name);
3324 return error_mark_node;
3326 gcc_assert (identifier_p (name));
3327 gcc_assert (TYPE_P (context));
3329 if (!MAYBE_CLASS_TYPE_P (context))
3331 if (complain & tf_error)
3332 error ("%q#T is not a class", context);
3333 return error_mark_node;
3336 /* When the CONTEXT is a dependent type, NAME could refer to a
3337 dependent base class of CONTEXT. But look inside it anyway
3338 if CONTEXT is a currently open scope, in case it refers to a
3339 member of the current instantiation or a non-dependent base;
3340 lookup will stop when we hit a dependent base. */
3341 if (!dependent_scope_p (context))
3342 /* We should only set WANT_TYPE when we're a nested typename type.
3343 Then we can give better diagnostics if we find a non-type. */
3344 t = lookup_field (context, name, 2, /*want_type=*/true);
3345 else
3346 t = NULL_TREE;
3348 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3349 return build_typename_type (context, name, fullname, tag_type);
3351 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3353 if (!t)
3355 if (complain & tf_error)
3356 error (want_template ? G_("no class template named %q#T in %q#T")
3357 : G_("no type named %q#T in %q#T"), name, context);
3358 return error_mark_node;
3361 /* Pull out the template from an injected-class-name (or multiple). */
3362 if (want_template)
3363 t = maybe_get_template_decl_from_type_decl (t);
3365 if (TREE_CODE (t) == TREE_LIST)
3367 if (complain & tf_error)
3369 error ("lookup of %qT in %qT is ambiguous", name, context);
3370 print_candidates (t);
3372 return error_mark_node;
3375 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3377 if (complain & tf_error)
3378 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3379 context, name, t);
3380 return error_mark_node;
3382 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3384 if (complain & tf_error)
3385 error ("%<typename %T::%D%> names %q#T, which is not a type",
3386 context, name, t);
3387 return error_mark_node;
3390 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3391 return error_mark_node;
3393 /* If we are currently parsing a template and if T is a typedef accessed
3394 through CONTEXT then we need to remember and check access of T at
3395 template instantiation time. */
3396 add_typedef_to_current_template_for_access_check (t, context, input_location);
3398 if (want_template)
3399 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3400 NULL_TREE, context,
3401 /*entering_scope=*/0,
3402 tf_warning_or_error | tf_user);
3404 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3405 t = TREE_TYPE (t);
3407 maybe_record_typedef_use (t);
3409 return t;
3412 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3413 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3414 in which case error_mark_node is returned.
3416 If PARM_LIST is non-NULL, also make sure that the template parameter
3417 list of TEMPLATE_DECL matches.
3419 If COMPLAIN zero, don't complain about any errors that occur. */
3421 tree
3422 make_unbound_class_template (tree context, tree name, tree parm_list,
3423 tsubst_flags_t complain)
3425 tree t;
3426 tree d;
3428 if (TYPE_P (name))
3429 name = TYPE_IDENTIFIER (name);
3430 else if (DECL_P (name))
3431 name = DECL_NAME (name);
3432 gcc_assert (identifier_p (name));
3434 if (!dependent_type_p (context)
3435 || currently_open_class (context))
3437 tree tmpl = NULL_TREE;
3439 if (MAYBE_CLASS_TYPE_P (context))
3440 tmpl = lookup_field (context, name, 0, false);
3442 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3443 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3445 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3447 if (complain & tf_error)
3448 error ("no class template named %q#T in %q#T", name, context);
3449 return error_mark_node;
3452 if (parm_list
3453 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3455 if (complain & tf_error)
3457 error ("template parameters do not match template");
3458 error ("%q+D declared here", tmpl);
3460 return error_mark_node;
3463 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3464 complain))
3465 return error_mark_node;
3467 return tmpl;
3470 /* Build the UNBOUND_CLASS_TEMPLATE. */
3471 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3472 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3473 TREE_TYPE (t) = NULL_TREE;
3474 SET_TYPE_STRUCTURAL_EQUALITY (t);
3476 /* Build the corresponding TEMPLATE_DECL. */
3477 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3478 TYPE_NAME (TREE_TYPE (d)) = d;
3479 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3480 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3481 DECL_ARTIFICIAL (d) = 1;
3482 DECL_TEMPLATE_PARMS (d) = parm_list;
3484 return t;
3489 /* Push the declarations of builtin types into the namespace.
3490 RID_INDEX is the index of the builtin type in the array
3491 RID_POINTERS. NAME is the name used when looking up the builtin
3492 type. TYPE is the _TYPE node for the builtin type. */
3494 void
3495 record_builtin_type (enum rid rid_index,
3496 const char* name,
3497 tree type)
3499 tree rname = NULL_TREE, tname = NULL_TREE;
3500 tree tdecl = NULL_TREE;
3502 if ((int) rid_index < (int) RID_MAX)
3503 rname = ridpointers[(int) rid_index];
3504 if (name)
3505 tname = get_identifier (name);
3507 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3508 eliminated. Built-in types should not be looked up name; their
3509 names are keywords that the parser can recognize. However, there
3510 is code in c-common.c that uses identifier_global_value to look
3511 up built-in types by name. */
3512 if (tname)
3514 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3515 DECL_ARTIFICIAL (tdecl) = 1;
3516 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3518 if (rname)
3520 if (!tdecl)
3522 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3523 DECL_ARTIFICIAL (tdecl) = 1;
3525 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3528 if (!TYPE_NAME (type))
3529 TYPE_NAME (type) = tdecl;
3531 if (tdecl)
3532 debug_hooks->type_decl (tdecl, 0);
3535 /* Record one of the standard Java types.
3536 * Declare it as having the given NAME.
3537 * If SIZE > 0, it is the size of one of the integral types;
3538 * otherwise it is the negative of the size of one of the other types. */
3540 static tree
3541 record_builtin_java_type (const char* name, int size)
3543 tree type, decl;
3544 if (size > 0)
3546 type = build_nonstandard_integer_type (size, 0);
3547 type = build_distinct_type_copy (type);
3549 else if (size > -32)
3551 tree stype;
3552 /* "__java_char" or ""__java_boolean". */
3553 type = build_nonstandard_integer_type (-size, 1);
3554 type = build_distinct_type_copy (type);
3555 /* Get the signed type cached and attached to the unsigned type,
3556 so it doesn't get garbage-collected at "random" times,
3557 causing potential codegen differences out of different UIDs
3558 and different alias set numbers. */
3559 stype = build_nonstandard_integer_type (-size, 0);
3560 stype = build_distinct_type_copy (stype);
3561 TREE_CHAIN (type) = stype;
3562 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3564 else
3565 { /* "__java_float" or ""__java_double". */
3566 type = make_node (REAL_TYPE);
3567 TYPE_PRECISION (type) = - size;
3568 layout_type (type);
3570 record_builtin_type (RID_MAX, name, type);
3571 decl = TYPE_NAME (type);
3573 /* Suppress generate debug symbol entries for these types,
3574 since for normal C++ they are just clutter.
3575 However, push_lang_context undoes this if extern "Java" is seen. */
3576 DECL_IGNORED_P (decl) = 1;
3578 TYPE_FOR_JAVA (type) = 1;
3579 return type;
3582 /* Push a type into the namespace so that the back ends ignore it. */
3584 static void
3585 record_unknown_type (tree type, const char* name)
3587 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3588 TYPE_DECL, get_identifier (name), type));
3589 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3590 DECL_IGNORED_P (decl) = 1;
3591 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3592 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3593 TYPE_ALIGN (type) = 1;
3594 TYPE_USER_ALIGN (type) = 0;
3595 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3598 /* A string for which we should create an IDENTIFIER_NODE at
3599 startup. */
3601 typedef struct predefined_identifier
3603 /* The name of the identifier. */
3604 const char *const name;
3605 /* The place where the IDENTIFIER_NODE should be stored. */
3606 tree *const node;
3607 /* Nonzero if this is the name of a constructor or destructor. */
3608 const int ctor_or_dtor_p;
3609 } predefined_identifier;
3611 /* Create all the predefined identifiers. */
3613 static void
3614 initialize_predefined_identifiers (void)
3616 const predefined_identifier *pid;
3618 /* A table of identifiers to create at startup. */
3619 static const predefined_identifier predefined_identifiers[] = {
3620 { "C++", &lang_name_cplusplus, 0 },
3621 { "C", &lang_name_c, 0 },
3622 { "Java", &lang_name_java, 0 },
3623 /* Some of these names have a trailing space so that it is
3624 impossible for them to conflict with names written by users. */
3625 { "__ct ", &ctor_identifier, 1 },
3626 { "__base_ctor ", &base_ctor_identifier, 1 },
3627 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3628 { "__dt ", &dtor_identifier, 1 },
3629 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3630 { "__base_dtor ", &base_dtor_identifier, 1 },
3631 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3632 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3633 { "nelts", &nelts_identifier, 0 },
3634 { THIS_NAME, &this_identifier, 0 },
3635 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3636 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3637 { "_vptr", &vptr_identifier, 0 },
3638 { "__vtt_parm", &vtt_parm_identifier, 0 },
3639 { "::", &global_scope_name, 0 },
3640 { "std", &std_identifier, 0 },
3641 { NULL, NULL, 0 }
3644 for (pid = predefined_identifiers; pid->name; ++pid)
3646 *pid->node = get_identifier (pid->name);
3647 if (pid->ctor_or_dtor_p)
3648 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3652 /* Create the predefined scalar types of C,
3653 and some nodes representing standard constants (0, 1, (void *)0).
3654 Initialize the global binding level.
3655 Make definitions for built-in primitive functions. */
3657 void
3658 cxx_init_decl_processing (void)
3660 tree void_ftype;
3661 tree void_ftype_ptr;
3663 /* Create all the identifiers we need. */
3664 initialize_predefined_identifiers ();
3666 /* Create the global variables. */
3667 push_to_top_level ();
3669 current_function_decl = NULL_TREE;
3670 current_binding_level = NULL;
3671 /* Enter the global namespace. */
3672 gcc_assert (global_namespace == NULL_TREE);
3673 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3674 void_type_node);
3675 DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3676 TREE_PUBLIC (global_namespace) = 1;
3677 begin_scope (sk_namespace, global_namespace);
3679 if (flag_visibility_ms_compat)
3680 default_visibility = VISIBILITY_HIDDEN;
3682 /* Initially, C. */
3683 current_lang_name = lang_name_c;
3685 /* Create the `std' namespace. */
3686 push_namespace (std_identifier);
3687 std_node = current_namespace;
3688 pop_namespace ();
3690 c_common_nodes_and_builtins ();
3692 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3693 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3694 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3695 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3696 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3697 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3698 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3699 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3701 integer_two_node = build_int_cst (NULL_TREE, 2);
3703 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3704 truthvalue_type_node = boolean_type_node;
3705 truthvalue_false_node = boolean_false_node;
3706 truthvalue_true_node = boolean_true_node;
3708 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3709 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3710 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3712 #if 0
3713 record_builtin_type (RID_MAX, NULL, string_type_node);
3714 #endif
3716 delta_type_node = ptrdiff_type_node;
3717 vtable_index_type = ptrdiff_type_node;
3719 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3720 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3721 void_ftype_ptr = build_function_type_list (void_type_node,
3722 ptr_type_node, NULL_TREE);
3723 void_ftype_ptr
3724 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3726 /* C++ extensions */
3728 unknown_type_node = make_node (LANG_TYPE);
3729 record_unknown_type (unknown_type_node, "unknown type");
3731 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3732 TREE_TYPE (unknown_type_node) = unknown_type_node;
3734 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3735 result. */
3736 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3737 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3739 init_list_type_node = make_node (LANG_TYPE);
3740 record_unknown_type (init_list_type_node, "init list");
3743 /* Make sure we get a unique function type, so we can give
3744 its pointer type a name. (This wins for gdb.) */
3745 tree vfunc_type = make_node (FUNCTION_TYPE);
3746 TREE_TYPE (vfunc_type) = integer_type_node;
3747 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3748 layout_type (vfunc_type);
3750 vtable_entry_type = build_pointer_type (vfunc_type);
3752 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3754 vtbl_type_node
3755 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3756 layout_type (vtbl_type_node);
3757 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3758 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3759 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3760 layout_type (vtbl_ptr_type_node);
3761 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3763 push_namespace (get_identifier ("__cxxabiv1"));
3764 abi_node = current_namespace;
3765 pop_namespace ();
3767 global_type_node = make_node (LANG_TYPE);
3768 record_unknown_type (global_type_node, "global type");
3770 /* Now, C++. */
3771 current_lang_name = lang_name_cplusplus;
3774 tree newattrs, extvisattr;
3775 tree newtype, deltype;
3776 tree ptr_ftype_sizetype;
3777 tree new_eh_spec;
3779 ptr_ftype_sizetype
3780 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3781 if (cxx_dialect == cxx98)
3783 tree bad_alloc_id;
3784 tree bad_alloc_type_node;
3785 tree bad_alloc_decl;
3787 push_namespace (std_identifier);
3788 bad_alloc_id = get_identifier ("bad_alloc");
3789 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3790 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3791 bad_alloc_decl
3792 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3793 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3794 pop_namespace ();
3796 new_eh_spec
3797 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3799 else
3800 new_eh_spec = noexcept_false_spec;
3802 /* Ensure attribs.c is initialized. */
3803 init_attributes ();
3804 extvisattr = build_tree_list (get_identifier ("externally_visible"),
3805 NULL_TREE);
3806 newattrs = tree_cons (get_identifier ("alloc_size"),
3807 build_tree_list (NULL_TREE, integer_one_node),
3808 extvisattr);
3809 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3810 newtype = build_exception_variant (newtype, new_eh_spec);
3811 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3812 deltype = build_exception_variant (deltype, empty_except_spec);
3813 DECL_IS_OPERATOR_NEW (push_cp_library_fn (NEW_EXPR, newtype, 0)) = 1;
3814 DECL_IS_OPERATOR_NEW (push_cp_library_fn (VEC_NEW_EXPR, newtype, 0)) = 1;
3815 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3816 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3818 nullptr_type_node = make_node (NULLPTR_TYPE);
3819 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3820 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3821 TYPE_UNSIGNED (nullptr_type_node) = 1;
3822 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3823 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3824 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3825 nullptr_node = build_int_cst (nullptr_type_node, 0);
3828 abort_fndecl
3829 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
3830 ECF_NORETURN | ECF_NOTHROW);
3832 /* Perform other language dependent initializations. */
3833 init_class_processing ();
3834 init_rtti_processing ();
3835 init_template_processing ();
3837 if (flag_exceptions)
3838 init_exception_processing ();
3840 if (! supports_one_only ())
3841 flag_weak = 0;
3843 make_fname_decl = cp_make_fname_decl;
3844 start_fname_decls ();
3846 /* Show we use EH for cleanups. */
3847 if (flag_exceptions)
3848 using_eh_for_cleanups ();
3851 /* Generate an initializer for a function naming variable from
3852 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3853 filled in with the type of the init. */
3855 tree
3856 cp_fname_init (const char* name, tree *type_p)
3858 tree domain = NULL_TREE;
3859 tree type;
3860 tree init = NULL_TREE;
3861 size_t length = 0;
3863 if (name)
3865 length = strlen (name);
3866 domain = build_index_type (size_int (length));
3867 init = build_string (length + 1, name);
3870 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3871 type = build_cplus_array_type (type, domain);
3873 *type_p = type;
3875 if (init)
3876 TREE_TYPE (init) = type;
3877 else
3878 init = error_mark_node;
3880 return init;
3883 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3884 the decl, LOC is the location to give the decl, NAME is the
3885 initialization string and TYPE_DEP indicates whether NAME depended
3886 on the type of the function. We make use of that to detect
3887 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3888 at the point of first use, so we mustn't push the decl now. */
3890 static tree
3891 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3893 const char *const name = (type_dep && processing_template_decl
3894 ? NULL : fname_as_string (type_dep));
3895 tree type;
3896 tree init = cp_fname_init (name, &type);
3897 tree decl = build_decl (loc, VAR_DECL, id, type);
3899 if (name)
3900 free (CONST_CAST (char *, name));
3902 /* As we're using pushdecl_with_scope, we must set the context. */
3903 DECL_CONTEXT (decl) = current_function_decl;
3905 TREE_STATIC (decl) = 1;
3906 TREE_READONLY (decl) = 1;
3907 DECL_ARTIFICIAL (decl) = 1;
3909 TREE_USED (decl) = 1;
3911 if (current_function_decl)
3913 cp_binding_level *b = current_binding_level;
3914 if (b->kind == sk_function_parms)
3915 return error_mark_node;
3916 while (b->level_chain->kind != sk_function_parms)
3917 b = b->level_chain;
3918 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3919 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3920 LOOKUP_ONLYCONVERTING);
3922 else
3924 DECL_THIS_STATIC (decl) = true;
3925 pushdecl_top_level_and_finish (decl, init);
3928 return decl;
3931 static tree
3932 builtin_function_1 (tree decl, tree context, bool is_global)
3934 tree id = DECL_NAME (decl);
3935 const char *name = IDENTIFIER_POINTER (id);
3937 retrofit_lang_decl (decl);
3939 DECL_ARTIFICIAL (decl) = 1;
3940 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3941 SET_DECL_LANGUAGE (decl, lang_c);
3942 /* Runtime library routines are, by definition, available in an
3943 external shared object. */
3944 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3945 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3947 DECL_CONTEXT (decl) = context;
3949 if (is_global)
3950 pushdecl_top_level (decl);
3951 else
3952 pushdecl (decl);
3954 /* A function in the user's namespace should have an explicit
3955 declaration before it is used. Mark the built-in function as
3956 anticipated but not actually declared. */
3957 if (name[0] != '_' || name[1] != '_')
3958 DECL_ANTICIPATED (decl) = 1;
3959 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3961 size_t len = strlen (name);
3963 /* Treat __*_chk fortification functions as anticipated as well,
3964 unless they are __builtin_*. */
3965 if (len > strlen ("___chk")
3966 && memcmp (name + len - strlen ("_chk"),
3967 "_chk", strlen ("_chk") + 1) == 0)
3968 DECL_ANTICIPATED (decl) = 1;
3971 return decl;
3974 tree
3975 cxx_builtin_function (tree decl)
3977 tree id = DECL_NAME (decl);
3978 const char *name = IDENTIFIER_POINTER (id);
3979 /* All builtins that don't begin with an '_' should additionally
3980 go in the 'std' namespace. */
3981 if (name[0] != '_')
3983 tree decl2 = copy_node(decl);
3984 push_namespace (std_identifier);
3985 builtin_function_1 (decl2, std_node, false);
3986 pop_namespace ();
3989 return builtin_function_1 (decl, NULL_TREE, false);
3992 /* Like cxx_builtin_function, but guarantee the function is added to the global
3993 scope. This is to allow function specific options to add new machine
3994 dependent builtins when the target ISA changes via attribute((target(...)))
3995 which saves space on program startup if the program does not use non-generic
3996 ISAs. */
3998 tree
3999 cxx_builtin_function_ext_scope (tree decl)
4002 tree id = DECL_NAME (decl);
4003 const char *name = IDENTIFIER_POINTER (id);
4004 /* All builtins that don't begin with an '_' should additionally
4005 go in the 'std' namespace. */
4006 if (name[0] != '_')
4008 tree decl2 = copy_node(decl);
4009 push_namespace (std_identifier);
4010 builtin_function_1 (decl2, std_node, true);
4011 pop_namespace ();
4014 return builtin_function_1 (decl, NULL_TREE, true);
4017 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4018 function. Not called directly. */
4020 static tree
4021 build_library_fn (tree name, enum tree_code operator_code, tree type,
4022 int ecf_flags)
4024 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4025 DECL_EXTERNAL (fn) = 1;
4026 TREE_PUBLIC (fn) = 1;
4027 DECL_ARTIFICIAL (fn) = 1;
4028 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4029 SET_DECL_LANGUAGE (fn, lang_c);
4030 /* Runtime library routines are, by definition, available in an
4031 external shared object. */
4032 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4033 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4034 set_call_expr_flags (fn, ecf_flags);
4035 return fn;
4038 /* Returns the _DECL for a library function with C++ linkage. */
4040 static tree
4041 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4042 int ecf_flags)
4044 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4045 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4046 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4047 return fn;
4050 /* Like build_library_fn, but takes a C string instead of an
4051 IDENTIFIER_NODE. */
4053 tree
4054 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4056 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4059 /* Like build_cp_library_fn, but takes a C string instead of an
4060 IDENTIFIER_NODE. */
4062 tree
4063 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4065 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4066 ecf_flags);
4069 /* Like build_library_fn, but also pushes the function so that we will
4070 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
4071 may throw exceptions listed in RAISES. */
4073 tree
4074 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4076 tree fn;
4078 if (raises)
4079 type = build_exception_variant (type, raises);
4081 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4082 pushdecl_top_level (fn);
4083 return fn;
4086 /* Like build_cp_library_fn, but also pushes the function so that it
4087 will be found by normal lookup. */
4089 static tree
4090 push_cp_library_fn (enum tree_code operator_code, tree type,
4091 int ecf_flags)
4093 tree fn = build_cp_library_fn (ansi_opname (operator_code),
4094 operator_code,
4095 type, ecf_flags);
4096 pushdecl (fn);
4097 if (flag_tm)
4098 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4099 return fn;
4102 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4103 a FUNCTION_TYPE. */
4105 tree
4106 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4108 tree type = build_function_type (void_type_node, parmtypes);
4109 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4112 /* Like push_library_fn, but also note that this function throws
4113 and does not return. Used for __throw_foo and the like. */
4115 tree
4116 push_throw_library_fn (tree name, tree type)
4118 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4119 return fn;
4122 /* When we call finish_struct for an anonymous union, we create
4123 default copy constructors and such. But, an anonymous union
4124 shouldn't have such things; this function undoes the damage to the
4125 anonymous union type T.
4127 (The reason that we create the synthesized methods is that we don't
4128 distinguish `union { int i; }' from `typedef union { int i; } U'.
4129 The first is an anonymous union; the second is just an ordinary
4130 union type.) */
4132 void
4133 fixup_anonymous_aggr (tree t)
4135 tree *q;
4137 /* Wipe out memory of synthesized methods. */
4138 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4139 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4140 TYPE_HAS_COPY_CTOR (t) = 0;
4141 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4142 TYPE_HAS_COPY_ASSIGN (t) = 0;
4143 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4145 /* Splice the implicitly generated functions out of the TYPE_METHODS
4146 list. */
4147 q = &TYPE_METHODS (t);
4148 while (*q)
4150 if (DECL_ARTIFICIAL (*q))
4151 *q = TREE_CHAIN (*q);
4152 else
4153 q = &DECL_CHAIN (*q);
4156 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
4157 if (TYPE_METHODS (t))
4159 tree decl = TYPE_MAIN_DECL (t);
4161 if (TREE_CODE (t) != UNION_TYPE)
4162 error_at (DECL_SOURCE_LOCATION (decl),
4163 "an anonymous struct cannot have function members");
4164 else
4165 error_at (DECL_SOURCE_LOCATION (decl),
4166 "an anonymous union cannot have function members");
4169 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4170 assignment operators (because they cannot have these methods themselves).
4171 For anonymous unions this is already checked because they are not allowed
4172 in any union, otherwise we have to check it. */
4173 if (TREE_CODE (t) != UNION_TYPE)
4175 tree field, type;
4177 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4178 if (TREE_CODE (field) == FIELD_DECL)
4180 type = TREE_TYPE (field);
4181 if (CLASS_TYPE_P (type))
4183 if (TYPE_NEEDS_CONSTRUCTING (type))
4184 error ("member %q+#D with constructor not allowed "
4185 "in anonymous aggregate", field);
4186 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4187 error ("member %q+#D with destructor not allowed "
4188 "in anonymous aggregate", field);
4189 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4190 error ("member %q+#D with copy assignment operator "
4191 "not allowed in anonymous aggregate", field);
4197 /* Warn for an attribute located at LOCATION that appertains to the
4198 class type CLASS_TYPE that has not been properly placed after its
4199 class-key, in it class-specifier. */
4201 void
4202 warn_misplaced_attr_for_class_type (source_location location,
4203 tree class_type)
4205 gcc_assert (OVERLOAD_TYPE_P (class_type));
4207 warning_at (location, OPT_Wattributes,
4208 "attribute ignored in declaration "
4209 "of %q#T", class_type);
4210 inform (location,
4211 "attribute for %q#T must follow the %qs keyword",
4212 class_type, class_key_or_enum_as_string (class_type));
4215 /* Make sure that a declaration with no declarator is well-formed, i.e.
4216 just declares a tagged type or anonymous union.
4218 Returns the type declared; or NULL_TREE if none. */
4220 tree
4221 check_tag_decl (cp_decl_specifier_seq *declspecs,
4222 bool explicit_type_instantiation_p)
4224 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4225 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4226 /* If a class, struct, or enum type is declared by the DECLSPECS
4227 (i.e, if a class-specifier, enum-specifier, or non-typename
4228 elaborated-type-specifier appears in the DECLSPECS),
4229 DECLARED_TYPE is set to the corresponding type. */
4230 tree declared_type = NULL_TREE;
4231 bool error_p = false;
4233 if (declspecs->multiple_types_p)
4234 error ("multiple types in one declaration");
4235 else if (declspecs->redefined_builtin_type)
4237 if (!in_system_header)
4238 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4239 "redeclaration of C++ built-in type %qT",
4240 declspecs->redefined_builtin_type);
4241 return NULL_TREE;
4244 if (declspecs->type
4245 && TYPE_P (declspecs->type)
4246 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4247 && MAYBE_CLASS_TYPE_P (declspecs->type))
4248 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4249 declared_type = declspecs->type;
4250 else if (declspecs->type == error_mark_node)
4251 error_p = true;
4252 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4253 permerror (input_location, "declaration does not declare anything");
4254 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4256 error ("%<auto%> can only be specified for variables "
4257 "or function declarations");
4258 return error_mark_node;
4260 /* Check for an anonymous union. */
4261 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4262 && TYPE_ANONYMOUS_P (declared_type))
4264 /* 7/3 In a simple-declaration, the optional init-declarator-list
4265 can be omitted only when declaring a class (clause 9) or
4266 enumeration (7.2), that is, when the decl-specifier-seq contains
4267 either a class-specifier, an elaborated-type-specifier with
4268 a class-key (9.1), or an enum-specifier. In these cases and
4269 whenever a class-specifier or enum-specifier is present in the
4270 decl-specifier-seq, the identifiers in these specifiers are among
4271 the names being declared by the declaration (as class-name,
4272 enum-names, or enumerators, depending on the syntax). In such
4273 cases, and except for the declaration of an unnamed bit-field (9.6),
4274 the decl-specifier-seq shall introduce one or more names into the
4275 program, or shall redeclare a name introduced by a previous
4276 declaration. [Example:
4277 enum { }; // ill-formed
4278 typedef class { }; // ill-formed
4279 --end example] */
4280 if (saw_typedef)
4282 error ("missing type-name in typedef-declaration");
4283 return NULL_TREE;
4285 /* Anonymous unions are objects, so they can have specifiers. */;
4286 SET_ANON_AGGR_TYPE_P (declared_type);
4288 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4289 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4292 else
4294 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4295 || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4296 error ("%qs can only be specified for functions",
4297 decl_spec_seq_has_spec_p (declspecs, ds_inline)
4298 ? "inline" : "virtual");
4299 else if (saw_friend
4300 && (!current_class_type
4301 || current_scope () != current_class_type))
4302 error ("%<friend%> can only be specified inside a class");
4303 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4304 error ("%<explicit%> can only be specified for constructors");
4305 else if (declspecs->storage_class)
4306 error ("a storage class can only be specified for objects "
4307 "and functions");
4308 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4309 || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4310 || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4311 || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4312 error ("qualifiers can only be specified for objects "
4313 "and functions");
4314 else if (saw_typedef)
4315 warning (0, "%<typedef%> was ignored in this declaration");
4316 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4317 error ("%<constexpr%> cannot be used for type declarations");
4320 if (declspecs->attributes && warn_attributes && declared_type)
4322 location_t loc;
4323 if (!CLASS_TYPE_P (declared_type)
4324 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4325 /* For a non-template class, use the name location. */
4326 loc = location_of (declared_type);
4327 else
4328 /* For a template class (an explicit instantiation), use the
4329 current location. */
4330 loc = input_location;
4332 if (explicit_type_instantiation_p)
4333 /* [dcl.attr.grammar]/4:
4335 No attribute-specifier-seq shall appertain to an explicit
4336 instantiation. */
4338 warning_at (loc, OPT_Wattributes,
4339 "attribute ignored in explicit instantiation %q#T",
4340 declared_type);
4341 inform (loc,
4342 "no attribute can be applied to "
4343 "an explicit instantiation");
4345 else
4346 warn_misplaced_attr_for_class_type (loc, declared_type);
4349 return declared_type;
4352 /* Called when a declaration is seen that contains no names to declare.
4353 If its type is a reference to a structure, union or enum inherited
4354 from a containing scope, shadow that tag name for the current scope
4355 with a forward reference.
4356 If its type defines a new named structure or union
4357 or defines an enum, it is valid but we need not do anything here.
4358 Otherwise, it is an error.
4360 C++: may have to grok the declspecs to learn about static,
4361 complain for anonymous unions.
4363 Returns the TYPE declared -- or NULL_TREE if none. */
4365 tree
4366 shadow_tag (cp_decl_specifier_seq *declspecs)
4368 tree t = check_tag_decl (declspecs,
4369 /*explicit_type_instantiation_p=*/false);
4371 if (!t)
4372 return NULL_TREE;
4374 if (maybe_process_partial_specialization (t) == error_mark_node)
4375 return NULL_TREE;
4377 /* This is where the variables in an anonymous union are
4378 declared. An anonymous union declaration looks like:
4379 union { ... } ;
4380 because there is no declarator after the union, the parser
4381 sends that declaration here. */
4382 if (ANON_AGGR_TYPE_P (t))
4384 fixup_anonymous_aggr (t);
4386 if (TYPE_FIELDS (t))
4388 tree decl = grokdeclarator (/*declarator=*/NULL,
4389 declspecs, NORMAL, 0, NULL);
4390 finish_anon_union (decl);
4394 return t;
4397 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4399 tree
4400 groktypename (cp_decl_specifier_seq *type_specifiers,
4401 const cp_declarator *declarator,
4402 bool is_template_arg)
4404 tree attrs;
4405 tree type;
4406 enum decl_context context
4407 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4408 attrs = type_specifiers->attributes;
4409 type_specifiers->attributes = NULL_TREE;
4410 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4411 if (attrs && type != error_mark_node)
4413 if (CLASS_TYPE_P (type))
4414 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4415 "outside of definition", type);
4416 else if (MAYBE_CLASS_TYPE_P (type))
4417 /* A template type parameter or other dependent type. */
4418 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4419 "type %qT without an associated declaration", type);
4420 else
4421 cplus_decl_attributes (&type, attrs, 0);
4423 return type;
4426 /* Process a DECLARATOR for a function-scope variable declaration,
4427 namespace-scope variable declaration, or function declaration.
4428 (Function definitions go through start_function; class member
4429 declarations appearing in the body of the class go through
4430 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4431 If an error occurs, the error_mark_node is returned instead.
4433 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4434 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4435 for an explicitly defaulted function, or SD_DELETED for an explicitly
4436 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4437 implicitly initialized via a default constructor. ATTRIBUTES and
4438 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4440 The scope represented by the context of the returned DECL is pushed
4441 (if it is not the global namespace) and is assigned to
4442 *PUSHED_SCOPE_P. The caller is then responsible for calling
4443 pop_scope on *PUSHED_SCOPE_P if it is set. */
4445 tree
4446 start_decl (const cp_declarator *declarator,
4447 cp_decl_specifier_seq *declspecs,
4448 int initialized,
4449 tree attributes,
4450 tree prefix_attributes,
4451 tree *pushed_scope_p)
4453 tree decl;
4454 tree context;
4455 bool was_public;
4456 int flags;
4457 bool alias;
4459 *pushed_scope_p = NULL_TREE;
4461 /* An object declared as __attribute__((deprecated)) suppresses
4462 warnings of uses of other deprecated items. */
4463 if (lookup_attribute ("deprecated", attributes))
4464 deprecated_state = DEPRECATED_SUPPRESS;
4466 attributes = chainon (attributes, prefix_attributes);
4468 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4469 &attributes);
4471 deprecated_state = DEPRECATED_NORMAL;
4473 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4474 || decl == error_mark_node)
4475 return error_mark_node;
4477 context = CP_DECL_CONTEXT (decl);
4478 if (context != global_namespace)
4479 *pushed_scope_p = push_scope (context);
4481 if (initialized)
4482 /* Is it valid for this decl to have an initializer at all?
4483 If not, set INITIALIZED to zero, which will indirectly
4484 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4485 switch (TREE_CODE (decl))
4487 case TYPE_DECL:
4488 error ("typedef %qD is initialized (use decltype instead)", decl);
4489 return error_mark_node;
4491 case FUNCTION_DECL:
4492 if (initialized == SD_DELETED)
4493 /* We'll handle the rest of the semantics later, but we need to
4494 set this now so it's visible to duplicate_decls. */
4495 DECL_DELETED_FN (decl) = 1;
4496 break;
4498 default:
4499 break;
4502 if (initialized)
4504 if (! toplevel_bindings_p ()
4505 && DECL_EXTERNAL (decl))
4506 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4507 decl);
4508 DECL_EXTERNAL (decl) = 0;
4509 if (toplevel_bindings_p ())
4510 TREE_STATIC (decl) = 1;
4512 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4514 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4515 record_key_method_defined (decl);
4517 /* If this is a typedef that names the class for linkage purposes
4518 (7.1.3p8), apply any attributes directly to the type. */
4519 if (TREE_CODE (decl) == TYPE_DECL
4520 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4521 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4522 flags = ATTR_FLAG_TYPE_IN_PLACE;
4523 else
4524 flags = 0;
4526 /* Set attributes here so if duplicate decl, will have proper attributes. */
4527 cplus_decl_attributes (&decl, attributes, flags);
4529 /* Dllimported symbols cannot be defined. Static data members (which
4530 can be initialized in-class and dllimported) go through grokfield,
4531 not here, so we don't need to exclude those decls when checking for
4532 a definition. */
4533 if (initialized && DECL_DLLIMPORT_P (decl))
4535 error ("definition of %q#D is marked %<dllimport%>", decl);
4536 DECL_DLLIMPORT_P (decl) = 0;
4539 /* If #pragma weak was used, mark the decl weak now. */
4540 if (!processing_template_decl)
4541 maybe_apply_pragma_weak (decl);
4543 if (TREE_CODE (decl) == FUNCTION_DECL
4544 && DECL_DECLARED_INLINE_P (decl)
4545 && DECL_UNINLINABLE (decl)
4546 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4547 warning (0, "inline function %q+D given attribute noinline", decl);
4549 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4551 if (VAR_P (decl))
4553 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4554 if (field == NULL_TREE || !VAR_P (field))
4555 error ("%q#D is not a static member of %q#T", decl, context);
4556 else
4558 if (DECL_CONTEXT (field) != context)
4560 if (!same_type_p (DECL_CONTEXT (field), context))
4561 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4562 "to be defined as %<%T::%D%>",
4563 DECL_CONTEXT (field), DECL_NAME (decl),
4564 context, DECL_NAME (decl));
4565 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4567 /* Static data member are tricky; an in-class initialization
4568 still doesn't provide a definition, so the in-class
4569 declaration will have DECL_EXTERNAL set, but will have an
4570 initialization. Thus, duplicate_decls won't warn
4571 about this situation, and so we check here. */
4572 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4573 error ("duplicate initialization of %qD", decl);
4574 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4575 decl = field;
4576 if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4577 && !DECL_DECLARED_CONSTEXPR_P (field))
4578 error ("%qD declared %<constexpr%> outside its class", field);
4581 else
4583 tree field = check_classfn (context, decl,
4584 (processing_template_decl
4585 > template_class_depth (context))
4586 ? current_template_parms
4587 : NULL_TREE);
4588 if (field && field != error_mark_node
4589 && duplicate_decls (decl, field,
4590 /*newdecl_is_friend=*/false))
4591 decl = field;
4594 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4595 DECL_IN_AGGR_P (decl) = 0;
4596 /* Do not mark DECL as an explicit specialization if it was not
4597 already marked as an instantiation; a declaration should
4598 never be marked as a specialization unless we know what
4599 template is being specialized. */
4600 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4602 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4604 /* [temp.expl.spec] An explicit specialization of a static data
4605 member of a template is a definition if the declaration
4606 includes an initializer; otherwise, it is a declaration.
4608 We check for processing_specialization so this only applies
4609 to the new specialization syntax. */
4610 if (!initialized && processing_specialization)
4611 DECL_EXTERNAL (decl) = 1;
4614 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4615 /* Aliases are definitions. */
4616 && !alias)
4617 permerror (input_location, "declaration of %q#D outside of class is not definition",
4618 decl);
4621 was_public = TREE_PUBLIC (decl);
4623 /* Enter this declaration into the symbol table. */
4624 decl = maybe_push_decl (decl);
4626 if (processing_template_decl)
4627 decl = push_template_decl (decl);
4628 if (decl == error_mark_node)
4629 return error_mark_node;
4631 if (VAR_P (decl)
4632 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4633 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4635 /* This is a const variable with implicit 'static'. Set
4636 DECL_THIS_STATIC so we can tell it from variables that are
4637 !TREE_PUBLIC because of the anonymous namespace. */
4638 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4639 DECL_THIS_STATIC (decl) = 1;
4642 if (!processing_template_decl && VAR_P (decl))
4643 start_decl_1 (decl, initialized);
4645 return decl;
4648 /* Process the declaration of a variable DECL. INITIALIZED is true
4649 iff DECL is explicitly initialized. (INITIALIZED is false if the
4650 variable is initialized via an implicitly-called constructor.)
4651 This function must be called for ordinary variables (including, for
4652 example, implicit instantiations of templates), but must not be
4653 called for template declarations. */
4655 void
4656 start_decl_1 (tree decl, bool initialized)
4658 tree type;
4659 bool complete_p;
4660 bool aggregate_definition_p;
4662 gcc_assert (!processing_template_decl);
4664 if (error_operand_p (decl))
4665 return;
4667 gcc_assert (VAR_P (decl));
4669 type = TREE_TYPE (decl);
4670 complete_p = COMPLETE_TYPE_P (type);
4671 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4673 /* If an explicit initializer is present, or if this is a definition
4674 of an aggregate, then we need a complete type at this point.
4675 (Scalars are always complete types, so there is nothing to
4676 check.) This code just sets COMPLETE_P; errors (if necessary)
4677 are issued below. */
4678 if ((initialized || aggregate_definition_p)
4679 && !complete_p
4680 && COMPLETE_TYPE_P (complete_type (type)))
4682 complete_p = true;
4683 /* We will not yet have set TREE_READONLY on DECL if the type
4684 was "const", but incomplete, before this point. But, now, we
4685 have a complete type, so we can try again. */
4686 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4689 if (initialized)
4690 /* Is it valid for this decl to have an initializer at all? */
4692 /* Don't allow initializations for incomplete types except for
4693 arrays which might be completed by the initialization. */
4694 if (complete_p)
4695 ; /* A complete type is ok. */
4696 else if (type_uses_auto (type))
4697 ; /* An auto type is ok. */
4698 else if (TREE_CODE (type) != ARRAY_TYPE)
4700 error ("variable %q#D has initializer but incomplete type", decl);
4701 type = TREE_TYPE (decl) = error_mark_node;
4703 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4705 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4706 error ("elements of array %q#D have incomplete type", decl);
4707 /* else we already gave an error in start_decl. */
4710 else if (aggregate_definition_p && !complete_p)
4712 if (type_uses_auto (type))
4713 error ("declaration of %q#D has no initializer", decl);
4714 else
4715 error ("aggregate %q#D has incomplete type and cannot be defined",
4716 decl);
4717 /* Change the type so that assemble_variable will give
4718 DECL an rtl we can live with: (mem (const_int 0)). */
4719 type = TREE_TYPE (decl) = error_mark_node;
4722 /* Create a new scope to hold this declaration if necessary.
4723 Whether or not a new scope is necessary cannot be determined
4724 until after the type has been completed; if the type is a
4725 specialization of a class template it is not until after
4726 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4727 will be set correctly. */
4728 maybe_push_cleanup_level (type);
4731 /* Handle initialization of references. DECL, TYPE, and INIT have the
4732 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4733 but will be set to a new CLEANUP_STMT if a temporary is created
4734 that must be destroyed subsequently.
4736 Returns an initializer expression to use to initialize DECL, or
4737 NULL if the initialization can be performed statically.
4739 Quotes on semantics can be found in ARM 8.4.3. */
4741 static tree
4742 grok_reference_init (tree decl, tree type, tree init, int flags)
4744 if (init == NULL_TREE)
4746 if ((DECL_LANG_SPECIFIC (decl) == 0
4747 || DECL_IN_AGGR_P (decl) == 0)
4748 && ! DECL_THIS_EXTERN (decl))
4749 error ("%qD declared as reference but not initialized", decl);
4750 return NULL_TREE;
4753 if (TREE_CODE (init) == TREE_LIST)
4754 init = build_x_compound_expr_from_list (init, ELK_INIT,
4755 tf_warning_or_error);
4757 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4758 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4759 /* Note: default conversion is only called in very special cases. */
4760 init = decay_conversion (init, tf_warning_or_error);
4762 /* Convert INIT to the reference type TYPE. This may involve the
4763 creation of a temporary, whose lifetime must be the same as that
4764 of the reference. If so, a DECL_EXPR for the temporary will be
4765 added just after the DECL_EXPR for DECL. That's why we don't set
4766 DECL_INITIAL for local references (instead assigning to them
4767 explicitly); we need to allow the temporary to be initialized
4768 first. */
4769 return initialize_reference (type, init, flags,
4770 tf_warning_or_error);
4773 /* Designated initializers in arrays are not supported in GNU C++.
4774 The parser cannot detect this error since it does not know whether
4775 a given brace-enclosed initializer is for a class type or for an
4776 array. This function checks that CE does not use a designated
4777 initializer. If it does, an error is issued. Returns true if CE
4778 is valid, i.e., does not have a designated initializer. */
4780 static bool
4781 check_array_designated_initializer (constructor_elt *ce,
4782 unsigned HOST_WIDE_INT index)
4784 /* Designated initializers for array elements are not supported. */
4785 if (ce->index)
4787 /* The parser only allows identifiers as designated
4788 initializers. */
4789 if (ce->index == error_mark_node)
4791 error ("name used in a GNU-style designated "
4792 "initializer for an array");
4793 return false;
4795 else if (identifier_p (ce->index))
4797 error ("name %qD used in a GNU-style designated "
4798 "initializer for an array", ce->index);
4799 return false;
4802 ce->index = cxx_constant_value (ce->index);
4804 if (TREE_CODE (ce->index) == INTEGER_CST)
4806 /* A C99 designator is OK if it matches the current index. */
4807 if (TREE_INT_CST_LOW (ce->index) == index)
4808 return true;
4809 else
4810 sorry ("non-trivial designated initializers not supported");
4812 else
4813 gcc_unreachable ();
4815 return false;
4818 return true;
4821 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4822 array until we finish parsing the initializer. If that's the
4823 situation we're in, update DECL accordingly. */
4825 static void
4826 maybe_deduce_size_from_array_init (tree decl, tree init)
4828 tree type = TREE_TYPE (decl);
4830 if (TREE_CODE (type) == ARRAY_TYPE
4831 && TYPE_DOMAIN (type) == NULL_TREE
4832 && TREE_CODE (decl) != TYPE_DECL)
4834 /* do_default is really a C-ism to deal with tentative definitions.
4835 But let's leave it here to ease the eventual merge. */
4836 int do_default = !DECL_EXTERNAL (decl);
4837 tree initializer = init ? init : DECL_INITIAL (decl);
4838 int failure = 0;
4840 /* Check that there are no designated initializers in INIT, as
4841 those are not supported in GNU C++, and as the middle-end
4842 will crash if presented with a non-numeric designated
4843 initializer. */
4844 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4846 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
4847 constructor_elt *ce;
4848 HOST_WIDE_INT i;
4849 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
4850 if (!check_array_designated_initializer (ce, i))
4851 failure = 1;
4854 if (!failure)
4856 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4857 do_default);
4858 if (failure == 1)
4860 error ("initializer fails to determine size of %qD", decl);
4862 else if (failure == 2)
4864 if (do_default)
4866 error ("array size missing in %qD", decl);
4868 /* If a `static' var's size isn't known, make it extern as
4869 well as static, so it does not get allocated. If it's not
4870 `static', then don't mark it extern; finish_incomplete_decl
4871 will give it a default size and it will get allocated. */
4872 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4873 DECL_EXTERNAL (decl) = 1;
4875 else if (failure == 3)
4877 error ("zero-size array %qD", decl);
4881 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4883 relayout_decl (decl);
4887 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4888 any appropriate error messages regarding the layout. */
4890 static void
4891 layout_var_decl (tree decl)
4893 tree type;
4895 type = TREE_TYPE (decl);
4896 if (type == error_mark_node)
4897 return;
4899 /* If we haven't already laid out this declaration, do so now.
4900 Note that we must not call complete type for an external object
4901 because it's type might involve templates that we are not
4902 supposed to instantiate yet. (And it's perfectly valid to say
4903 `extern X x' for some incomplete type `X'.) */
4904 if (!DECL_EXTERNAL (decl))
4905 complete_type (type);
4906 if (!DECL_SIZE (decl)
4907 && TREE_TYPE (decl) != error_mark_node
4908 && (COMPLETE_TYPE_P (type)
4909 || (TREE_CODE (type) == ARRAY_TYPE
4910 && !TYPE_DOMAIN (type)
4911 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4912 layout_decl (decl, 0);
4914 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4916 /* An automatic variable with an incomplete type: that is an error.
4917 Don't talk about array types here, since we took care of that
4918 message in grokdeclarator. */
4919 error ("storage size of %qD isn%'t known", decl);
4920 TREE_TYPE (decl) = error_mark_node;
4922 #if 0
4923 /* Keep this code around in case we later want to control debug info
4924 based on whether a type is "used". (jason 1999-11-11) */
4926 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4927 /* Let debugger know it should output info for this type. */
4928 note_debug_info_needed (ttype);
4930 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4931 note_debug_info_needed (DECL_CONTEXT (decl));
4932 #endif
4934 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4935 && DECL_SIZE (decl) != NULL_TREE
4936 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4938 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4939 constant_expression_warning (DECL_SIZE (decl));
4940 else
4942 error ("storage size of %qD isn%'t constant", decl);
4943 TREE_TYPE (decl) = error_mark_node;
4948 /* If a local static variable is declared in an inline function, or if
4949 we have a weak definition, we must endeavor to create only one
4950 instance of the variable at link-time. */
4952 void
4953 maybe_commonize_var (tree decl)
4955 /* Static data in a function with comdat linkage also has comdat
4956 linkage. */
4957 if (TREE_STATIC (decl)
4958 /* Don't mess with __FUNCTION__. */
4959 && ! DECL_ARTIFICIAL (decl)
4960 && DECL_FUNCTION_SCOPE_P (decl)
4961 && vague_linkage_p (DECL_CONTEXT (decl)))
4963 if (flag_weak)
4965 /* With weak symbols, we simply make the variable COMDAT;
4966 that will cause copies in multiple translations units to
4967 be merged. */
4968 comdat_linkage (decl);
4970 else
4972 if (DECL_INITIAL (decl) == NULL_TREE
4973 || DECL_INITIAL (decl) == error_mark_node)
4975 /* Without weak symbols, we can use COMMON to merge
4976 uninitialized variables. */
4977 TREE_PUBLIC (decl) = 1;
4978 DECL_COMMON (decl) = 1;
4980 else
4982 /* While for initialized variables, we must use internal
4983 linkage -- which means that multiple copies will not
4984 be merged. */
4985 TREE_PUBLIC (decl) = 0;
4986 DECL_COMMON (decl) = 0;
4987 warning_at (input_location, 0,
4988 "sorry: semantics of inline function static "
4989 "data %q+#D are wrong (you%'ll wind up "
4990 "with multiple copies)", decl);
4991 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4992 " you can work around this by removing "
4993 "the initializer");
4997 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4998 /* Set it up again; we might have set DECL_INITIAL since the last
4999 time. */
5000 comdat_linkage (decl);
5003 /* Issue an error message if DECL is an uninitialized const variable. */
5005 static void
5006 check_for_uninitialized_const_var (tree decl)
5008 tree type = strip_array_types (TREE_TYPE (decl));
5010 /* ``Unless explicitly declared extern, a const object does not have
5011 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5012 7.1.6 */
5013 if (VAR_P (decl)
5014 && TREE_CODE (type) != REFERENCE_TYPE
5015 && CP_TYPE_CONST_P (type)
5016 && !DECL_INITIAL (decl))
5018 tree field = default_init_uninitialized_part (type);
5019 if (!field)
5020 return;
5022 permerror (DECL_SOURCE_LOCATION (decl),
5023 "uninitialized const %qD", decl);
5025 if (CLASS_TYPE_P (type))
5027 tree defaulted_ctor;
5029 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5030 "%q#T has no user-provided default constructor", type);
5031 defaulted_ctor = in_class_defaulted_default_constructor (type);
5032 if (defaulted_ctor)
5033 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5034 "constructor is not user-provided because it is "
5035 "explicitly defaulted in the class body");
5036 inform (0, "and the implicitly-defined constructor does not "
5037 "initialize %q+#D", field);
5042 /* Structure holding the current initializer being processed by reshape_init.
5043 CUR is a pointer to the current element being processed, END is a pointer
5044 after the last element present in the initializer. */
5045 typedef struct reshape_iterator_t
5047 constructor_elt *cur;
5048 constructor_elt *end;
5049 } reshape_iter;
5051 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5053 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5054 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5055 initialized. If there are no more such fields, the return value
5056 will be NULL. */
5058 tree
5059 next_initializable_field (tree field)
5061 while (field
5062 && (TREE_CODE (field) != FIELD_DECL
5063 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5064 || DECL_ARTIFICIAL (field)))
5065 field = DECL_CHAIN (field);
5067 return field;
5070 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5071 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5072 INTEGER_CST representing the size of the array minus one (the maximum index),
5073 or NULL_TREE if the array was declared without specifying the size. D is
5074 the iterator within the constructor. */
5076 static tree
5077 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5078 tsubst_flags_t complain)
5080 tree new_init;
5081 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5082 unsigned HOST_WIDE_INT max_index_cst = 0;
5083 unsigned HOST_WIDE_INT index;
5085 /* The initializer for an array is always a CONSTRUCTOR. */
5086 new_init = build_constructor (init_list_type_node, NULL);
5088 if (sized_array_p)
5090 /* Minus 1 is used for zero sized arrays. */
5091 if (integer_all_onesp (max_index))
5092 return new_init;
5094 if (host_integerp (max_index, 1))
5095 max_index_cst = tree_low_cst (max_index, 1);
5096 /* sizetype is sign extended, not zero extended. */
5097 else
5098 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
5102 /* Loop until there are no more initializers. */
5103 for (index = 0;
5104 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5105 ++index)
5107 tree elt_init;
5108 constructor_elt *old_cur = d->cur;
5110 check_array_designated_initializer (d->cur, index);
5111 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5112 complain);
5113 if (elt_init == error_mark_node)
5114 return error_mark_node;
5115 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5116 size_int (index), elt_init);
5117 if (!TREE_CONSTANT (elt_init))
5118 TREE_CONSTANT (new_init) = false;
5120 /* This can happen with an invalid initializer (c++/54501). */
5121 if (d->cur == old_cur && !sized_array_p)
5122 break;
5125 return new_init;
5128 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5129 Parameters are the same of reshape_init_r. */
5131 static tree
5132 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5134 tree max_index = NULL_TREE;
5136 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5138 if (TYPE_DOMAIN (type))
5139 max_index = array_type_nelts (type);
5141 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5144 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5145 Parameters are the same of reshape_init_r. */
5147 static tree
5148 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5150 tree max_index = NULL_TREE;
5152 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5154 if (COMPOUND_LITERAL_P (d->cur->value))
5156 tree value = d->cur->value;
5157 if (!same_type_p (TREE_TYPE (value), type))
5159 if (complain & tf_error)
5160 error ("invalid type %qT as initializer for a vector of type %qT",
5161 TREE_TYPE (d->cur->value), type);
5162 value = error_mark_node;
5164 ++d->cur;
5165 return value;
5168 /* For a vector, we initialize it as an array of the appropriate size. */
5169 if (TREE_CODE (type) == VECTOR_TYPE)
5170 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5172 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5175 /* Subroutine of reshape_init_r, processes the initializers for classes
5176 or union. Parameters are the same of reshape_init_r. */
5178 static tree
5179 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5180 tsubst_flags_t complain)
5182 tree field;
5183 tree new_init;
5185 gcc_assert (CLASS_TYPE_P (type));
5187 /* The initializer for a class is always a CONSTRUCTOR. */
5188 new_init = build_constructor (init_list_type_node, NULL);
5189 field = next_initializable_field (TYPE_FIELDS (type));
5191 if (!field)
5193 /* [dcl.init.aggr]
5195 An initializer for an aggregate member that is an
5196 empty class shall have the form of an empty
5197 initializer-list {}. */
5198 if (!first_initializer_p)
5200 if (complain & tf_error)
5201 error ("initializer for %qT must be brace-enclosed", type);
5202 return error_mark_node;
5204 return new_init;
5207 /* Loop through the initializable fields, gathering initializers. */
5208 while (d->cur != d->end)
5210 tree field_init;
5211 constructor_elt *old_cur = d->cur;
5213 /* Handle designated initializers, as an extension. */
5214 if (d->cur->index)
5216 if (d->cur->index == error_mark_node)
5217 return error_mark_node;
5219 if (TREE_CODE (d->cur->index) == INTEGER_CST)
5221 if (complain & tf_error)
5222 error ("%<[%E] =%> used in a GNU-style designated initializer"
5223 " for class %qT", d->cur->index, type);
5224 return error_mark_node;
5227 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5228 /* We already reshaped this. */
5229 gcc_assert (d->cur->index == field);
5230 else
5231 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5233 if (!field || TREE_CODE (field) != FIELD_DECL)
5235 if (complain & tf_error)
5236 error ("%qT has no non-static data member named %qD", type,
5237 d->cur->index);
5238 return error_mark_node;
5242 /* If we processed all the member of the class, we are done. */
5243 if (!field)
5244 break;
5246 field_init = reshape_init_r (TREE_TYPE (field), d,
5247 /*first_initializer_p=*/false, complain);
5248 if (field_init == error_mark_node)
5249 return error_mark_node;
5251 if (d->cur == old_cur && d->cur->index)
5253 /* This can happen with an invalid initializer for a flexible
5254 array member (c++/54441). */
5255 if (complain & tf_error)
5256 error ("invalid initializer for %q#D", field);
5257 return error_mark_node;
5260 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5262 /* [dcl.init.aggr]
5264 When a union is initialized with a brace-enclosed
5265 initializer, the braces shall only contain an
5266 initializer for the first member of the union. */
5267 if (TREE_CODE (type) == UNION_TYPE)
5268 break;
5270 field = next_initializable_field (DECL_CHAIN (field));
5273 return new_init;
5276 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5277 designators are not valid; either complain or return true to indicate
5278 that reshape_init_r should return error_mark_node. */
5280 static bool
5281 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5283 if (d->cur->index)
5285 if (complain & tf_error)
5286 error ("C99 designator %qE outside aggregate initializer",
5287 d->cur->index);
5288 else
5289 return true;
5291 return false;
5294 /* Subroutine of reshape_init, which processes a single initializer (part of
5295 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5296 iterator within the CONSTRUCTOR which points to the initializer to process.
5297 FIRST_INITIALIZER_P is true if this is the first initializer of the
5298 outermost CONSTRUCTOR node. */
5300 static tree
5301 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5302 tsubst_flags_t complain)
5304 tree init = d->cur->value;
5306 if (error_operand_p (init))
5307 return error_mark_node;
5309 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5310 && has_designator_problem (d, complain))
5311 return error_mark_node;
5313 if (TREE_CODE (type) == COMPLEX_TYPE)
5315 /* A complex type can be initialized from one or two initializers,
5316 but braces are not elided. */
5317 d->cur++;
5318 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5320 if (CONSTRUCTOR_NELTS (init) > 2)
5322 if (complain & tf_error)
5323 error ("too many initializers for %qT", type);
5324 else
5325 return error_mark_node;
5328 else if (first_initializer_p && d->cur != d->end)
5330 vec<constructor_elt, va_gc> *v = 0;
5331 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5332 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5333 if (has_designator_problem (d, complain))
5334 return error_mark_node;
5335 d->cur++;
5336 init = build_constructor (init_list_type_node, v);
5338 return init;
5341 /* A non-aggregate type is always initialized with a single
5342 initializer. */
5343 if (!CP_AGGREGATE_TYPE_P (type))
5345 /* It is invalid to initialize a non-aggregate type with a
5346 brace-enclosed initializer before C++0x.
5347 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5348 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5349 a CONSTRUCTOR (with a record type). */
5350 if (TREE_CODE (init) == CONSTRUCTOR
5351 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5353 if (SCALAR_TYPE_P (type))
5355 if (complain & tf_error)
5356 error ("braces around scalar initializer for type %qT", type);
5357 init = error_mark_node;
5359 else
5360 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5363 d->cur++;
5364 return init;
5367 /* [dcl.init.aggr]
5369 All implicit type conversions (clause _conv_) are considered when
5370 initializing the aggregate member with an initializer from an
5371 initializer-list. If the initializer can initialize a member,
5372 the member is initialized. Otherwise, if the member is itself a
5373 non-empty subaggregate, brace elision is assumed and the
5374 initializer is considered for the initialization of the first
5375 member of the subaggregate. */
5376 if (TREE_CODE (init) != CONSTRUCTOR
5377 /* But don't try this for the first initializer, since that would be
5378 looking through the outermost braces; A a2 = { a1 }; is not a
5379 valid aggregate initialization. */
5380 && !first_initializer_p
5381 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5382 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5383 complain)))
5385 d->cur++;
5386 return init;
5389 /* [dcl.init.string]
5391 A char array (whether plain char, signed char, or unsigned char)
5392 can be initialized by a string-literal (optionally enclosed in
5393 braces); a wchar_t array can be initialized by a wide
5394 string-literal (optionally enclosed in braces). */
5395 if (TREE_CODE (type) == ARRAY_TYPE
5396 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5398 tree str_init = init;
5400 /* Strip one level of braces if and only if they enclose a single
5401 element (as allowed by [dcl.init.string]). */
5402 if (!first_initializer_p
5403 && TREE_CODE (str_init) == CONSTRUCTOR
5404 && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5406 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5409 /* If it's a string literal, then it's the initializer for the array
5410 as a whole. Otherwise, continue with normal initialization for
5411 array types (one value per array element). */
5412 if (TREE_CODE (str_init) == STRING_CST)
5414 if (has_designator_problem (d, complain))
5415 return error_mark_node;
5416 d->cur++;
5417 return str_init;
5421 /* The following cases are about aggregates. If we are not within a full
5422 initializer already, and there is not a CONSTRUCTOR, it means that there
5423 is a missing set of braces (that is, we are processing the case for
5424 which reshape_init exists). */
5425 if (!first_initializer_p)
5427 if (TREE_CODE (init) == CONSTRUCTOR)
5429 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5430 /* There is no need to reshape pointer-to-member function
5431 initializers, as they are always constructed correctly
5432 by the front end. */
5434 else if (COMPOUND_LITERAL_P (init))
5435 /* For a nested compound literal, there is no need to reshape since
5436 brace elision is not allowed. Even if we decided to allow it,
5437 we should add a call to reshape_init in finish_compound_literal,
5438 before calling digest_init, so changing this code would still
5439 not be necessary. */
5440 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5441 else
5443 ++d->cur;
5444 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5445 return reshape_init (type, init, complain);
5449 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5450 type);
5453 /* Dispatch to specialized routines. */
5454 if (CLASS_TYPE_P (type))
5455 return reshape_init_class (type, d, first_initializer_p, complain);
5456 else if (TREE_CODE (type) == ARRAY_TYPE)
5457 return reshape_init_array (type, d, complain);
5458 else if (TREE_CODE (type) == VECTOR_TYPE)
5459 return reshape_init_vector (type, d, complain);
5460 else
5461 gcc_unreachable();
5464 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5465 brace-enclosed aggregate initializer.
5467 INIT is the CONSTRUCTOR containing the list of initializers describing
5468 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5469 It may not presently match the shape of the TYPE; for example:
5471 struct S { int a; int b; };
5472 struct S a[] = { 1, 2, 3, 4 };
5474 Here INIT will hold a vector of four elements, rather than a
5475 vector of two elements, each itself a vector of two elements. This
5476 routine transforms INIT from the former form into the latter. The
5477 revised CONSTRUCTOR node is returned. */
5479 tree
5480 reshape_init (tree type, tree init, tsubst_flags_t complain)
5482 vec<constructor_elt, va_gc> *v;
5483 reshape_iter d;
5484 tree new_init;
5486 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5488 v = CONSTRUCTOR_ELTS (init);
5490 /* An empty constructor does not need reshaping, and it is always a valid
5491 initializer. */
5492 if (vec_safe_is_empty (v))
5493 return init;
5495 /* Recurse on this CONSTRUCTOR. */
5496 d.cur = &(*v)[0];
5497 d.end = d.cur + v->length ();
5499 new_init = reshape_init_r (type, &d, true, complain);
5500 if (new_init == error_mark_node)
5501 return error_mark_node;
5503 /* Make sure all the element of the constructor were used. Otherwise,
5504 issue an error about exceeding initializers. */
5505 if (d.cur != d.end)
5507 if (complain & tf_error)
5508 error ("too many initializers for %qT", type);
5509 else
5510 return error_mark_node;
5513 return new_init;
5516 /* Verify array initializer. Returns true if errors have been reported. */
5518 bool
5519 check_array_initializer (tree decl, tree type, tree init)
5521 tree element_type = TREE_TYPE (type);
5523 /* The array type itself need not be complete, because the
5524 initializer may tell us how many elements are in the array.
5525 But, the elements of the array must be complete. */
5526 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5528 if (decl)
5529 error ("elements of array %q#D have incomplete type", decl);
5530 else
5531 error ("elements of array %q#T have incomplete type", type);
5532 return true;
5534 /* A compound literal can't have variable size. */
5535 if (init && !decl
5536 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5537 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5539 error ("variable-sized compound literal");
5540 return true;
5542 return false;
5545 /* Subroutine of check_initializer; args are passed down from that function.
5546 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5548 static tree
5549 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5552 gcc_assert (stmts_are_full_exprs_p ());
5553 return build_aggr_init (decl, init, flags, tf_warning_or_error);
5556 /* Verify INIT (the initializer for DECL), and record the
5557 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5558 grok_reference_init.
5560 If the return value is non-NULL, it is an expression that must be
5561 evaluated dynamically to initialize DECL. */
5563 static tree
5564 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5566 tree type = TREE_TYPE (decl);
5567 tree init_code = NULL;
5568 tree extra_init = NULL_TREE;
5569 tree core_type;
5571 /* Things that are going to be initialized need to have complete
5572 type. */
5573 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5575 if (DECL_HAS_VALUE_EXPR_P (decl))
5577 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5578 it doesn't have storage to be initialized. */
5579 gcc_assert (init == NULL_TREE);
5580 return NULL_TREE;
5583 if (type == error_mark_node)
5584 /* We will have already complained. */
5585 return NULL_TREE;
5587 if (TREE_CODE (type) == ARRAY_TYPE)
5589 if (check_array_initializer (decl, type, init))
5590 return NULL_TREE;
5592 else if (!COMPLETE_TYPE_P (type))
5594 error ("%q#D has incomplete type", decl);
5595 TREE_TYPE (decl) = error_mark_node;
5596 return NULL_TREE;
5598 else
5599 /* There is no way to make a variable-sized class type in GNU C++. */
5600 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5602 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5604 int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5605 if (SCALAR_TYPE_P (type))
5607 if (init_len == 0)
5609 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5610 init = build_zero_init (type, NULL_TREE, false);
5612 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5614 error ("scalar object %qD requires one element in initializer",
5615 decl);
5616 TREE_TYPE (decl) = error_mark_node;
5617 return NULL_TREE;
5622 if (TREE_CODE (decl) == CONST_DECL)
5624 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5626 DECL_INITIAL (decl) = init;
5628 gcc_assert (init != NULL_TREE);
5629 init = NULL_TREE;
5631 else if (!init && DECL_REALLY_EXTERN (decl))
5633 else if (init || type_build_ctor_call (type)
5634 || TREE_CODE (type) == REFERENCE_TYPE)
5636 if (TREE_CODE (type) == REFERENCE_TYPE)
5638 init = grok_reference_init (decl, type, init, flags);
5639 flags |= LOOKUP_ALREADY_DIGESTED;
5641 else if (!init)
5642 check_for_uninitialized_const_var (decl);
5643 /* Do not reshape constructors of vectors (they don't need to be
5644 reshaped. */
5645 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5647 if (is_std_init_list (type))
5649 init = perform_implicit_conversion (type, init,
5650 tf_warning_or_error);
5651 flags |= LOOKUP_ALREADY_DIGESTED;
5653 else if (TYPE_NON_AGGREGATE_CLASS (type))
5655 /* Don't reshape if the class has constructors. */
5656 if (cxx_dialect == cxx98)
5657 error ("in C++98 %qD must be initialized by constructor, "
5658 "not by %<{...}%>",
5659 decl);
5661 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5663 error ("opaque vector types cannot be initialized");
5664 init = error_mark_node;
5666 else
5668 init = reshape_init (type, init, tf_warning_or_error);
5669 if (SCALAR_TYPE_P (type))
5670 check_narrowing (type, init);
5674 /* If DECL has an array type without a specific bound, deduce the
5675 array size from the initializer. */
5676 maybe_deduce_size_from_array_init (decl, init);
5677 type = TREE_TYPE (decl);
5678 if (type == error_mark_node)
5679 return NULL_TREE;
5681 if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5682 && !(flags & LOOKUP_ALREADY_DIGESTED)
5683 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5684 && CP_AGGREGATE_TYPE_P (type)
5685 && (CLASS_TYPE_P (type)
5686 || !TYPE_NEEDS_CONSTRUCTING (type)
5687 || type_has_extended_temps (type))))
5689 init_code = build_aggr_init_full_exprs (decl, init, flags);
5691 /* A constructor call is a non-trivial initializer even if
5692 it isn't explicitly written. */
5693 if (TREE_SIDE_EFFECTS (init_code))
5694 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5696 /* If this is a constexpr initializer, expand_default_init will
5697 have returned an INIT_EXPR rather than a CALL_EXPR. In that
5698 case, pull the initializer back out and pass it down into
5699 store_init_value. */
5700 while (TREE_CODE (init_code) == EXPR_STMT
5701 || TREE_CODE (init_code) == CONVERT_EXPR)
5702 init_code = TREE_OPERAND (init_code, 0);
5703 if (TREE_CODE (init_code) == INIT_EXPR)
5705 init = TREE_OPERAND (init_code, 1);
5706 init_code = NULL_TREE;
5707 /* Don't call digest_init; it's unnecessary and will complain
5708 about aggregate initialization of non-aggregate classes. */
5709 flags |= LOOKUP_ALREADY_DIGESTED;
5711 else if (DECL_DECLARED_CONSTEXPR_P (decl))
5713 /* Declared constexpr, but no suitable initializer; massage
5714 init appropriately so we can pass it into store_init_value
5715 for the error. */
5716 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5717 init = finish_compound_literal (type, init,
5718 tf_warning_or_error);
5719 else if (CLASS_TYPE_P (type)
5720 && (!init || TREE_CODE (init) == TREE_LIST))
5722 init = build_functional_cast (type, init, tf_none);
5723 if (TREE_CODE (init) == TARGET_EXPR)
5724 TARGET_EXPR_DIRECT_INIT_P (init) = true;
5726 init_code = NULL_TREE;
5728 else
5729 init = NULL_TREE;
5732 if (init && TREE_CODE (init) != TREE_VEC)
5734 /* In aggregate initialization of a variable, each element
5735 initialization is a full-expression because there is no
5736 enclosing expression. */
5737 gcc_assert (stmts_are_full_exprs_p ());
5739 init_code = store_init_value (decl, init, cleanups, flags);
5741 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5742 && DECL_INITIAL (decl)
5743 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5744 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5745 warning (0, "array %qD initialized by parenthesized string literal %qE",
5746 decl, DECL_INITIAL (decl));
5747 init = NULL;
5750 else
5752 if (CLASS_TYPE_P (core_type = strip_array_types (type))
5753 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5754 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5755 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5756 /*complain=*/true);
5758 check_for_uninitialized_const_var (decl);
5761 if (init && init != error_mark_node)
5762 init_code = build2 (INIT_EXPR, type, decl, init);
5764 if (extra_init)
5765 init_code = add_stmt_to_compound (extra_init, init_code);
5767 if (init_code && DECL_IN_AGGR_P (decl))
5769 static int explained = 0;
5771 if (cxx_dialect < cxx11)
5772 error ("initializer invalid for static member with constructor");
5773 else
5774 error ("non-constant in-class initialization invalid for static "
5775 "member %qD", decl);
5776 if (!explained)
5778 error ("(an out of class initialization is required)");
5779 explained = 1;
5783 return init_code;
5786 /* If DECL is not a local variable, give it RTL. */
5788 static void
5789 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5791 int toplev = toplevel_bindings_p ();
5792 int defer_p;
5793 const char *filename;
5795 /* Set the DECL_ASSEMBLER_NAME for the object. */
5796 if (asmspec)
5798 /* The `register' keyword, when used together with an
5799 asm-specification, indicates that the variable should be
5800 placed in a particular register. */
5801 if (VAR_P (decl) && DECL_REGISTER (decl))
5803 set_user_assembler_name (decl, asmspec);
5804 DECL_HARD_REGISTER (decl) = 1;
5806 else
5808 if (TREE_CODE (decl) == FUNCTION_DECL
5809 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5810 set_builtin_user_assembler_name (decl, asmspec);
5811 set_user_assembler_name (decl, asmspec);
5815 /* Handle non-variables up front. */
5816 if (!VAR_P (decl))
5818 rest_of_decl_compilation (decl, toplev, at_eof);
5819 return;
5822 /* If we see a class member here, it should be a static data
5823 member. */
5824 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5826 gcc_assert (TREE_STATIC (decl));
5827 /* An in-class declaration of a static data member should be
5828 external; it is only a declaration, and not a definition. */
5829 if (init == NULL_TREE)
5830 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5833 /* We don't create any RTL for local variables. */
5834 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5835 return;
5837 /* We defer emission of local statics until the corresponding
5838 DECL_EXPR is expanded. */
5839 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5841 /* We try to defer namespace-scope static constants so that they are
5842 not emitted into the object file unnecessarily. */
5843 filename = input_filename;
5844 if (!DECL_VIRTUAL_P (decl)
5845 && TREE_READONLY (decl)
5846 && DECL_INITIAL (decl) != NULL_TREE
5847 && DECL_INITIAL (decl) != error_mark_node
5848 && filename != NULL
5849 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5850 && toplev
5851 && !TREE_PUBLIC (decl))
5853 /* Fool with the linkage of static consts according to #pragma
5854 interface. */
5855 struct c_fileinfo *finfo = get_fileinfo (filename);
5856 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5858 TREE_PUBLIC (decl) = 1;
5859 DECL_EXTERNAL (decl) = finfo->interface_only;
5862 defer_p = 1;
5864 /* Likewise for template instantiations. */
5865 else if (DECL_LANG_SPECIFIC (decl)
5866 && DECL_IMPLICIT_INSTANTIATION (decl))
5867 defer_p = 1;
5869 /* If we're not deferring, go ahead and assemble the variable. */
5870 if (!defer_p)
5871 rest_of_decl_compilation (decl, toplev, at_eof);
5874 /* walk_tree helper for wrap_temporary_cleanups, below. */
5876 static tree
5877 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5879 /* Stop at types or full-expression boundaries. */
5880 if (TYPE_P (*stmt_p)
5881 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5883 *walk_subtrees = 0;
5884 return NULL_TREE;
5887 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5889 tree guard = (tree)data;
5890 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5892 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5893 /* Tell honor_protect_cleanup_actions to handle this as a separate
5894 cleanup. */
5895 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5897 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5900 return NULL_TREE;
5903 /* We're initializing a local variable which has a cleanup GUARD. If there
5904 are any temporaries used in the initializer INIT of this variable, we
5905 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5906 variable will be cleaned up properly if one of them throws.
5908 Unfortunately, there's no way to express this properly in terms of
5909 nesting, as the regions for the temporaries overlap the region for the
5910 variable itself; if there are two temporaries, the variable needs to be
5911 the first thing destroyed if either of them throws. However, we only
5912 want to run the variable's cleanup if it actually got constructed. So
5913 we need to guard the temporary cleanups with the variable's cleanup if
5914 they are run on the normal path, but not if they are run on the
5915 exceptional path. We implement this by telling
5916 honor_protect_cleanup_actions to strip the variable cleanup from the
5917 exceptional path. */
5919 static void
5920 wrap_temporary_cleanups (tree init, tree guard)
5922 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5925 /* Generate code to initialize DECL (a local variable). */
5927 static void
5928 initialize_local_var (tree decl, tree init)
5930 tree type = TREE_TYPE (decl);
5931 tree cleanup;
5932 int already_used;
5934 gcc_assert (VAR_P (decl)
5935 || TREE_CODE (decl) == RESULT_DECL);
5936 gcc_assert (!TREE_STATIC (decl));
5938 if (DECL_SIZE (decl) == NULL_TREE)
5940 /* If we used it already as memory, it must stay in memory. */
5941 DECL_INITIAL (decl) = NULL_TREE;
5942 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5943 return;
5946 if (type == error_mark_node)
5947 return;
5949 /* Compute and store the initial value. */
5950 already_used = TREE_USED (decl) || TREE_USED (type);
5951 if (TREE_USED (type))
5952 DECL_READ_P (decl) = 1;
5954 /* Generate a cleanup, if necessary. */
5955 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5957 /* Perform the initialization. */
5958 if (init)
5960 if (TREE_CODE (init) == INIT_EXPR
5961 && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5963 /* Stick simple initializers in DECL_INITIAL so that
5964 -Wno-init-self works (c++/34772). */
5965 gcc_assert (TREE_OPERAND (init, 0) == decl);
5966 DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5968 else
5970 int saved_stmts_are_full_exprs_p;
5972 /* If we're only initializing a single object, guard the
5973 destructors of any temporaries used in its initializer with
5974 its destructor. This isn't right for arrays because each
5975 element initialization is a full-expression. */
5976 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5977 wrap_temporary_cleanups (init, cleanup);
5979 gcc_assert (building_stmt_list_p ());
5980 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5981 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5982 finish_expr_stmt (init);
5983 current_stmt_tree ()->stmts_are_full_exprs_p =
5984 saved_stmts_are_full_exprs_p;
5988 /* Set this to 0 so we can tell whether an aggregate which was
5989 initialized was ever used. Don't do this if it has a
5990 destructor, so we don't complain about the 'resource
5991 allocation is initialization' idiom. Now set
5992 attribute((unused)) on types so decls of that type will be
5993 marked used. (see TREE_USED, above.) */
5994 if (TYPE_NEEDS_CONSTRUCTING (type)
5995 && ! already_used
5996 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5997 && DECL_NAME (decl))
5998 TREE_USED (decl) = 0;
5999 else if (already_used)
6000 TREE_USED (decl) = 1;
6002 if (cleanup)
6003 finish_decl_cleanup (decl, cleanup);
6006 /* DECL is a VAR_DECL for a compiler-generated variable with static
6007 storage duration (like a virtual table) whose initializer is a
6008 compile-time constant. Initialize the variable and provide it to the
6009 back end. */
6011 void
6012 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6014 tree init;
6015 gcc_assert (DECL_ARTIFICIAL (decl));
6016 init = build_constructor (TREE_TYPE (decl), v);
6017 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6018 DECL_INITIAL (decl) = init;
6019 DECL_INITIALIZED_P (decl) = 1;
6020 determine_visibility (decl);
6021 layout_var_decl (decl);
6022 maybe_commonize_var (decl);
6023 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6026 /* INIT is the initializer for a variable, as represented by the
6027 parser. Returns true iff INIT is type-dependent. */
6029 static bool
6030 type_dependent_init_p (tree init)
6032 if (TREE_CODE (init) == TREE_LIST)
6033 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6034 return any_type_dependent_elements_p (init);
6035 else if (TREE_CODE (init) == CONSTRUCTOR)
6036 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6038 vec<constructor_elt, va_gc> *elts;
6039 size_t nelts;
6040 size_t i;
6042 elts = CONSTRUCTOR_ELTS (init);
6043 nelts = vec_safe_length (elts);
6044 for (i = 0; i < nelts; ++i)
6045 if (type_dependent_init_p ((*elts)[i].value))
6046 return true;
6048 else
6049 /* It must be a simple expression, e.g., int i = 3; */
6050 return type_dependent_expression_p (init);
6052 return false;
6055 /* INIT is the initializer for a variable, as represented by the
6056 parser. Returns true iff INIT is value-dependent. */
6058 static bool
6059 value_dependent_init_p (tree init)
6061 if (TREE_CODE (init) == TREE_LIST)
6062 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6063 return any_value_dependent_elements_p (init);
6064 else if (TREE_CODE (init) == CONSTRUCTOR)
6065 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6067 vec<constructor_elt, va_gc> *elts;
6068 size_t nelts;
6069 size_t i;
6071 elts = CONSTRUCTOR_ELTS (init);
6072 nelts = vec_safe_length (elts);
6073 for (i = 0; i < nelts; ++i)
6074 if (value_dependent_init_p ((*elts)[i].value))
6075 return true;
6077 else
6078 /* It must be a simple expression, e.g., int i = 3; */
6079 return value_dependent_expression_p (init);
6081 return false;
6084 /* Finish processing of a declaration;
6085 install its line number and initial value.
6086 If the length of an array type is not known before,
6087 it must be determined now, from the initial value, or it is an error.
6089 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6090 true, then INIT is an integral constant expression.
6092 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6093 if the (init) syntax was used. */
6095 void
6096 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6097 tree asmspec_tree, int flags)
6099 tree type;
6100 vec<tree, va_gc> *cleanups = NULL;
6101 const char *asmspec = NULL;
6102 int was_readonly = 0;
6103 bool var_definition_p = false;
6104 tree auto_node;
6106 if (decl == error_mark_node)
6107 return;
6108 else if (! decl)
6110 if (init)
6111 error ("assignment (not initialization) in declaration");
6112 return;
6115 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6116 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6117 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6119 type = TREE_TYPE (decl);
6120 if (type == error_mark_node)
6121 return;
6123 /* If a name was specified, get the string. */
6124 if (at_namespace_scope_p ())
6125 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6126 if (asmspec_tree && asmspec_tree != error_mark_node)
6127 asmspec = TREE_STRING_POINTER (asmspec_tree);
6129 if (current_class_type
6130 && CP_DECL_CONTEXT (decl) == current_class_type
6131 && TYPE_BEING_DEFINED (current_class_type)
6132 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6133 && (DECL_INITIAL (decl) || init))
6134 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6136 if (TREE_CODE (decl) != FUNCTION_DECL
6137 && (auto_node = type_uses_auto (type)))
6139 tree d_init;
6140 if (init == NULL_TREE)
6142 if (DECL_LANG_SPECIFIC (decl)
6143 && DECL_TEMPLATE_INSTANTIATION (decl)
6144 && !DECL_TEMPLATE_INSTANTIATED (decl))
6146 /* init is null because we're deferring instantiating the
6147 initializer until we need it. Well, we need it now. */
6148 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6149 return;
6152 error ("declaration of %q#D has no initializer", decl);
6153 TREE_TYPE (decl) = error_mark_node;
6154 return;
6156 d_init = init;
6157 if (TREE_CODE (d_init) == TREE_LIST)
6158 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6159 tf_warning_or_error);
6160 d_init = resolve_nondeduced_context (d_init);
6161 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6162 auto_node);
6163 if (type == error_mark_node)
6164 return;
6165 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6168 if (!ensure_literal_type_for_constexpr_object (decl))
6169 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6171 if (VAR_P (decl)
6172 && DECL_CLASS_SCOPE_P (decl)
6173 && DECL_INITIALIZED_IN_CLASS_P (decl))
6174 check_static_variable_definition (decl, type);
6176 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6178 tree clone;
6179 if (init == ridpointers[(int)RID_DELETE])
6181 /* FIXME check this is 1st decl. */
6182 DECL_DELETED_FN (decl) = 1;
6183 DECL_DECLARED_INLINE_P (decl) = 1;
6184 DECL_INITIAL (decl) = error_mark_node;
6185 FOR_EACH_CLONE (clone, decl)
6187 DECL_DELETED_FN (clone) = 1;
6188 DECL_DECLARED_INLINE_P (clone) = 1;
6189 DECL_INITIAL (clone) = error_mark_node;
6191 init = NULL_TREE;
6193 else if (init == ridpointers[(int)RID_DEFAULT])
6195 if (defaultable_fn_check (decl))
6196 DECL_DEFAULTED_FN (decl) = 1;
6197 else
6198 DECL_INITIAL (decl) = NULL_TREE;
6202 if (init && VAR_P (decl))
6204 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6205 /* If DECL is a reference, then we want to know whether init is a
6206 reference constant; init_const_expr_p as passed tells us whether
6207 it's an rvalue constant. */
6208 if (TREE_CODE (type) == REFERENCE_TYPE)
6209 init_const_expr_p = potential_constant_expression (init);
6210 if (init_const_expr_p)
6212 /* Set these flags now for templates. We'll update the flags in
6213 store_init_value for instantiations. */
6214 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6215 if (decl_maybe_constant_var_p (decl))
6216 TREE_CONSTANT (decl) = 1;
6220 if (processing_template_decl)
6222 bool type_dependent_p;
6224 /* Add this declaration to the statement-tree. */
6225 if (at_function_scope_p ())
6226 add_decl_expr (decl);
6228 type_dependent_p = dependent_type_p (type);
6230 if (check_for_bare_parameter_packs (init))
6232 init = NULL_TREE;
6233 DECL_INITIAL (decl) = NULL_TREE;
6236 /* Generally, initializers in templates are expanded when the
6237 template is instantiated. But, if DECL is a variable constant
6238 then it can be used in future constant expressions, so its value
6239 must be available. */
6241 if (!VAR_P (decl) || dependent_type_p (type))
6242 /* We can't do anything if the decl has dependent type. */;
6243 else if (init
6244 && init_const_expr_p
6245 && !type_dependent_p
6246 && decl_maybe_constant_var_p (decl)
6247 && !type_dependent_init_p (init)
6248 && !value_dependent_init_p (init))
6250 /* This variable seems to be a non-dependent constant, so process
6251 its initializer. If check_initializer returns non-null the
6252 initialization wasn't constant after all. */
6253 tree init_code;
6254 cleanups = make_tree_vector ();
6255 init_code = check_initializer (decl, init, flags, &cleanups);
6256 if (init_code == NULL_TREE)
6257 init = NULL_TREE;
6258 release_tree_vector (cleanups);
6260 else if (!DECL_PRETTY_FUNCTION_P (decl))
6262 /* Deduce array size even if the initializer is dependent. */
6263 maybe_deduce_size_from_array_init (decl, init);
6264 /* And complain about multiple initializers. */
6265 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6266 && !MAYBE_CLASS_TYPE_P (type))
6267 init = build_x_compound_expr_from_list (init, ELK_INIT,
6268 tf_warning_or_error);
6271 if (init)
6272 DECL_INITIAL (decl) = init;
6273 return;
6276 /* Just store non-static data member initializers for later. */
6277 if (init && TREE_CODE (decl) == FIELD_DECL)
6278 DECL_INITIAL (decl) = init;
6280 /* Take care of TYPE_DECLs up front. */
6281 if (TREE_CODE (decl) == TYPE_DECL)
6283 if (type != error_mark_node
6284 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6286 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6287 warning (0, "shadowing previous type declaration of %q#D", decl);
6288 set_identifier_type_value (DECL_NAME (decl), decl);
6291 /* If we have installed this as the canonical typedef for this
6292 type, and that type has not been defined yet, delay emitting
6293 the debug information for it, as we will emit it later. */
6294 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6295 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6296 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6298 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6299 at_eof);
6300 return;
6303 /* A reference will be modified here, as it is initialized. */
6304 if (! DECL_EXTERNAL (decl)
6305 && TREE_READONLY (decl)
6306 && TREE_CODE (type) == REFERENCE_TYPE)
6308 was_readonly = 1;
6309 TREE_READONLY (decl) = 0;
6312 if (VAR_P (decl))
6314 /* If this is a local variable that will need a mangled name,
6315 register it now. We must do this before processing the
6316 initializer for the variable, since the initialization might
6317 require a guard variable, and since the mangled name of the
6318 guard variable will depend on the mangled name of this
6319 variable. */
6320 if (DECL_FUNCTION_SCOPE_P (decl)
6321 && TREE_STATIC (decl)
6322 && !DECL_ARTIFICIAL (decl))
6324 push_local_name (decl);
6325 if (DECL_CONSTRUCTOR_P (current_function_decl)
6326 || DECL_DESTRUCTOR_P (current_function_decl))
6327 /* Normally local_decls is populated during GIMPLE lowering,
6328 but [cd]tors are never actually compiled directly. We need
6329 to put statics on the list so we can deal with the label
6330 address extension. FIXME. */
6331 add_local_decl (cfun, decl);
6334 /* Convert the initializer to the type of DECL, if we have not
6335 already initialized DECL. */
6336 if (!DECL_INITIALIZED_P (decl)
6337 /* If !DECL_EXTERNAL then DECL is being defined. In the
6338 case of a static data member initialized inside the
6339 class-specifier, there can be an initializer even if DECL
6340 is *not* defined. */
6341 && (!DECL_EXTERNAL (decl) || init))
6343 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6345 tree jclass
6346 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6347 /* Allow libjava/prims.cc define primitive classes. */
6348 if (init != NULL_TREE
6349 || jclass == NULL_TREE
6350 || TREE_CODE (jclass) != TYPE_DECL
6351 || !POINTER_TYPE_P (TREE_TYPE (jclass))
6352 || !same_type_ignoring_top_level_qualifiers_p
6353 (type, TREE_TYPE (TREE_TYPE (jclass))))
6354 error ("Java object %qD not allocated with %<new%>", decl);
6355 init = NULL_TREE;
6357 cleanups = make_tree_vector ();
6358 init = check_initializer (decl, init, flags, &cleanups);
6360 /* Handle:
6362 [dcl.init]
6364 The memory occupied by any object of static storage
6365 duration is zero-initialized at program startup before
6366 any other initialization takes place.
6368 We cannot create an appropriate initializer until after
6369 the type of DECL is finalized. If DECL_INITIAL is set,
6370 then the DECL is statically initialized, and any
6371 necessary zero-initialization has already been performed. */
6372 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6373 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6374 /*nelts=*/NULL_TREE,
6375 /*static_storage_p=*/true);
6376 /* Remember that the initialization for this variable has
6377 taken place. */
6378 DECL_INITIALIZED_P (decl) = 1;
6379 /* This declaration is the definition of this variable,
6380 unless we are initializing a static data member within
6381 the class specifier. */
6382 if (!DECL_EXTERNAL (decl))
6383 var_definition_p = true;
6385 /* If the variable has an array type, lay out the type, even if
6386 there is no initializer. It is valid to index through the
6387 array, and we must get TYPE_ALIGN set correctly on the array
6388 type. */
6389 else if (TREE_CODE (type) == ARRAY_TYPE)
6390 layout_type (type);
6392 if (TREE_STATIC (decl)
6393 && !at_function_scope_p ()
6394 && current_function_decl == NULL)
6395 /* So decl is a global variable or a static member of a
6396 non local class. Record the types it uses
6397 so that we can decide later to emit debug info for them. */
6398 record_types_used_by_current_var_decl (decl);
6400 else if (TREE_CODE (decl) == FIELD_DECL
6401 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6402 error ("non-static data member %qD has Java class type", decl);
6404 /* Add this declaration to the statement-tree. This needs to happen
6405 after the call to check_initializer so that the DECL_EXPR for a
6406 reference temp is added before the DECL_EXPR for the reference itself. */
6407 if (DECL_FUNCTION_SCOPE_P (decl))
6408 add_decl_expr (decl);
6410 /* Let the middle end know about variables and functions -- but not
6411 static data members in uninstantiated class templates. */
6412 if (VAR_OR_FUNCTION_DECL_P (decl))
6414 if (VAR_P (decl))
6416 layout_var_decl (decl);
6417 maybe_commonize_var (decl);
6420 /* This needs to happen after the linkage is set. */
6421 determine_visibility (decl);
6423 if (var_definition_p && TREE_STATIC (decl))
6425 /* If a TREE_READONLY variable needs initialization
6426 at runtime, it is no longer readonly and we need to
6427 avoid MEM_READONLY_P being set on RTL created for it. */
6428 if (init)
6430 if (TREE_READONLY (decl))
6431 TREE_READONLY (decl) = 0;
6432 was_readonly = 0;
6434 else if (was_readonly)
6435 TREE_READONLY (decl) = 1;
6437 /* Likewise if it needs destruction. */
6438 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6439 TREE_READONLY (decl) = 0;
6442 make_rtl_for_nonlocal_decl (decl, init, asmspec);
6444 /* Check for abstractness of the type. Notice that there is no
6445 need to strip array types here since the check for those types
6446 is already done within create_array_type_for_decl. */
6447 abstract_virtuals_error (decl, type);
6449 if (TREE_TYPE (decl) == error_mark_node)
6450 /* No initialization required. */
6452 else if (TREE_CODE (decl) == FUNCTION_DECL)
6454 if (init)
6456 if (init == ridpointers[(int)RID_DEFAULT])
6458 /* An out-of-class default definition is defined at
6459 the point where it is explicitly defaulted. */
6460 if (DECL_DELETED_FN (decl))
6461 maybe_explain_implicit_delete (decl);
6462 else if (DECL_INITIAL (decl) == error_mark_node)
6463 synthesize_method (decl);
6465 else
6466 error ("function %q#D is initialized like a variable", decl);
6468 /* else no initialization required. */
6470 else if (DECL_EXTERNAL (decl)
6471 && ! (DECL_LANG_SPECIFIC (decl)
6472 && DECL_NOT_REALLY_EXTERN (decl)))
6474 if (init)
6475 DECL_INITIAL (decl) = init;
6477 /* A variable definition. */
6478 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6479 /* Initialize the local variable. */
6480 initialize_local_var (decl, init);
6482 /* If a variable is defined, and then a subsequent
6483 definition with external linkage is encountered, we will
6484 get here twice for the same variable. We want to avoid
6485 calling expand_static_init more than once. For variables
6486 that are not static data members, we can call
6487 expand_static_init only when we actually process the
6488 initializer. It is not legal to redeclare a static data
6489 member, so this issue does not arise in that case. */
6490 else if (var_definition_p && TREE_STATIC (decl))
6491 expand_static_init (decl, init);
6494 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6495 reference, insert it in the statement-tree now. */
6496 if (cleanups)
6498 unsigned i; tree t;
6499 FOR_EACH_VEC_ELT (*cleanups, i, t)
6500 push_cleanup (decl, t, false);
6501 release_tree_vector (cleanups);
6504 if (was_readonly)
6505 TREE_READONLY (decl) = 1;
6507 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6510 /* Returns a declaration for a VAR_DECL as if:
6512 extern "C" TYPE NAME;
6514 had been seen. Used to create compiler-generated global
6515 variables. */
6517 static tree
6518 declare_global_var (tree name, tree type)
6520 tree decl;
6522 push_to_top_level ();
6523 decl = build_decl (input_location, VAR_DECL, name, type);
6524 TREE_PUBLIC (decl) = 1;
6525 DECL_EXTERNAL (decl) = 1;
6526 DECL_ARTIFICIAL (decl) = 1;
6527 /* If the user has explicitly declared this variable (perhaps
6528 because the code we are compiling is part of a low-level runtime
6529 library), then it is possible that our declaration will be merged
6530 with theirs by pushdecl. */
6531 decl = pushdecl (decl);
6532 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6533 pop_from_top_level ();
6535 return decl;
6538 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6539 if "__cxa_atexit" is not being used) corresponding to the function
6540 to be called when the program exits. */
6542 static tree
6543 get_atexit_fn_ptr_type (void)
6545 tree fn_type;
6547 if (!atexit_fn_ptr_type_node)
6549 tree arg_type;
6550 if (flag_use_cxa_atexit
6551 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6552 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6553 arg_type = ptr_type_node;
6554 else
6555 /* The parameter to "atexit" is "void (*)(void)". */
6556 arg_type = NULL_TREE;
6558 fn_type = build_function_type_list (void_type_node,
6559 arg_type, NULL_TREE);
6560 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6563 return atexit_fn_ptr_type_node;
6566 /* Returns a pointer to the `atexit' function. Note that if
6567 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6568 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6570 static tree
6571 get_atexit_node (void)
6573 tree atexit_fndecl;
6574 tree fn_type;
6575 tree fn_ptr_type;
6576 const char *name;
6577 bool use_aeabi_atexit;
6579 if (atexit_node)
6580 return atexit_node;
6582 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6584 /* The declaration for `__cxa_atexit' is:
6586 int __cxa_atexit (void (*)(void *), void *, void *)
6588 We build up the argument types and then the function type
6589 itself. */
6590 tree argtype0, argtype1, argtype2;
6592 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6593 /* First, build the pointer-to-function type for the first
6594 argument. */
6595 fn_ptr_type = get_atexit_fn_ptr_type ();
6596 /* Then, build the rest of the argument types. */
6597 argtype2 = ptr_type_node;
6598 if (use_aeabi_atexit)
6600 argtype1 = fn_ptr_type;
6601 argtype0 = ptr_type_node;
6603 else
6605 argtype1 = ptr_type_node;
6606 argtype0 = fn_ptr_type;
6608 /* And the final __cxa_atexit type. */
6609 fn_type = build_function_type_list (integer_type_node,
6610 argtype0, argtype1, argtype2,
6611 NULL_TREE);
6612 if (use_aeabi_atexit)
6613 name = "__aeabi_atexit";
6614 else
6615 name = "__cxa_atexit";
6617 else
6619 /* The declaration for `atexit' is:
6621 int atexit (void (*)());
6623 We build up the argument types and then the function type
6624 itself. */
6625 fn_ptr_type = get_atexit_fn_ptr_type ();
6626 /* Build the final atexit type. */
6627 fn_type = build_function_type_list (integer_type_node,
6628 fn_ptr_type, NULL_TREE);
6629 name = "atexit";
6632 /* Now, build the function declaration. */
6633 push_lang_context (lang_name_c);
6634 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6635 mark_used (atexit_fndecl);
6636 pop_lang_context ();
6637 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6639 return atexit_node;
6642 /* Like get_atexit_node, but for thread-local cleanups. */
6644 static tree
6645 get_thread_atexit_node (void)
6647 /* The declaration for `__cxa_thread_atexit' is:
6649 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6650 tree fn_type = build_function_type_list (integer_type_node,
6651 get_atexit_fn_ptr_type (),
6652 ptr_type_node, ptr_type_node,
6653 NULL_TREE);
6655 /* Now, build the function declaration. */
6656 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6657 ECF_LEAF | ECF_NOTHROW);
6658 return decay_conversion (atexit_fndecl, tf_warning_or_error);
6661 /* Returns the __dso_handle VAR_DECL. */
6663 static tree
6664 get_dso_handle_node (void)
6666 if (dso_handle_node)
6667 return dso_handle_node;
6669 /* Declare the variable. */
6670 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6671 ptr_type_node);
6673 #ifdef HAVE_GAS_HIDDEN
6674 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6675 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6676 #endif
6678 return dso_handle_node;
6681 /* Begin a new function with internal linkage whose job will be simply
6682 to destroy some particular variable. */
6684 static GTY(()) int start_cleanup_cnt;
6686 static tree
6687 start_cleanup_fn (void)
6689 char name[32];
6690 tree fntype;
6691 tree fndecl;
6692 bool use_cxa_atexit = flag_use_cxa_atexit
6693 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6695 push_to_top_level ();
6697 /* No need to mangle this. */
6698 push_lang_context (lang_name_c);
6700 /* Build the name of the function. */
6701 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6702 /* Build the function declaration. */
6703 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6704 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6705 /* It's a function with internal linkage, generated by the
6706 compiler. */
6707 TREE_PUBLIC (fndecl) = 0;
6708 DECL_ARTIFICIAL (fndecl) = 1;
6709 /* Make the function `inline' so that it is only emitted if it is
6710 actually needed. It is unlikely that it will be inlined, since
6711 it is only called via a function pointer, but we avoid unnecessary
6712 emissions this way. */
6713 DECL_DECLARED_INLINE_P (fndecl) = 1;
6714 DECL_INTERFACE_KNOWN (fndecl) = 1;
6715 /* Build the parameter. */
6716 if (use_cxa_atexit)
6718 tree parmdecl;
6720 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6721 DECL_CONTEXT (parmdecl) = fndecl;
6722 TREE_USED (parmdecl) = 1;
6723 DECL_READ_P (parmdecl) = 1;
6724 DECL_ARGUMENTS (fndecl) = parmdecl;
6727 pushdecl (fndecl);
6728 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6730 pop_lang_context ();
6732 return current_function_decl;
6735 /* Finish the cleanup function begun by start_cleanup_fn. */
6737 static void
6738 end_cleanup_fn (void)
6740 expand_or_defer_fn (finish_function (0));
6742 pop_from_top_level ();
6745 /* Generate code to handle the destruction of DECL, an object with
6746 static storage duration. */
6748 tree
6749 register_dtor_fn (tree decl)
6751 tree cleanup;
6752 tree addr;
6753 tree compound_stmt;
6754 tree fcall;
6755 tree type;
6756 bool ob_parm, dso_parm, use_dtor;
6757 tree arg0, arg1, arg2;
6758 tree atex_node;
6760 type = TREE_TYPE (decl);
6761 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6762 return void_zero_node;
6764 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
6765 "__aeabi_atexit"), and DECL is a class object, we can just pass the
6766 destructor to "__cxa_atexit"; we don't have to build a temporary
6767 function to do the cleanup. */
6768 dso_parm = (flag_use_cxa_atexit
6769 && !targetm.cxx.use_atexit_for_cxa_atexit ());
6770 ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
6771 use_dtor = ob_parm && CLASS_TYPE_P (type);
6772 if (use_dtor)
6774 int idx;
6776 /* Find the destructor. */
6777 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6778 gcc_assert (idx >= 0);
6779 cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
6780 /* Make sure it is accessible. */
6781 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
6782 tf_warning_or_error);
6784 else
6786 /* Call build_cleanup before we enter the anonymous function so
6787 that any access checks will be done relative to the current
6788 scope, rather than the scope of the anonymous function. */
6789 build_cleanup (decl);
6791 /* Now start the function. */
6792 cleanup = start_cleanup_fn ();
6794 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6795 to the original function, rather than the anonymous one. That
6796 will make the back end think that nested functions are in use,
6797 which causes confusion. */
6798 push_deferring_access_checks (dk_no_check);
6799 fcall = build_cleanup (decl);
6800 pop_deferring_access_checks ();
6802 /* Create the body of the anonymous function. */
6803 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6804 finish_expr_stmt (fcall);
6805 finish_compound_stmt (compound_stmt);
6806 end_cleanup_fn ();
6809 /* Call atexit with the cleanup function. */
6810 mark_used (cleanup);
6811 cleanup = build_address (cleanup);
6813 if (DECL_THREAD_LOCAL_P (decl))
6814 atex_node = get_thread_atexit_node ();
6815 else
6816 atex_node = get_atexit_node ();
6818 if (use_dtor)
6820 /* We must convert CLEANUP to the type that "__cxa_atexit"
6821 expects. */
6822 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6823 /* "__cxa_atexit" will pass the address of DECL to the
6824 cleanup function. */
6825 mark_used (decl);
6826 addr = build_address (decl);
6827 /* The declared type of the parameter to "__cxa_atexit" is
6828 "void *". For plain "T*", we could just let the
6829 machinery in cp_build_function_call convert it -- but if the
6830 type is "cv-qualified T *", then we need to convert it
6831 before passing it in, to avoid spurious errors. */
6832 addr = build_nop (ptr_type_node, addr);
6834 else
6835 /* Since the cleanup functions we build ignore the address
6836 they're given, there's no reason to pass the actual address
6837 in, and, in general, it's cheaper to pass NULL than any
6838 other value. */
6839 addr = null_pointer_node;
6841 if (dso_parm)
6842 arg2 = cp_build_addr_expr (get_dso_handle_node (),
6843 tf_warning_or_error);
6844 else if (ob_parm)
6845 /* Just pass NULL to the dso handle parm if we don't actually
6846 have a DSO handle on this target. */
6847 arg2 = null_pointer_node;
6848 else
6849 arg2 = NULL_TREE;
6851 if (ob_parm)
6853 if (!DECL_THREAD_LOCAL_P (decl)
6854 && targetm.cxx.use_aeabi_atexit ())
6856 arg1 = cleanup;
6857 arg0 = addr;
6859 else
6861 arg1 = addr;
6862 arg0 = cleanup;
6865 else
6867 arg0 = cleanup;
6868 arg1 = NULL_TREE;
6870 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
6871 arg0, arg1, arg2, NULL_TREE);
6874 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6875 is its initializer. Generate code to handle the construction
6876 and destruction of DECL. */
6878 static void
6879 expand_static_init (tree decl, tree init)
6881 gcc_assert (VAR_P (decl));
6882 gcc_assert (TREE_STATIC (decl));
6884 /* Some variables require no dynamic initialization. */
6885 if (!init
6886 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6888 /* Make sure the destructor is callable. */
6889 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6890 return;
6893 if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
6894 && !DECL_FUNCTION_SCOPE_P (decl))
6896 if (init)
6897 error ("non-local variable %qD declared %<__thread%> "
6898 "needs dynamic initialization", decl);
6899 else
6900 error ("non-local variable %qD declared %<__thread%> "
6901 "has a non-trivial destructor", decl);
6902 static bool informed;
6903 if (!informed)
6905 inform (DECL_SOURCE_LOCATION (decl),
6906 "C++11 %<thread_local%> allows dynamic initialization "
6907 "and destruction");
6908 informed = true;
6910 return;
6913 if (DECL_FUNCTION_SCOPE_P (decl))
6915 /* Emit code to perform this initialization but once. */
6916 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6917 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6918 tree guard, guard_addr;
6919 tree flag, begin;
6920 /* We don't need thread-safety code for thread-local vars. */
6921 bool thread_guard = (flag_threadsafe_statics
6922 && !DECL_THREAD_LOCAL_P (decl));
6924 /* Emit code to perform this initialization but once. This code
6925 looks like:
6927 static <type> guard;
6928 if (!guard.first_byte) {
6929 if (__cxa_guard_acquire (&guard)) {
6930 bool flag = false;
6931 try {
6932 // Do initialization.
6933 flag = true; __cxa_guard_release (&guard);
6934 // Register variable for destruction at end of program.
6935 } catch {
6936 if (!flag) __cxa_guard_abort (&guard);
6940 Note that the `flag' variable is only set to 1 *after* the
6941 initialization is complete. This ensures that an exception,
6942 thrown during the construction, will cause the variable to
6943 reinitialized when we pass through this code again, as per:
6945 [stmt.dcl]
6947 If the initialization exits by throwing an exception, the
6948 initialization is not complete, so it will be tried again
6949 the next time control enters the declaration.
6951 This process should be thread-safe, too; multiple threads
6952 should not be able to initialize the variable more than
6953 once. */
6955 /* Create the guard variable. */
6956 guard = get_guard (decl);
6958 /* This optimization isn't safe on targets with relaxed memory
6959 consistency. On such targets we force synchronization in
6960 __cxa_guard_acquire. */
6961 if (!targetm.relaxed_ordering || !thread_guard)
6963 /* Begin the conditional initialization. */
6964 if_stmt = begin_if_stmt ();
6965 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6966 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6969 if (thread_guard)
6971 tree vfntype = NULL_TREE;
6972 tree acquire_name, release_name, abort_name;
6973 tree acquire_fn, release_fn, abort_fn;
6974 guard_addr = build_address (guard);
6976 acquire_name = get_identifier ("__cxa_guard_acquire");
6977 release_name = get_identifier ("__cxa_guard_release");
6978 abort_name = get_identifier ("__cxa_guard_abort");
6979 acquire_fn = identifier_global_value (acquire_name);
6980 release_fn = identifier_global_value (release_name);
6981 abort_fn = identifier_global_value (abort_name);
6982 if (!acquire_fn)
6983 acquire_fn = push_library_fn
6984 (acquire_name, build_function_type_list (integer_type_node,
6985 TREE_TYPE (guard_addr),
6986 NULL_TREE),
6987 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
6988 if (!release_fn || !abort_fn)
6989 vfntype = build_function_type_list (void_type_node,
6990 TREE_TYPE (guard_addr),
6991 NULL_TREE);
6992 if (!release_fn)
6993 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
6994 ECF_NOTHROW | ECF_LEAF);
6995 if (!abort_fn)
6996 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
6997 ECF_NOTHROW | ECF_LEAF);
6999 inner_if_stmt = begin_if_stmt ();
7000 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7001 inner_if_stmt);
7003 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7004 begin = get_target_expr (boolean_false_node);
7005 flag = TARGET_EXPR_SLOT (begin);
7007 TARGET_EXPR_CLEANUP (begin)
7008 = build3 (COND_EXPR, void_type_node, flag,
7009 void_zero_node,
7010 build_call_n (abort_fn, 1, guard_addr));
7011 CLEANUP_EH_ONLY (begin) = 1;
7013 /* Do the initialization itself. */
7014 init = add_stmt_to_compound (begin, init);
7015 init = add_stmt_to_compound
7016 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7017 init = add_stmt_to_compound
7018 (init, build_call_n (release_fn, 1, guard_addr));
7020 else
7021 init = add_stmt_to_compound (init, set_guard (guard));
7023 /* Use atexit to register a function for destroying this static
7024 variable. */
7025 init = add_stmt_to_compound (init, register_dtor_fn (decl));
7027 finish_expr_stmt (init);
7029 if (thread_guard)
7031 finish_compound_stmt (inner_then_clause);
7032 finish_then_clause (inner_if_stmt);
7033 finish_if_stmt (inner_if_stmt);
7036 if (!targetm.relaxed_ordering || !thread_guard)
7038 finish_compound_stmt (then_clause);
7039 finish_then_clause (if_stmt);
7040 finish_if_stmt (if_stmt);
7043 else if (DECL_THREAD_LOCAL_P (decl))
7044 tls_aggregates = tree_cons (init, decl, tls_aggregates);
7045 else
7046 static_aggregates = tree_cons (init, decl, static_aggregates);
7050 /* Make TYPE a complete type based on INITIAL_VALUE.
7051 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7052 2 if there was no information (in which case assume 0 if DO_DEFAULT),
7053 3 if the initializer list is empty (in pedantic mode). */
7056 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7058 int failure;
7059 tree type, elt_type;
7061 if (initial_value)
7063 unsigned HOST_WIDE_INT i;
7064 tree value;
7066 /* An array of character type can be initialized from a
7067 brace-enclosed string constant.
7069 FIXME: this code is duplicated from reshape_init. Probably
7070 we should just call reshape_init here? */
7071 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7072 && TREE_CODE (initial_value) == CONSTRUCTOR
7073 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7075 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7076 tree value = (*v)[0].value;
7078 if (TREE_CODE (value) == STRING_CST
7079 && v->length () == 1)
7080 initial_value = value;
7083 /* If any of the elements are parameter packs, we can't actually
7084 complete this type now because the array size is dependent. */
7085 if (TREE_CODE (initial_value) == CONSTRUCTOR)
7087 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
7088 i, value)
7090 if (PACK_EXPANSION_P (value))
7091 return 0;
7096 failure = complete_array_type (ptype, initial_value, do_default);
7098 /* We can create the array before the element type is complete, which
7099 means that we didn't have these two bits set in the original type
7100 either. In completing the type, we are expected to propagate these
7101 bits. See also complete_type which does the same thing for arrays
7102 of fixed size. */
7103 type = *ptype;
7104 if (TYPE_DOMAIN (type))
7106 elt_type = TREE_TYPE (type);
7107 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7108 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7109 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7112 return failure;
7115 /* As above, but either give an error or reject zero-size arrays, depending
7116 on COMPLAIN. */
7119 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7120 bool do_default, tsubst_flags_t complain)
7122 int failure;
7123 bool sfinae = !(complain & tf_error);
7124 /* In SFINAE context we can't be lenient about zero-size arrays. */
7125 if (sfinae)
7126 ++pedantic;
7127 failure = cp_complete_array_type (ptype, initial_value, do_default);
7128 if (sfinae)
7129 --pedantic;
7130 if (failure)
7132 if (sfinae)
7133 /* Not an error. */;
7134 else if (failure == 1)
7135 error ("initializer fails to determine size of %qT", *ptype);
7136 else if (failure == 2)
7138 if (do_default)
7139 error ("array size missing in %qT", *ptype);
7141 else if (failure == 3)
7142 error ("zero-size array %qT", *ptype);
7143 *ptype = error_mark_node;
7145 return failure;
7148 /* Return zero if something is declared to be a member of type
7149 CTYPE when in the context of CUR_TYPE. STRING is the error
7150 message to print in that case. Otherwise, quietly return 1. */
7152 static int
7153 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7155 if (ctype && ctype != cur_type)
7157 if (flags == DTOR_FLAG)
7158 error ("destructor for alien class %qT cannot be a member", ctype);
7159 else
7160 error ("constructor for alien class %qT cannot be a member", ctype);
7161 return 0;
7163 return 1;
7166 /* Subroutine of `grokdeclarator'. */
7168 /* Generate errors possibly applicable for a given set of specifiers.
7169 This is for ARM $7.1.2. */
7171 static void
7172 bad_specifiers (tree object,
7173 enum bad_spec_place type,
7174 int virtualp,
7175 int quals,
7176 int inlinep,
7177 int friendp,
7178 int raises)
7180 switch (type)
7182 case BSP_VAR:
7183 if (virtualp)
7184 error ("%qD declared as a %<virtual%> variable", object);
7185 if (inlinep)
7186 error ("%qD declared as an %<inline%> variable", object);
7187 if (quals)
7188 error ("%<const%> and %<volatile%> function specifiers on "
7189 "%qD invalid in variable declaration", object);
7190 break;
7191 case BSP_PARM:
7192 if (virtualp)
7193 error ("%qD declared as a %<virtual%> parameter", object);
7194 if (inlinep)
7195 error ("%qD declared as an %<inline%> parameter", object);
7196 if (quals)
7197 error ("%<const%> and %<volatile%> function specifiers on "
7198 "%qD invalid in parameter declaration", object);
7199 break;
7200 case BSP_TYPE:
7201 if (virtualp)
7202 error ("%qD declared as a %<virtual%> type", object);
7203 if (inlinep)
7204 error ("%qD declared as an %<inline%> type", object);
7205 if (quals)
7206 error ("%<const%> and %<volatile%> function specifiers on "
7207 "%qD invalid in type declaration", object);
7208 break;
7209 case BSP_FIELD:
7210 if (virtualp)
7211 error ("%qD declared as a %<virtual%> field", object);
7212 if (inlinep)
7213 error ("%qD declared as an %<inline%> field", object);
7214 if (quals)
7215 error ("%<const%> and %<volatile%> function specifiers on "
7216 "%qD invalid in field declaration", object);
7217 break;
7218 default:
7219 gcc_unreachable();
7221 if (friendp)
7222 error ("%q+D declared as a friend", object);
7223 if (raises
7224 && (TREE_CODE (object) == TYPE_DECL
7225 || (!TYPE_PTRFN_P (TREE_TYPE (object))
7226 && !TYPE_REFFN_P (TREE_TYPE (object))
7227 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7228 error ("%q+D declared with an exception specification", object);
7231 /* DECL is a member function or static data member and is presently
7232 being defined. Check that the definition is taking place in a
7233 valid namespace. */
7235 static void
7236 check_class_member_definition_namespace (tree decl)
7238 /* These checks only apply to member functions and static data
7239 members. */
7240 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7241 /* We check for problems with specializations in pt.c in
7242 check_specialization_namespace, where we can issue better
7243 diagnostics. */
7244 if (processing_specialization)
7245 return;
7246 /* There are no restrictions on the placement of
7247 explicit instantiations. */
7248 if (processing_explicit_instantiation)
7249 return;
7250 /* [class.mfct]
7252 A member function definition that appears outside of the
7253 class definition shall appear in a namespace scope enclosing
7254 the class definition.
7256 [class.static.data]
7258 The definition for a static data member shall appear in a
7259 namespace scope enclosing the member's class definition. */
7260 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7261 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7262 decl, DECL_CONTEXT (decl));
7265 /* Build a PARM_DECL for the "this" parameter. TYPE is the
7266 METHOD_TYPE for a non-static member function; QUALS are the
7267 cv-qualifiers that apply to the function. */
7269 tree
7270 build_this_parm (tree type, cp_cv_quals quals)
7272 tree this_type;
7273 tree qual_type;
7274 tree parm;
7275 cp_cv_quals this_quals;
7277 if (CLASS_TYPE_P (type))
7279 this_type
7280 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7281 this_type = build_pointer_type (this_type);
7283 else
7284 this_type = type_of_this_parm (type);
7285 /* The `this' parameter is implicitly `const'; it cannot be
7286 assigned to. */
7287 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7288 qual_type = cp_build_qualified_type (this_type, this_quals);
7289 parm = build_artificial_parm (this_identifier, qual_type);
7290 cp_apply_type_quals_to_decl (this_quals, parm);
7291 return parm;
7294 /* DECL is a static member function. Complain if it was declared
7295 with function-cv-quals. */
7297 static void
7298 check_static_quals (tree decl, cp_cv_quals quals)
7300 if (quals != TYPE_UNQUALIFIED)
7301 error ("static member function %q#D declared with type qualifiers",
7302 decl);
7305 /* Helper function. Replace the temporary this parameter injected
7306 during cp_finish_omp_declare_simd with the real this parameter. */
7308 static tree
7309 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7311 tree this_parm = (tree) data;
7312 if (TREE_CODE (*tp) == PARM_DECL
7313 && DECL_NAME (*tp) == this_identifier
7314 && *tp != this_parm)
7315 *tp = this_parm;
7316 else if (TYPE_P (*tp))
7317 *walk_subtrees = 0;
7318 return NULL_TREE;
7321 /* CTYPE is class type, or null if non-class.
7322 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7323 or METHOD_TYPE.
7324 DECLARATOR is the function's name.
7325 PARMS is a chain of PARM_DECLs for the function.
7326 VIRTUALP is truthvalue of whether the function is virtual or not.
7327 FLAGS are to be passed through to `grokclassfn'.
7328 QUALS are qualifiers indicating whether the function is `const'
7329 or `volatile'.
7330 RAISES is a list of exceptions that this function can raise.
7331 CHECK is 1 if we must find this method in CTYPE, 0 if we should
7332 not look, and -1 if we should not call `grokclassfn' at all.
7334 SFK is the kind of special function (if any) for the new function.
7336 Returns `NULL_TREE' if something goes wrong, after issuing
7337 applicable error messages. */
7339 static tree
7340 grokfndecl (tree ctype,
7341 tree type,
7342 tree declarator,
7343 tree parms,
7344 tree orig_declarator,
7345 int virtualp,
7346 enum overload_flags flags,
7347 cp_cv_quals quals,
7348 cp_ref_qualifier rqual,
7349 tree raises,
7350 int check,
7351 int friendp,
7352 int publicp,
7353 int inlinep,
7354 special_function_kind sfk,
7355 bool funcdef_flag,
7356 int template_count,
7357 tree in_namespace,
7358 tree* attrlist,
7359 location_t location)
7361 tree decl;
7362 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7363 tree t;
7365 if (rqual)
7366 type = build_ref_qualified_type (type, rqual);
7367 if (raises)
7368 type = build_exception_variant (type, raises);
7370 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7372 /* If we have an explicit location, use it, otherwise use whatever
7373 build_lang_decl used (probably input_location). */
7374 if (location != UNKNOWN_LOCATION)
7375 DECL_SOURCE_LOCATION (decl) = location;
7377 if (TREE_CODE (type) == METHOD_TYPE)
7379 tree parm;
7380 parm = build_this_parm (type, quals);
7381 DECL_CHAIN (parm) = parms;
7382 parms = parm;
7384 DECL_ARGUMENTS (decl) = parms;
7385 for (t = parms; t; t = DECL_CHAIN (t))
7386 DECL_CONTEXT (t) = decl;
7387 /* Propagate volatile out from type to decl. */
7388 if (TYPE_VOLATILE (type))
7389 TREE_THIS_VOLATILE (decl) = 1;
7391 /* Setup decl according to sfk. */
7392 switch (sfk)
7394 case sfk_constructor:
7395 case sfk_copy_constructor:
7396 case sfk_move_constructor:
7397 DECL_CONSTRUCTOR_P (decl) = 1;
7398 break;
7399 case sfk_destructor:
7400 DECL_DESTRUCTOR_P (decl) = 1;
7401 break;
7402 default:
7403 break;
7406 /* If pointers to member functions use the least significant bit to
7407 indicate whether a function is virtual, ensure a pointer
7408 to this function will have that bit clear. */
7409 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7410 && TREE_CODE (type) == METHOD_TYPE
7411 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7412 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7414 if (friendp
7415 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7417 if (funcdef_flag)
7418 error
7419 ("defining explicit specialization %qD in friend declaration",
7420 orig_declarator);
7421 else
7423 tree fns = TREE_OPERAND (orig_declarator, 0);
7424 tree args = TREE_OPERAND (orig_declarator, 1);
7426 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7428 /* Something like `template <class T> friend void f<T>()'. */
7429 error ("invalid use of template-id %qD in declaration "
7430 "of primary template",
7431 orig_declarator);
7432 return NULL_TREE;
7436 /* A friend declaration of the form friend void f<>(). Record
7437 the information in the TEMPLATE_ID_EXPR. */
7438 SET_DECL_IMPLICIT_INSTANTIATION (decl);
7440 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7441 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7443 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7444 if (TREE_PURPOSE (t)
7445 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7447 error ("default arguments are not allowed in declaration "
7448 "of friend template specialization %qD",
7449 decl);
7450 return NULL_TREE;
7453 if (inlinep & 1)
7454 error ("%<inline%> is not allowed in declaration of friend "
7455 "template specialization %qD",
7456 decl);
7457 if (inlinep & 2)
7458 error ("%<constexpr%> is not allowed in declaration of friend "
7459 "template specialization %qD",
7460 decl);
7461 if (inlinep)
7462 return NULL_TREE;
7466 /* If this decl has namespace scope, set that up. */
7467 if (in_namespace)
7468 set_decl_namespace (decl, in_namespace, friendp);
7469 else if (!ctype)
7470 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7472 /* `main' and builtins have implicit 'C' linkage. */
7473 if ((MAIN_NAME_P (declarator)
7474 || (IDENTIFIER_LENGTH (declarator) > 10
7475 && IDENTIFIER_POINTER (declarator)[0] == '_'
7476 && IDENTIFIER_POINTER (declarator)[1] == '_'
7477 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7478 || (targetcm.cxx_implicit_extern_c
7479 && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7480 && current_lang_name == lang_name_cplusplus
7481 && ctype == NULL_TREE
7482 && DECL_FILE_SCOPE_P (decl))
7483 SET_DECL_LANGUAGE (decl, lang_c);
7485 /* Should probably propagate const out from type to decl I bet (mrs). */
7486 if (staticp)
7488 DECL_STATIC_FUNCTION_P (decl) = 1;
7489 DECL_CONTEXT (decl) = ctype;
7492 if (ctype)
7494 DECL_CONTEXT (decl) = ctype;
7495 if (funcdef_flag)
7496 check_class_member_definition_namespace (decl);
7499 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7501 if (PROCESSING_REAL_TEMPLATE_DECL_P())
7502 error ("cannot declare %<::main%> to be a template");
7503 if (inlinep & 1)
7504 error ("cannot declare %<::main%> to be inline");
7505 if (inlinep & 2)
7506 error ("cannot declare %<::main%> to be constexpr");
7507 if (!publicp)
7508 error ("cannot declare %<::main%> to be static");
7509 inlinep = 0;
7510 publicp = 1;
7513 /* Members of anonymous types and local classes have no linkage; make
7514 them internal. If a typedef is made later, this will be changed. */
7515 if (ctype && (TYPE_ANONYMOUS_P (ctype)
7516 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7517 publicp = 0;
7519 if (publicp && cxx_dialect == cxx98)
7521 /* [basic.link]: A name with no linkage (notably, the name of a class
7522 or enumeration declared in a local scope) shall not be used to
7523 declare an entity with linkage.
7525 DR 757 relaxes this restriction for C++0x. */
7526 t = no_linkage_check (TREE_TYPE (decl),
7527 /*relaxed_p=*/false);
7528 if (t)
7530 if (TYPE_ANONYMOUS_P (t))
7532 if (DECL_EXTERN_C_P (decl))
7533 /* Allow this; it's pretty common in C. */;
7534 else
7536 permerror (input_location, "anonymous type with no linkage "
7537 "used to declare function %q#D with linkage",
7538 decl);
7539 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7540 permerror (input_location, "%q+#D does not refer to the unqualified "
7541 "type, so it is not used for linkage",
7542 TYPE_NAME (t));
7545 else
7546 permerror (input_location, "type %qT with no linkage used to "
7547 "declare function %q#D with linkage", t, decl);
7551 TREE_PUBLIC (decl) = publicp;
7552 if (! publicp)
7554 DECL_INTERFACE_KNOWN (decl) = 1;
7555 DECL_NOT_REALLY_EXTERN (decl) = 1;
7558 /* If the declaration was declared inline, mark it as such. */
7559 if (inlinep)
7560 DECL_DECLARED_INLINE_P (decl) = 1;
7561 if (inlinep & 2)
7562 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7564 DECL_EXTERNAL (decl) = 1;
7565 if (TREE_CODE (type) == FUNCTION_TYPE)
7567 if (quals)
7569 error (ctype
7570 ? G_("static member function %qD cannot have cv-qualifier")
7571 : G_("non-member function %qD cannot have cv-qualifier"),
7572 decl);
7573 quals = TYPE_UNQUALIFIED;
7576 if (rqual)
7578 error (ctype
7579 ? G_("static member function %qD cannot have ref-qualifier")
7580 : G_("non-member function %qD cannot have ref-qualifier"),
7581 decl);
7582 rqual = REF_QUAL_NONE;
7586 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7587 && !grok_op_properties (decl, /*complain=*/true))
7588 return NULL_TREE;
7589 else if (UDLIT_OPER_P (DECL_NAME (decl)))
7591 bool long_long_unsigned_p;
7592 bool long_double_p;
7593 const char *suffix = NULL;
7594 /* [over.literal]/6: Literal operators shall not have C linkage. */
7595 if (DECL_LANGUAGE (decl) == lang_c)
7597 error ("literal operator with C linkage");
7598 return NULL_TREE;
7601 if (DECL_NAMESPACE_SCOPE_P (decl))
7603 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7604 &long_double_p))
7606 error ("%qD has invalid argument list", decl);
7607 return NULL_TREE;
7610 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7611 if (long_long_unsigned_p)
7613 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7614 warning (0, "integer suffix %<%s%>"
7615 " shadowed by implementation", suffix);
7617 else if (long_double_p)
7619 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7620 warning (0, "floating point suffix %<%s%>"
7621 " shadowed by implementation", suffix);
7624 else
7626 error ("%qD must be a non-member function", decl);
7627 return NULL_TREE;
7631 if (funcdef_flag)
7632 /* Make the init_value nonzero so pushdecl knows this is not
7633 tentative. error_mark_node is replaced later with the BLOCK. */
7634 DECL_INITIAL (decl) = error_mark_node;
7636 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7637 TREE_NOTHROW (decl) = 1;
7639 if (flag_openmp)
7641 /* Adjust "omp declare simd" attributes. */
7642 tree ods = lookup_attribute ("omp declare simd", *attrlist);
7643 if (ods)
7645 tree attr;
7646 for (attr = ods; attr;
7647 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7649 if (TREE_CODE (type) == METHOD_TYPE)
7650 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7651 DECL_ARGUMENTS (decl), NULL);
7652 if (TREE_VALUE (attr) != NULL_TREE)
7654 tree cl = TREE_VALUE (TREE_VALUE (attr));
7655 cl = c_omp_declare_simd_clauses_to_numbers
7656 (DECL_ARGUMENTS (decl), cl);
7657 if (cl)
7658 TREE_VALUE (TREE_VALUE (attr)) = cl;
7659 else
7660 TREE_VALUE (attr) = NULL_TREE;
7666 /* Caller will do the rest of this. */
7667 if (check < 0)
7668 return decl;
7670 if (ctype != NULL_TREE)
7671 grokclassfn (ctype, decl, flags);
7673 /* 12.4/3 */
7674 if (cxx_dialect >= cxx11
7675 && DECL_DESTRUCTOR_P (decl)
7676 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7677 && !processing_template_decl)
7678 deduce_noexcept_on_destructor (decl);
7680 decl = check_explicit_specialization (orig_declarator, decl,
7681 template_count,
7682 2 * funcdef_flag +
7683 4 * (friendp != 0));
7684 if (decl == error_mark_node)
7685 return NULL_TREE;
7687 if (DECL_STATIC_FUNCTION_P (decl))
7688 check_static_quals (decl, quals);
7690 if (attrlist)
7692 cplus_decl_attributes (&decl, *attrlist, 0);
7693 *attrlist = NULL_TREE;
7696 /* Check main's type after attributes have been applied. */
7697 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7699 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7700 integer_type_node))
7702 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7703 tree newtype;
7704 error ("%<::main%> must return %<int%>");
7705 newtype = build_function_type (integer_type_node, oldtypeargs);
7706 TREE_TYPE (decl) = newtype;
7708 if (warn_main)
7709 check_main_parameter_types (decl);
7712 if (ctype != NULL_TREE
7713 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7714 && check)
7716 tree old_decl = check_classfn (ctype, decl,
7717 (processing_template_decl
7718 > template_class_depth (ctype))
7719 ? current_template_parms
7720 : NULL_TREE);
7722 if (old_decl == error_mark_node)
7723 return NULL_TREE;
7725 if (old_decl)
7727 tree ok;
7728 tree pushed_scope;
7730 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7731 /* Because grokfndecl is always supposed to return a
7732 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7733 here. We depend on our callers to figure out that its
7734 really a template that's being returned. */
7735 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7737 if (DECL_STATIC_FUNCTION_P (old_decl)
7738 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7740 /* Remove the `this' parm added by grokclassfn. */
7741 revert_static_member_fn (decl);
7742 check_static_quals (decl, quals);
7744 if (DECL_ARTIFICIAL (old_decl))
7746 error ("definition of implicitly-declared %qD", old_decl);
7747 return NULL_TREE;
7749 else if (DECL_DEFAULTED_FN (old_decl))
7751 error ("definition of explicitly-defaulted %q+D", decl);
7752 error ("%q+#D explicitly defaulted here", old_decl);
7753 return NULL_TREE;
7756 /* Since we've smashed OLD_DECL to its
7757 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7758 if (TREE_CODE (decl) == TEMPLATE_DECL)
7759 decl = DECL_TEMPLATE_RESULT (decl);
7761 /* Attempt to merge the declarations. This can fail, in
7762 the case of some invalid specialization declarations. */
7763 pushed_scope = push_scope (ctype);
7764 ok = duplicate_decls (decl, old_decl, friendp);
7765 if (pushed_scope)
7766 pop_scope (pushed_scope);
7767 if (!ok)
7769 error ("no %q#D member function declared in class %qT",
7770 decl, ctype);
7771 return NULL_TREE;
7773 return old_decl;
7777 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7778 return NULL_TREE;
7780 if (ctype == NULL_TREE || check)
7781 return decl;
7783 if (virtualp)
7784 DECL_VIRTUAL_P (decl) = 1;
7786 return decl;
7789 /* decl is a FUNCTION_DECL.
7790 specifiers are the parsed virt-specifiers.
7792 Set flags to reflect the virt-specifiers.
7794 Returns decl. */
7796 static tree
7797 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7799 if (decl == NULL_TREE)
7800 return decl;
7801 if (specifiers & VIRT_SPEC_OVERRIDE)
7802 DECL_OVERRIDE_P (decl) = 1;
7803 if (specifiers & VIRT_SPEC_FINAL)
7804 DECL_FINAL_P (decl) = 1;
7805 return decl;
7808 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7809 the linkage that DECL will receive in the object file. */
7811 static void
7812 set_linkage_for_static_data_member (tree decl)
7814 /* A static data member always has static storage duration and
7815 external linkage. Note that static data members are forbidden in
7816 local classes -- the only situation in which a class has
7817 non-external linkage. */
7818 TREE_PUBLIC (decl) = 1;
7819 TREE_STATIC (decl) = 1;
7820 /* For non-template classes, static data members are always put
7821 out in exactly those files where they are defined, just as
7822 with ordinary namespace-scope variables. */
7823 if (!processing_template_decl)
7824 DECL_INTERFACE_KNOWN (decl) = 1;
7827 /* Create a VAR_DECL named NAME with the indicated TYPE.
7829 If SCOPE is non-NULL, it is the class type or namespace containing
7830 the variable. If SCOPE is NULL, the variable should is created in
7831 the innermost enclosings scope. */
7833 static tree
7834 grokvardecl (tree type,
7835 tree name,
7836 const cp_decl_specifier_seq *declspecs,
7837 int initialized,
7838 int constp,
7839 tree scope)
7841 tree decl;
7842 tree explicit_scope;
7844 gcc_assert (!name || identifier_p (name));
7846 /* Compute the scope in which to place the variable, but remember
7847 whether or not that scope was explicitly specified by the user. */
7848 explicit_scope = scope;
7849 if (!scope)
7851 /* An explicit "extern" specifier indicates a namespace-scope
7852 variable. */
7853 if (declspecs->storage_class == sc_extern)
7854 scope = current_decl_namespace ();
7855 else if (!at_function_scope_p ())
7856 scope = current_scope ();
7859 if (scope
7860 && (/* If the variable is a namespace-scope variable declared in a
7861 template, we need DECL_LANG_SPECIFIC. */
7862 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7863 /* Similarly for namespace-scope variables with language linkage
7864 other than C++. */
7865 || (TREE_CODE (scope) == NAMESPACE_DECL
7866 && current_lang_name != lang_name_cplusplus)
7867 /* Similarly for static data members. */
7868 || TYPE_P (scope)))
7869 decl = build_lang_decl (VAR_DECL, name, type);
7870 else
7871 decl = build_decl (input_location, VAR_DECL, name, type);
7873 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7874 set_decl_namespace (decl, explicit_scope, 0);
7875 else
7876 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7878 if (declspecs->storage_class == sc_extern)
7880 DECL_THIS_EXTERN (decl) = 1;
7881 DECL_EXTERNAL (decl) = !initialized;
7884 if (DECL_CLASS_SCOPE_P (decl))
7886 set_linkage_for_static_data_member (decl);
7887 /* This function is only called with out-of-class definitions. */
7888 DECL_EXTERNAL (decl) = 0;
7889 check_class_member_definition_namespace (decl);
7891 /* At top level, either `static' or no s.c. makes a definition
7892 (perhaps tentative), and absence of `static' makes it public. */
7893 else if (toplevel_bindings_p ())
7895 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7896 && (DECL_THIS_EXTERN (decl) || ! constp));
7897 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7899 /* Not at top level, only `static' makes a static definition. */
7900 else
7902 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7903 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7906 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
7908 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7909 if (declspecs->gnu_thread_keyword_p)
7910 DECL_GNU_TLS_P (decl) = true;
7913 /* If the type of the decl has no linkage, make sure that we'll
7914 notice that in mark_used. */
7915 if (cxx_dialect > cxx98
7916 && decl_linkage (decl) != lk_none
7917 && DECL_LANG_SPECIFIC (decl) == NULL
7918 && !DECL_EXTERN_C_P (decl)
7919 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7920 retrofit_lang_decl (decl);
7922 if (TREE_PUBLIC (decl))
7924 /* [basic.link]: A name with no linkage (notably, the name of a class
7925 or enumeration declared in a local scope) shall not be used to
7926 declare an entity with linkage.
7928 DR 757 relaxes this restriction for C++0x. */
7929 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7930 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7931 if (t)
7933 if (TYPE_ANONYMOUS_P (t))
7935 if (DECL_EXTERN_C_P (decl))
7936 /* Allow this; it's pretty common in C. */
7938 else
7940 /* DRs 132, 319 and 389 seem to indicate types with
7941 no linkage can only be used to declare extern "C"
7942 entities. Since it's not always an error in the
7943 ISO C++ 90 Standard, we only issue a warning. */
7944 warning (0, "anonymous type with no linkage used to declare "
7945 "variable %q#D with linkage", decl);
7946 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7947 warning (0, "%q+#D does not refer to the unqualified "
7948 "type, so it is not used for linkage",
7949 TYPE_NAME (t));
7952 else
7953 warning (0, "type %qT with no linkage used to declare variable "
7954 "%q#D with linkage", t, decl);
7957 else
7958 DECL_INTERFACE_KNOWN (decl) = 1;
7960 return decl;
7963 /* Create and return a canonical pointer to member function type, for
7964 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
7966 tree
7967 build_ptrmemfunc_type (tree type)
7969 tree field, fields;
7970 tree t;
7971 tree unqualified_variant = NULL_TREE;
7973 if (type == error_mark_node)
7974 return type;
7976 /* If a canonical type already exists for this type, use it. We use
7977 this method instead of type_hash_canon, because it only does a
7978 simple equality check on the list of field members. */
7980 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7981 return t;
7983 /* Make sure that we always have the unqualified pointer-to-member
7984 type first. */
7985 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7986 unqualified_variant
7987 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7989 t = make_class_type (RECORD_TYPE);
7990 xref_basetypes (t, NULL_TREE);
7992 /* Let the front end know this is a pointer to member function... */
7993 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7994 /* ... and not really a class type. */
7995 SET_CLASS_TYPE_P (t, 0);
7997 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7998 fields = field;
8000 field = build_decl (input_location, FIELD_DECL, delta_identifier,
8001 delta_type_node);
8002 DECL_CHAIN (field) = fields;
8003 fields = field;
8005 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8007 /* Zap out the name so that the back end will give us the debugging
8008 information for this anonymous RECORD_TYPE. */
8009 TYPE_NAME (t) = NULL_TREE;
8011 /* If this is not the unqualified form of this pointer-to-member
8012 type, set the TYPE_MAIN_VARIANT for this type to be the
8013 unqualified type. Since they are actually RECORD_TYPEs that are
8014 not variants of each other, we must do this manually.
8015 As we just built a new type there is no need to do yet another copy. */
8016 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
8018 int type_quals = cp_type_quals (type);
8019 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
8020 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8021 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
8022 TYPE_MAIN_VARIANT (t) = unqualified_variant;
8023 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8024 TYPE_NEXT_VARIANT (unqualified_variant) = t;
8025 TREE_TYPE (TYPE_BINFO (t)) = t;
8028 /* Cache this pointer-to-member type so that we can find it again
8029 later. */
8030 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8032 if (TYPE_STRUCTURAL_EQUALITY_P (type))
8033 SET_TYPE_STRUCTURAL_EQUALITY (t);
8034 else if (TYPE_CANONICAL (type) != type)
8035 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8037 return t;
8040 /* Create and return a pointer to data member type. */
8042 tree
8043 build_ptrmem_type (tree class_type, tree member_type)
8045 if (TREE_CODE (member_type) == METHOD_TYPE)
8047 cp_cv_quals quals = type_memfn_quals (member_type);
8048 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8049 member_type = build_memfn_type (member_type, class_type, quals, rqual);
8050 return build_ptrmemfunc_type (build_pointer_type (member_type));
8052 else
8054 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8055 return build_offset_type (class_type, member_type);
8059 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8060 Check to see that the definition is valid. Issue appropriate error
8061 messages. Return 1 if the definition is particularly bad, or 0
8062 otherwise. */
8064 static int
8065 check_static_variable_definition (tree decl, tree type)
8067 /* Can't check yet if we don't know the type. */
8068 if (dependent_type_p (type))
8069 return 0;
8070 /* If DECL is declared constexpr, we'll do the appropriate checks
8071 in check_initializer. */
8072 if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8073 return 0;
8074 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8076 if (!COMPLETE_TYPE_P (type))
8077 error ("in-class initialization of static data member %q#D of "
8078 "incomplete type", decl);
8079 else if (literal_type_p (type))
8080 permerror (input_location,
8081 "%<constexpr%> needed for in-class initialization of "
8082 "static data member %q#D of non-integral type", decl);
8083 else
8084 error ("in-class initialization of static data member %q#D of "
8085 "non-literal type", decl);
8086 return 1;
8089 /* Motion 10 at San Diego: If a static const integral data member is
8090 initialized with an integral constant expression, the initializer
8091 may appear either in the declaration (within the class), or in
8092 the definition, but not both. If it appears in the class, the
8093 member is a member constant. The file-scope definition is always
8094 required. */
8095 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8097 error ("invalid in-class initialization of static data member "
8098 "of non-integral type %qT",
8099 type);
8100 return 1;
8102 else if (!CP_TYPE_CONST_P (type))
8103 error ("ISO C++ forbids in-class initialization of non-const "
8104 "static member %qD",
8105 decl);
8106 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8107 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8108 "%qD of non-integral type %qT", decl, type);
8110 return 0;
8113 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
8114 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8115 expressions out into temporary variables so that walk_tree doesn't
8116 step into them (c++/15764). */
8118 static tree
8119 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8121 struct pointer_set_t *pset = (struct pointer_set_t *)data;
8122 tree expr = *expr_p;
8123 if (TREE_CODE (expr) == SAVE_EXPR)
8125 tree op = TREE_OPERAND (expr, 0);
8126 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8127 if (TREE_SIDE_EFFECTS (op))
8128 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8129 *walk_subtrees = 0;
8131 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8132 *walk_subtrees = 0;
8133 return NULL;
8136 /* Entry point for the above. */
8138 static void
8139 stabilize_vla_size (tree size)
8141 struct pointer_set_t *pset = pointer_set_create ();
8142 /* Break out any function calls into temporary variables. */
8143 cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
8144 pointer_set_destroy (pset);
8147 /* Helper function for compute_array_index_type. Look for SIZEOF_EXPR
8148 not inside of SAVE_EXPR and fold them. */
8150 static tree
8151 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8153 tree expr = *expr_p;
8154 if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8155 *walk_subtrees = 0;
8156 else if (TREE_CODE (expr) == SIZEOF_EXPR)
8158 *(bool *)data = true;
8159 if (SIZEOF_EXPR_TYPE_P (expr))
8160 expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8161 SIZEOF_EXPR, false);
8162 else if (TYPE_P (TREE_OPERAND (expr, 0)))
8163 expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8164 false);
8165 else
8166 expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8167 false);
8168 if (expr == error_mark_node)
8169 expr = size_one_node;
8170 *expr_p = expr;
8171 *walk_subtrees = 0;
8173 return NULL;
8176 /* Given the SIZE (i.e., number of elements) in an array, compute an
8177 appropriate index type for the array. If non-NULL, NAME is the
8178 name of the thing being declared. */
8180 tree
8181 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8183 tree itype;
8184 tree osize = size;
8185 tree abi_1_itype = NULL_TREE;
8187 if (error_operand_p (size))
8188 return error_mark_node;
8190 if (!type_dependent_expression_p (size))
8192 tree type = TREE_TYPE (size);
8194 mark_rvalue_use (size);
8196 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8197 && TREE_SIDE_EFFECTS (size))
8198 /* In C++98, we mark a non-constant array bound with a magic
8199 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
8200 else
8202 size = fold_non_dependent_expr_sfinae (size, complain);
8204 if (CLASS_TYPE_P (type)
8205 && CLASSTYPE_LITERAL_P (type))
8207 size = build_expr_type_conversion (WANT_INT, size, true);
8208 if (!size)
8210 if (!(complain & tf_error))
8211 return error_mark_node;
8212 if (name)
8213 error ("size of array %qD has non-integral type %qT",
8214 name, type);
8215 else
8216 error ("size of array has non-integral type %qT", type);
8217 size = integer_one_node;
8219 if (size == error_mark_node)
8220 return error_mark_node;
8221 type = TREE_TYPE (size);
8222 /* We didn't support this case in GCC 3.2, so don't bother
8223 trying to model it now in ABI v1. */
8224 abi_1_itype = error_mark_node;
8227 size = maybe_constant_value (size);
8228 if (!TREE_CONSTANT (size))
8229 size = osize;
8232 if (error_operand_p (size))
8233 return error_mark_node;
8235 /* The array bound must be an integer type. */
8236 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8238 if (!(complain & tf_error))
8239 return error_mark_node;
8240 if (name)
8241 error ("size of array %qD has non-integral type %qT", name, type);
8242 else
8243 error ("size of array has non-integral type %qT", type);
8244 size = integer_one_node;
8245 type = TREE_TYPE (size);
8249 /* A type is dependent if it is...an array type constructed from any
8250 dependent type or whose size is specified by a constant expression
8251 that is value-dependent. */
8252 /* We can only call value_dependent_expression_p on integral constant
8253 expressions; treat non-constant expressions as dependent, too. */
8254 if (processing_template_decl
8255 && (type_dependent_expression_p (size)
8256 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8258 /* We cannot do any checking for a SIZE that isn't known to be
8259 constant. Just build the index type and mark that it requires
8260 structural equality checks. */
8261 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8262 size, size_one_node));
8263 TYPE_DEPENDENT_P (itype) = 1;
8264 TYPE_DEPENDENT_P_VALID (itype) = 1;
8265 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8266 return itype;
8269 if (!abi_version_at_least (2) && processing_template_decl
8270 && abi_1_itype == NULL_TREE)
8271 /* For abi-1, we handled all instances in templates the same way,
8272 even when they were non-dependent. This affects the manglings
8273 produced. So, we do the normal checking for non-dependent
8274 sizes, but at the end we'll return the same type that abi-1
8275 would have, but with TYPE_CANONICAL set to the "right"
8276 value that the current ABI would provide. */
8277 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8278 osize, integer_one_node));
8280 /* Normally, the array-bound will be a constant. */
8281 if (TREE_CODE (size) == INTEGER_CST)
8283 /* Check to see if the array bound overflowed. Make that an
8284 error, no matter how generous we're being. */
8285 constant_expression_error (size);
8287 /* An array must have a positive number of elements. */
8288 if (INT_CST_LT (size, integer_zero_node))
8290 if (!(complain & tf_error))
8291 return error_mark_node;
8292 if (name)
8293 error ("size of array %qD is negative", name);
8294 else
8295 error ("size of array is negative");
8296 size = integer_one_node;
8298 /* As an extension we allow zero-sized arrays. */
8299 else if (integer_zerop (size))
8301 if (!(complain & tf_error))
8302 /* We must fail if performing argument deduction (as
8303 indicated by the state of complain), so that
8304 another substitution can be found. */
8305 return error_mark_node;
8306 else if (in_system_header)
8307 /* Allow them in system headers because glibc uses them. */;
8308 else if (name)
8309 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8310 else
8311 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8314 else if (TREE_CONSTANT (size)
8315 /* We don't allow VLAs at non-function scopes, or during
8316 tentative template substitution. */
8317 || !at_function_scope_p ()
8318 || (cxx_dialect < cxx1y && !(complain & tf_error)))
8320 if (!(complain & tf_error))
8321 return error_mark_node;
8322 /* `(int) &fn' is not a valid array bound. */
8323 if (name)
8324 error ("size of array %qD is not an integral constant-expression",
8325 name);
8326 else
8327 error ("size of array is not an integral constant-expression");
8328 size = integer_one_node;
8330 else if (cxx_dialect < cxx1y && pedantic && warn_vla != 0)
8332 if (name)
8333 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8334 else
8335 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8337 else if (warn_vla > 0)
8339 if (name)
8340 warning (OPT_Wvla,
8341 "variable length array %qD is used", name);
8342 else
8343 warning (OPT_Wvla,
8344 "variable length array is used");
8347 if (processing_template_decl && !TREE_CONSTANT (size))
8348 /* A variable sized array. */
8349 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8350 else
8352 HOST_WIDE_INT saved_processing_template_decl;
8354 /* Compute the index of the largest element in the array. It is
8355 one less than the number of elements in the array. We save
8356 and restore PROCESSING_TEMPLATE_DECL so that computations in
8357 cp_build_binary_op will be appropriately folded. */
8358 saved_processing_template_decl = processing_template_decl;
8359 processing_template_decl = 0;
8360 itype = cp_build_binary_op (input_location,
8361 MINUS_EXPR,
8362 cp_convert (ssizetype, size, complain),
8363 cp_convert (ssizetype, integer_one_node,
8364 complain),
8365 complain);
8366 itype = fold (itype);
8367 processing_template_decl = saved_processing_template_decl;
8369 if (!TREE_CONSTANT (itype))
8371 /* A variable sized array. */
8372 itype = variable_size (itype);
8374 if (TREE_CODE (itype) != SAVE_EXPR)
8376 /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8377 they might survive till gimplification. */
8378 tree newitype = itype;
8379 bool found = false;
8380 cp_walk_tree_without_duplicates (&newitype,
8381 fold_sizeof_expr_r, &found);
8382 if (found)
8383 itype = variable_size (fold (newitype));
8386 stabilize_vla_size (itype);
8388 if (cxx_dialect >= cxx1y)
8390 /* If the VLA bound is larger than half the address space,
8391 or less than zero, throw std::bad_array_length. */
8392 tree comp = build2 (LT_EXPR, boolean_type_node, itype,
8393 ssize_int (-1));
8394 comp = build3 (COND_EXPR, void_type_node, comp,
8395 throw_bad_array_length (), void_zero_node);
8396 finish_expr_stmt (comp);
8398 else if (flag_sanitize & SANITIZE_VLA)
8400 /* From C++1y onwards, we throw an exception on a negative
8401 length size of an array; see above. */
8403 /* We have to add 1 -- in the ubsan routine we generate
8404 LE_EXPR rather than LT_EXPR. */
8405 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8406 build_one_cst (TREE_TYPE (itype)));
8407 t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t),
8408 ubsan_instrument_vla (input_location, t), t);
8409 finish_expr_stmt (t);
8412 /* Make sure that there was no overflow when creating to a signed
8413 index type. (For example, on a 32-bit machine, an array with
8414 size 2^32 - 1 is too big.) */
8415 else if (TREE_CODE (itype) == INTEGER_CST
8416 && TREE_OVERFLOW (itype))
8418 if (!(complain & tf_error))
8419 return error_mark_node;
8420 error ("overflow in array dimension");
8421 TREE_OVERFLOW (itype) = 0;
8425 /* Create and return the appropriate index type. */
8426 if (abi_1_itype && abi_1_itype != error_mark_node)
8428 tree t = build_index_type (itype);
8429 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8430 itype = abi_1_itype;
8432 else
8433 itype = build_index_type (itype);
8435 /* If the index type were dependent, we would have returned early, so
8436 remember that it isn't. */
8437 TYPE_DEPENDENT_P (itype) = 0;
8438 TYPE_DEPENDENT_P_VALID (itype) = 1;
8439 return itype;
8442 /* Returns the scope (if any) in which the entity declared by
8443 DECLARATOR will be located. If the entity was declared with an
8444 unqualified name, NULL_TREE is returned. */
8446 tree
8447 get_scope_of_declarator (const cp_declarator *declarator)
8449 while (declarator && declarator->kind != cdk_id)
8450 declarator = declarator->declarator;
8452 /* If the declarator-id is a SCOPE_REF, the scope in which the
8453 declaration occurs is the first operand. */
8454 if (declarator
8455 && declarator->u.id.qualifying_scope)
8456 return declarator->u.id.qualifying_scope;
8458 /* Otherwise, the declarator is not a qualified name; the entity will
8459 be declared in the current scope. */
8460 return NULL_TREE;
8463 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8464 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
8465 with this type. */
8467 static tree
8468 create_array_type_for_decl (tree name, tree type, tree size)
8470 tree itype = NULL_TREE;
8472 /* If things have already gone awry, bail now. */
8473 if (type == error_mark_node || size == error_mark_node)
8474 return error_mark_node;
8476 /* 8.3.4/1: If the type of the identifier of D contains the auto
8477 type-specifier, the program is ill-formed. */
8478 if (pedantic && type_uses_auto (type))
8479 pedwarn (input_location, OPT_Wpedantic,
8480 "declaration of %qD as array of %<auto%>", name);
8482 /* If there are some types which cannot be array elements,
8483 issue an error-message and return. */
8484 switch (TREE_CODE (type))
8486 case VOID_TYPE:
8487 if (name)
8488 error ("declaration of %qD as array of void", name);
8489 else
8490 error ("creating array of void");
8491 return error_mark_node;
8493 case FUNCTION_TYPE:
8494 if (name)
8495 error ("declaration of %qD as array of functions", name);
8496 else
8497 error ("creating array of functions");
8498 return error_mark_node;
8500 case REFERENCE_TYPE:
8501 if (name)
8502 error ("declaration of %qD as array of references", name);
8503 else
8504 error ("creating array of references");
8505 return error_mark_node;
8507 case METHOD_TYPE:
8508 if (name)
8509 error ("declaration of %qD as array of function members", name);
8510 else
8511 error ("creating array of function members");
8512 return error_mark_node;
8514 default:
8515 break;
8518 /* [dcl.array]
8520 The constant expressions that specify the bounds of the arrays
8521 can be omitted only for the first member of the sequence. */
8522 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8524 if (name)
8525 error ("declaration of %qD as multidimensional array must "
8526 "have bounds for all dimensions except the first",
8527 name);
8528 else
8529 error ("multidimensional array must have bounds for all "
8530 "dimensions except the first");
8532 return error_mark_node;
8535 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
8536 pedwarn (input_location, OPT_Wvla, "array of array of runtime bound");
8538 /* Figure out the index type for the array. */
8539 if (size)
8540 itype = compute_array_index_type (name, size, tf_warning_or_error);
8542 /* [dcl.array]
8543 T is called the array element type; this type shall not be [...] an
8544 abstract class type. */
8545 abstract_virtuals_error (name, type);
8547 return build_cplus_array_type (type, itype);
8550 /* Check that it's OK to declare a function with the indicated TYPE.
8551 SFK indicates the kind of special function (if any) that this
8552 function is. OPTYPE is the type given in a conversion operator
8553 declaration, or the class type for a constructor/destructor.
8554 Returns the actual return type of the function; that
8555 may be different than TYPE if an error occurs, or for certain
8556 special functions. */
8558 static tree
8559 check_special_function_return_type (special_function_kind sfk,
8560 tree type,
8561 tree optype)
8563 switch (sfk)
8565 case sfk_constructor:
8566 if (type)
8567 error ("return type specification for constructor invalid");
8569 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8570 type = build_pointer_type (optype);
8571 else
8572 type = void_type_node;
8573 break;
8575 case sfk_destructor:
8576 if (type)
8577 error ("return type specification for destructor invalid");
8578 /* We can't use the proper return type here because we run into
8579 problems with ambiguous bases and covariant returns.
8580 Java classes are left unchanged because (void *) isn't a valid
8581 Java type, and we don't want to change the Java ABI. */
8582 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8583 type = build_pointer_type (void_type_node);
8584 else
8585 type = void_type_node;
8586 break;
8588 case sfk_conversion:
8589 if (type)
8590 error ("return type specified for %<operator %T%>", optype);
8591 type = optype;
8592 break;
8594 default:
8595 gcc_unreachable ();
8598 return type;
8601 /* A variable or data member (whose unqualified name is IDENTIFIER)
8602 has been declared with the indicated TYPE. If the TYPE is not
8603 acceptable, issue an error message and return a type to use for
8604 error-recovery purposes. */
8606 tree
8607 check_var_type (tree identifier, tree type)
8609 if (VOID_TYPE_P (type))
8611 if (!identifier)
8612 error ("unnamed variable or field declared void");
8613 else if (identifier_p (identifier))
8615 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8616 error ("variable or field %qE declared void", identifier);
8618 else
8619 error ("variable or field declared void");
8620 type = error_mark_node;
8623 return type;
8626 /* Functions for adjusting the visibility of a tagged type and its nested
8627 types when it gets a name for linkage purposes from a typedef. */
8629 static void bt_reset_linkage (binding_entry, void *);
8630 static void
8631 reset_type_linkage (tree type)
8633 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
8634 if (CLASS_TYPE_P (type))
8635 binding_table_foreach (CLASSTYPE_NESTED_UTDS (type), bt_reset_linkage, NULL);
8637 static void
8638 bt_reset_linkage (binding_entry b, void */*data*/)
8640 reset_type_linkage (b->type);
8643 /* Given declspecs and a declarator (abstract or otherwise), determine
8644 the name and type of the object declared and construct a DECL node
8645 for it.
8647 DECLSPECS points to the representation of declaration-specifier
8648 sequence that precedes declarator.
8650 DECL_CONTEXT says which syntactic context this declaration is in:
8651 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8652 FUNCDEF for a function definition. Like NORMAL but a few different
8653 error messages in each case. Return value may be zero meaning
8654 this definition is too screwy to try to parse.
8655 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
8656 handle member functions (which have FIELD context).
8657 Return value may be zero meaning this definition is too screwy to
8658 try to parse.
8659 PARM for a parameter declaration (either within a function prototype
8660 or before a function body). Make a PARM_DECL, or return void_type_node.
8661 TPARM for a template parameter declaration.
8662 CATCHPARM for a parameter declaration before a catch clause.
8663 TYPENAME if for a typename (in a cast or sizeof).
8664 Don't make a DECL node; just return the ..._TYPE node.
8665 FIELD for a struct or union field; make a FIELD_DECL.
8666 BITFIELD for a field with specified width.
8668 INITIALIZED is as for start_decl.
8670 ATTRLIST is a pointer to the list of attributes, which may be NULL
8671 if there are none; *ATTRLIST may be modified if attributes from inside
8672 the declarator should be applied to the declaration.
8674 When this function is called, scoping variables (such as
8675 CURRENT_CLASS_TYPE) should reflect the scope in which the
8676 declaration occurs, not the scope in which the new declaration will
8677 be placed. For example, on:
8679 void S::f() { ... }
8681 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8682 should not be `S'.
8684 Returns a DECL (if a declarator is present), a TYPE (if there is no
8685 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8686 error occurs. */
8688 tree
8689 grokdeclarator (const cp_declarator *declarator,
8690 cp_decl_specifier_seq *declspecs,
8691 enum decl_context decl_context,
8692 int initialized,
8693 tree* attrlist)
8695 tree type = NULL_TREE;
8696 int longlong = 0;
8697 int explicit_int128 = 0;
8698 int virtualp, explicitp, friendp, inlinep, staticp;
8699 int explicit_int = 0;
8700 int explicit_char = 0;
8701 int defaulted_int = 0;
8703 tree typedef_decl = NULL_TREE;
8704 const char *name = NULL;
8705 tree typedef_type = NULL_TREE;
8706 /* True if this declarator is a function definition. */
8707 bool funcdef_flag = false;
8708 cp_declarator_kind innermost_code = cdk_error;
8709 int bitfield = 0;
8710 #if 0
8711 /* See the code below that used this. */
8712 tree decl_attr = NULL_TREE;
8713 #endif
8715 /* Keep track of what sort of function is being processed
8716 so that we can warn about default return values, or explicit
8717 return values which do not match prescribed defaults. */
8718 special_function_kind sfk = sfk_none;
8720 tree dname = NULL_TREE;
8721 tree ctor_return_type = NULL_TREE;
8722 enum overload_flags flags = NO_SPECIAL;
8723 /* cv-qualifiers that apply to the declarator, for a declaration of
8724 a member function. */
8725 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8726 /* virt-specifiers that apply to the declarator, for a declaration of
8727 a member function. */
8728 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8729 /* ref-qualifier that applies to the declarator, for a declaration of
8730 a member function. */
8731 cp_ref_qualifier rqual = REF_QUAL_NONE;
8732 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
8733 int type_quals;
8734 tree raises = NULL_TREE;
8735 int template_count = 0;
8736 tree returned_attrs = NULL_TREE;
8737 tree parms = NULL_TREE;
8738 const cp_declarator *id_declarator;
8739 /* The unqualified name of the declarator; either an
8740 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
8741 tree unqualified_id;
8742 /* The class type, if any, in which this entity is located,
8743 or NULL_TREE if none. Note that this value may be different from
8744 the current class type; for example if an attempt is made to declare
8745 "A::f" inside "B", this value will be "A". */
8746 tree ctype = current_class_type;
8747 /* The NAMESPACE_DECL for the namespace in which this entity is
8748 located. If an unqualified name is used to declare the entity,
8749 this value will be NULL_TREE, even if the entity is located at
8750 namespace scope. */
8751 tree in_namespace = NULL_TREE;
8752 cp_storage_class storage_class;
8753 bool unsigned_p, signed_p, short_p, long_p, thread_p;
8754 bool type_was_error_mark_node = false;
8755 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8756 bool template_type_arg = false;
8757 bool template_parm_flag = false;
8758 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8759 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8760 source_location saved_loc = input_location;
8761 const char *errmsg;
8763 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8764 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8765 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8766 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8767 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8768 explicit_int128 = declspecs->explicit_int128_p;
8769 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8771 if (decl_context == FUNCDEF)
8772 funcdef_flag = true, decl_context = NORMAL;
8773 else if (decl_context == MEMFUNCDEF)
8774 funcdef_flag = true, decl_context = FIELD;
8775 else if (decl_context == BITFIELD)
8776 bitfield = 1, decl_context = FIELD;
8777 else if (decl_context == TEMPLATE_TYPE_ARG)
8778 template_type_arg = true, decl_context = TYPENAME;
8779 else if (decl_context == TPARM)
8780 template_parm_flag = true, decl_context = PARM;
8782 if (initialized > 1)
8783 funcdef_flag = true;
8785 /* Look inside a declarator for the name being declared
8786 and get it as a string, for an error message. */
8787 for (id_declarator = declarator;
8788 id_declarator;
8789 id_declarator = id_declarator->declarator)
8791 if (id_declarator->kind != cdk_id)
8792 innermost_code = id_declarator->kind;
8794 switch (id_declarator->kind)
8796 case cdk_function:
8797 if (id_declarator->declarator
8798 && id_declarator->declarator->kind == cdk_id)
8800 sfk = id_declarator->declarator->u.id.sfk;
8801 if (sfk == sfk_destructor)
8802 flags = DTOR_FLAG;
8804 break;
8806 case cdk_id:
8808 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8809 tree decl = id_declarator->u.id.unqualified_name;
8810 if (!decl)
8811 break;
8812 if (qualifying_scope)
8814 if (at_function_scope_p ())
8816 /* [dcl.meaning]
8818 A declarator-id shall not be qualified except
8819 for ...
8821 None of the cases are permitted in block
8822 scope. */
8823 if (qualifying_scope == global_namespace)
8824 error ("invalid use of qualified-name %<::%D%>",
8825 decl);
8826 else if (TYPE_P (qualifying_scope))
8827 error ("invalid use of qualified-name %<%T::%D%>",
8828 qualifying_scope, decl);
8829 else
8830 error ("invalid use of qualified-name %<%D::%D%>",
8831 qualifying_scope, decl);
8832 return error_mark_node;
8834 else if (TYPE_P (qualifying_scope))
8836 ctype = qualifying_scope;
8837 if (!MAYBE_CLASS_TYPE_P (ctype))
8839 error ("%q#T is not a class or a namespace", ctype);
8840 ctype = NULL_TREE;
8842 else if (innermost_code != cdk_function
8843 && current_class_type
8844 && !uniquely_derived_from_p (ctype,
8845 current_class_type))
8847 error ("invalid use of qualified-name %<%T::%D%>",
8848 qualifying_scope, decl);
8849 return error_mark_node;
8852 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8853 in_namespace = qualifying_scope;
8855 switch (TREE_CODE (decl))
8857 case BIT_NOT_EXPR:
8859 tree type;
8861 if (innermost_code != cdk_function)
8863 error ("declaration of %qD as non-function", decl);
8864 return error_mark_node;
8866 else if (!qualifying_scope
8867 && !(current_class_type && at_class_scope_p ()))
8869 error ("declaration of %qD as non-member", decl);
8870 return error_mark_node;
8873 type = TREE_OPERAND (decl, 0);
8874 if (TYPE_P (type))
8875 type = constructor_name (type);
8876 name = identifier_to_locale (IDENTIFIER_POINTER (type));
8877 dname = decl;
8879 break;
8881 case TEMPLATE_ID_EXPR:
8883 tree fns = TREE_OPERAND (decl, 0);
8885 dname = fns;
8886 if (!identifier_p (dname))
8888 gcc_assert (is_overloaded_fn (dname));
8889 dname = DECL_NAME (get_first_fn (dname));
8892 /* Fall through. */
8894 case IDENTIFIER_NODE:
8895 if (identifier_p (decl))
8896 dname = decl;
8898 if (C_IS_RESERVED_WORD (dname))
8900 error ("declarator-id missing; using reserved word %qD",
8901 dname);
8902 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8904 else if (!IDENTIFIER_TYPENAME_P (dname))
8905 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8906 else
8908 gcc_assert (flags == NO_SPECIAL);
8909 flags = TYPENAME_FLAG;
8910 ctor_return_type = TREE_TYPE (dname);
8911 sfk = sfk_conversion;
8912 if (is_typename_at_global_scope (dname))
8913 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8914 else
8915 name = "<invalid operator>";
8917 break;
8919 default:
8920 gcc_unreachable ();
8922 break;
8925 case cdk_array:
8926 case cdk_pointer:
8927 case cdk_reference:
8928 case cdk_ptrmem:
8929 break;
8931 case cdk_error:
8932 return error_mark_node;
8934 default:
8935 gcc_unreachable ();
8937 if (id_declarator->kind == cdk_id)
8938 break;
8941 /* [dcl.fct.edf]
8943 The declarator in a function-definition shall have the form
8944 D1 ( parameter-declaration-clause) ... */
8945 if (funcdef_flag && innermost_code != cdk_function)
8947 error ("function definition does not declare parameters");
8948 return error_mark_node;
8951 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8952 && innermost_code != cdk_function
8953 && ! (ctype && !declspecs->any_specifiers_p))
8955 error ("declaration of %qD as non-function", dname);
8956 return error_mark_node;
8959 if (dname
8960 && identifier_p (dname)
8961 && UDLIT_OPER_P (dname)
8962 && innermost_code != cdk_function)
8964 error ("declaration of %qD as non-function", dname);
8965 return error_mark_node;
8968 if (dname && IDENTIFIER_OPNAME_P (dname))
8970 if (typedef_p)
8972 error ("declaration of %qD as %<typedef%>", dname);
8973 return error_mark_node;
8975 else if (decl_context == PARM || decl_context == CATCHPARM)
8977 error ("declaration of %qD as parameter", dname);
8978 return error_mark_node;
8982 /* Anything declared one level down from the top level
8983 must be one of the parameters of a function
8984 (because the body is at least two levels down). */
8986 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8987 by not allowing C++ class definitions to specify their parameters
8988 with xdecls (must be spec.d in the parmlist).
8990 Since we now wait to push a class scope until we are sure that
8991 we are in a legitimate method context, we must set oldcname
8992 explicitly (since current_class_name is not yet alive).
8994 We also want to avoid calling this a PARM if it is in a namespace. */
8996 if (decl_context == NORMAL && !toplevel_bindings_p ())
8998 cp_binding_level *b = current_binding_level;
8999 current_binding_level = b->level_chain;
9000 if (current_binding_level != 0 && toplevel_bindings_p ())
9001 decl_context = PARM;
9002 current_binding_level = b;
9005 if (name == NULL)
9006 name = decl_context == PARM ? "parameter" : "type name";
9008 if (constexpr_p && typedef_p)
9010 error ("%<constexpr%> cannot appear in a typedef declaration");
9011 return error_mark_node;
9014 /* If there were multiple types specified in the decl-specifier-seq,
9015 issue an error message. */
9016 if (declspecs->multiple_types_p)
9018 error ("two or more data types in declaration of %qs", name);
9019 return error_mark_node;
9022 if (declspecs->conflicting_specifiers_p)
9024 error ("conflicting specifiers in declaration of %qs", name);
9025 return error_mark_node;
9028 /* Extract the basic type from the decl-specifier-seq. */
9029 type = declspecs->type;
9030 if (type == error_mark_node)
9032 type = NULL_TREE;
9033 type_was_error_mark_node = true;
9035 /* If the entire declaration is itself tagged as deprecated then
9036 suppress reports of deprecated items. */
9037 if (type && TREE_DEPRECATED (type)
9038 && deprecated_state != DEPRECATED_SUPPRESS)
9039 warn_deprecated_use (type, NULL_TREE);
9040 if (type && TREE_CODE (type) == TYPE_DECL)
9042 typedef_decl = type;
9043 type = TREE_TYPE (typedef_decl);
9044 if (TREE_DEPRECATED (type)
9045 && DECL_ARTIFICIAL (typedef_decl)
9046 && deprecated_state != DEPRECATED_SUPPRESS)
9047 warn_deprecated_use (type, NULL_TREE);
9049 /* No type at all: default to `int', and set DEFAULTED_INT
9050 because it was not a user-defined typedef. */
9051 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
9053 /* These imply 'int'. */
9054 type = integer_type_node;
9055 defaulted_int = 1;
9057 /* Gather flags. */
9058 explicit_int = declspecs->explicit_int_p;
9059 explicit_char = declspecs->explicit_char_p;
9061 #if 0
9062 /* See the code below that used this. */
9063 if (typedef_decl)
9064 decl_attr = DECL_ATTRIBUTES (typedef_decl);
9065 #endif
9066 typedef_type = type;
9069 if (sfk != sfk_conversion)
9070 ctor_return_type = ctype;
9072 if (sfk != sfk_none)
9073 type = check_special_function_return_type (sfk, type,
9074 ctor_return_type);
9075 else if (type == NULL_TREE)
9077 int is_main;
9079 explicit_int = -1;
9081 /* We handle `main' specially here, because 'main () { }' is so
9082 common. With no options, it is allowed. With -Wreturn-type,
9083 it is a warning. It is only an error with -pedantic-errors. */
9084 is_main = (funcdef_flag
9085 && dname && identifier_p (dname)
9086 && MAIN_NAME_P (dname)
9087 && ctype == NULL_TREE
9088 && in_namespace == NULL_TREE
9089 && current_namespace == global_namespace);
9091 if (type_was_error_mark_node)
9092 /* We've already issued an error, don't complain more. */;
9093 else if (in_system_header || flag_ms_extensions)
9094 /* Allow it, sigh. */;
9095 else if (! is_main)
9096 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9097 else if (pedantic)
9098 pedwarn (input_location, OPT_Wpedantic,
9099 "ISO C++ forbids declaration of %qs with no type", name);
9100 else
9101 warning (OPT_Wreturn_type,
9102 "ISO C++ forbids declaration of %qs with no type", name);
9104 type = integer_type_node;
9107 ctype = NULL_TREE;
9109 if (explicit_int128)
9111 if (int128_integer_type_node == NULL_TREE)
9113 error ("%<__int128%> is not supported by this target");
9114 explicit_int128 = false;
9116 else if (pedantic && ! in_system_header)
9117 pedwarn (input_location, OPT_Wpedantic,
9118 "ISO C++ does not support %<__int128%> for %qs", name);
9121 /* Now process the modifiers that were specified
9122 and check for invalid combinations. */
9124 /* Long double is a special combination. */
9125 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9127 long_p = false;
9128 type = cp_build_qualified_type (long_double_type_node,
9129 cp_type_quals (type));
9132 /* Check all other uses of type modifiers. */
9134 if (unsigned_p || signed_p || long_p || short_p)
9136 int ok = 0;
9138 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9139 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9140 else if (signed_p && unsigned_p)
9141 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9142 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9143 error ("%<long long%> invalid for %qs", name);
9144 else if (long_p && TREE_CODE (type) == REAL_TYPE)
9145 error ("%<long%> invalid for %qs", name);
9146 else if (short_p && TREE_CODE (type) == REAL_TYPE)
9147 error ("%<short%> invalid for %qs", name);
9148 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9149 error ("%<long%> or %<short%> invalid for %qs", name);
9150 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
9151 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9152 else if ((long_p || short_p) && explicit_char)
9153 error ("%<long%> or %<short%> specified with char for %qs", name);
9154 else if (long_p && short_p)
9155 error ("%<long%> and %<short%> specified together for %qs", name);
9156 else if (type == char16_type_node || type == char32_type_node)
9158 if (signed_p || unsigned_p)
9159 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9160 else if (short_p || long_p)
9161 error ("%<short%> or %<long%> invalid for %qs", name);
9163 else
9165 ok = 1;
9166 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
9168 pedwarn (input_location, OPT_Wpedantic,
9169 "long, short, signed or unsigned used invalidly for %qs",
9170 name);
9171 if (flag_pedantic_errors)
9172 ok = 0;
9176 /* Discard the type modifiers if they are invalid. */
9177 if (! ok)
9179 unsigned_p = false;
9180 signed_p = false;
9181 long_p = false;
9182 short_p = false;
9183 longlong = 0;
9187 /* Decide whether an integer type is signed or not.
9188 Optionally treat bitfields as signed by default. */
9189 if (unsigned_p
9190 /* [class.bit]
9192 It is implementation-defined whether a plain (neither
9193 explicitly signed or unsigned) char, short, int, or long
9194 bit-field is signed or unsigned.
9196 Naturally, we extend this to long long as well. Note that
9197 this does not include wchar_t. */
9198 || (bitfield && !flag_signed_bitfields
9199 && !signed_p
9200 /* A typedef for plain `int' without `signed' can be
9201 controlled just like plain `int', but a typedef for
9202 `signed int' cannot be so controlled. */
9203 && !(typedef_decl
9204 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9205 && TREE_CODE (type) == INTEGER_TYPE
9206 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9208 if (explicit_int128)
9209 type = int128_unsigned_type_node;
9210 else if (longlong)
9211 type = long_long_unsigned_type_node;
9212 else if (long_p)
9213 type = long_unsigned_type_node;
9214 else if (short_p)
9215 type = short_unsigned_type_node;
9216 else if (type == char_type_node)
9217 type = unsigned_char_type_node;
9218 else if (typedef_decl)
9219 type = unsigned_type_for (type);
9220 else
9221 type = unsigned_type_node;
9223 else if (signed_p && type == char_type_node)
9224 type = signed_char_type_node;
9225 else if (explicit_int128)
9226 type = int128_integer_type_node;
9227 else if (longlong)
9228 type = long_long_integer_type_node;
9229 else if (long_p)
9230 type = long_integer_type_node;
9231 else if (short_p)
9232 type = short_integer_type_node;
9234 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9236 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9237 error ("complex invalid for %qs", name);
9238 /* If we just have "complex", it is equivalent to
9239 "complex double", but if any modifiers at all are specified it is
9240 the complex form of TYPE. E.g, "complex short" is
9241 "complex short int". */
9242 else if (defaulted_int && ! longlong && ! explicit_int128
9243 && ! (long_p || short_p || signed_p || unsigned_p))
9244 type = complex_double_type_node;
9245 else if (type == integer_type_node)
9246 type = complex_integer_type_node;
9247 else if (type == float_type_node)
9248 type = complex_float_type_node;
9249 else if (type == double_type_node)
9250 type = complex_double_type_node;
9251 else if (type == long_double_type_node)
9252 type = complex_long_double_type_node;
9253 else
9254 type = build_complex_type (type);
9257 type_quals = TYPE_UNQUALIFIED;
9258 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9259 type_quals |= TYPE_QUAL_CONST;
9260 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9261 type_quals |= TYPE_QUAL_VOLATILE;
9262 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9263 type_quals |= TYPE_QUAL_RESTRICT;
9264 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9265 error ("qualifiers are not allowed on declaration of %<operator %T%>",
9266 ctor_return_type);
9268 /* If we're using the injected-class-name to form a compound type or a
9269 declaration, replace it with the underlying class so we don't get
9270 redundant typedefs in the debug output. But if we are returning the
9271 type unchanged, leave it alone so that it's available to
9272 maybe_get_template_decl_from_type_decl. */
9273 if (CLASS_TYPE_P (type)
9274 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9275 && type == TREE_TYPE (TYPE_NAME (type))
9276 && (declarator || type_quals))
9277 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9279 type_quals |= cp_type_quals (type);
9280 type = cp_build_qualified_type_real
9281 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
9282 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9283 /* We might have ignored or rejected some of the qualifiers. */
9284 type_quals = cp_type_quals (type);
9286 staticp = 0;
9287 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9288 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9289 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9291 storage_class = declspecs->storage_class;
9292 if (storage_class == sc_static)
9293 staticp = 1 + (decl_context == FIELD);
9295 if (virtualp && staticp == 2)
9297 error ("member %qD cannot be declared both virtual and static", dname);
9298 storage_class = sc_none;
9299 staticp = 0;
9301 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9303 /* Issue errors about use of storage classes for parameters. */
9304 if (decl_context == PARM)
9306 if (typedef_p)
9308 error ("typedef declaration invalid in parameter declaration");
9309 return error_mark_node;
9311 else if (template_parm_flag && storage_class != sc_none)
9313 error ("storage class specified for template parameter %qs", name);
9314 return error_mark_node;
9316 else if (storage_class == sc_static
9317 || storage_class == sc_extern
9318 || thread_p)
9319 error ("storage class specifiers invalid in parameter declarations");
9321 /* Function parameters cannot be constexpr. If we saw one, moan
9322 and pretend it wasn't there. */
9323 if (constexpr_p)
9325 error ("a parameter cannot be declared %<constexpr%>");
9326 constexpr_p = 0;
9330 /* Give error if `virtual' is used outside of class declaration. */
9331 if (virtualp
9332 && (current_class_name == NULL_TREE || decl_context != FIELD))
9334 error ("%<virtual%> outside class declaration");
9335 virtualp = 0;
9338 /* Static anonymous unions are dealt with here. */
9339 if (staticp && decl_context == TYPENAME
9340 && declspecs->type
9341 && ANON_AGGR_TYPE_P (declspecs->type))
9342 decl_context = FIELD;
9344 /* Warn about storage classes that are invalid for certain
9345 kinds of declarations (parameters, typenames, etc.). */
9346 if (thread_p
9347 && ((storage_class
9348 && storage_class != sc_extern
9349 && storage_class != sc_static)
9350 || typedef_p))
9352 error ("multiple storage classes in declaration of %qs", name);
9353 thread_p = false;
9355 if (decl_context != NORMAL
9356 && ((storage_class != sc_none
9357 && storage_class != sc_mutable)
9358 || thread_p))
9360 if ((decl_context == PARM || decl_context == CATCHPARM)
9361 && (storage_class == sc_register
9362 || storage_class == sc_auto))
9364 else if (typedef_p)
9366 else if (decl_context == FIELD
9367 /* C++ allows static class elements. */
9368 && storage_class == sc_static)
9369 /* C++ also allows inlines and signed and unsigned elements,
9370 but in those cases we don't come in here. */
9372 else
9374 if (decl_context == FIELD)
9375 error ("storage class specified for %qs", name);
9376 else
9378 if (decl_context == PARM || decl_context == CATCHPARM)
9379 error ("storage class specified for parameter %qs", name);
9380 else
9381 error ("storage class specified for typename");
9383 if (storage_class == sc_register
9384 || storage_class == sc_auto
9385 || storage_class == sc_extern
9386 || thread_p)
9387 storage_class = sc_none;
9390 else if (storage_class == sc_extern && funcdef_flag
9391 && ! toplevel_bindings_p ())
9392 error ("nested function %qs declared %<extern%>", name);
9393 else if (toplevel_bindings_p ())
9395 if (storage_class == sc_auto)
9396 error ("top-level declaration of %qs specifies %<auto%>", name);
9398 else if (thread_p
9399 && storage_class != sc_extern
9400 && storage_class != sc_static)
9402 if (declspecs->gnu_thread_keyword_p)
9403 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9404 "declared %<__thread%>", name);
9406 /* When thread_local is applied to a variable of block scope the
9407 storage-class-specifier static is implied if it does not appear
9408 explicitly. */
9409 storage_class = declspecs->storage_class = sc_static;
9410 staticp = 1;
9413 if (storage_class && friendp)
9415 error ("storage class specifiers invalid in friend function declarations");
9416 storage_class = sc_none;
9417 staticp = 0;
9420 if (!id_declarator)
9421 unqualified_id = NULL_TREE;
9422 else
9424 unqualified_id = id_declarator->u.id.unqualified_name;
9425 switch (TREE_CODE (unqualified_id))
9427 case BIT_NOT_EXPR:
9428 unqualified_id = TREE_OPERAND (unqualified_id, 0);
9429 if (TYPE_P (unqualified_id))
9430 unqualified_id = constructor_name (unqualified_id);
9431 break;
9433 case IDENTIFIER_NODE:
9434 case TEMPLATE_ID_EXPR:
9435 break;
9437 default:
9438 gcc_unreachable ();
9442 if (declspecs->std_attributes)
9444 /* Apply the c++11 attributes to the type preceding them. */
9445 input_location = declspecs->locations[ds_std_attribute];
9446 decl_attributes (&type, declspecs->std_attributes, 0);
9447 input_location = saved_loc;
9450 /* Determine the type of the entity declared by recurring on the
9451 declarator. */
9452 for (; declarator; declarator = declarator->declarator)
9454 const cp_declarator *inner_declarator;
9455 tree attrs;
9457 if (type == error_mark_node)
9458 return error_mark_node;
9460 attrs = declarator->attributes;
9461 if (attrs)
9463 int attr_flags;
9465 attr_flags = 0;
9466 if (declarator == NULL || declarator->kind == cdk_id)
9467 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9468 if (declarator->kind == cdk_function)
9469 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9470 if (declarator->kind == cdk_array)
9471 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9472 returned_attrs = decl_attributes (&type,
9473 chainon (returned_attrs, attrs),
9474 attr_flags);
9477 if (declarator->kind == cdk_id)
9478 break;
9480 inner_declarator = declarator->declarator;
9482 switch (declarator->kind)
9484 case cdk_array:
9485 type = create_array_type_for_decl (dname, type,
9486 declarator->u.array.bounds);
9487 if (declarator->std_attributes)
9488 /* [dcl.array]/1:
9490 The optional attribute-specifier-seq appertains to the
9491 array. */
9492 returned_attrs = chainon (returned_attrs,
9493 declarator->std_attributes);
9494 break;
9496 case cdk_function:
9498 tree arg_types;
9499 int funcdecl_p;
9501 /* Declaring a function type.
9502 Make sure we have a valid type for the function to return. */
9504 if (type_quals != TYPE_UNQUALIFIED)
9506 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9507 warning (OPT_Wignored_qualifiers,
9508 "type qualifiers ignored on function return type");
9509 /* We now know that the TYPE_QUALS don't apply to the
9510 decl, but to its return type. */
9511 type_quals = TYPE_UNQUALIFIED;
9513 errmsg = targetm.invalid_return_type (type);
9514 if (errmsg)
9516 error (errmsg);
9517 type = integer_type_node;
9520 /* Error about some types functions can't return. */
9522 if (TREE_CODE (type) == FUNCTION_TYPE)
9524 error ("%qs declared as function returning a function", name);
9525 return error_mark_node;
9527 if (TREE_CODE (type) == ARRAY_TYPE)
9529 error ("%qs declared as function returning an array", name);
9530 return error_mark_node;
9533 input_location = declspecs->locations[ds_type_spec];
9534 abstract_virtuals_error (ACU_RETURN, type);
9535 input_location = saved_loc;
9537 /* Pick up type qualifiers which should be applied to `this'. */
9538 memfn_quals = declarator->u.function.qualifiers;
9539 /* Pick up virt-specifiers. */
9540 virt_specifiers = declarator->u.function.virt_specifiers;
9541 /* And ref-qualifier, too */
9542 rqual = declarator->u.function.ref_qualifier;
9543 /* Pick up the exception specifications. */
9544 raises = declarator->u.function.exception_specification;
9545 /* If the exception-specification is ill-formed, let's pretend
9546 there wasn't one. */
9547 if (raises == error_mark_node)
9548 raises = NULL_TREE;
9550 /* Say it's a definition only for the CALL_EXPR
9551 closest to the identifier. */
9552 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9554 /* Handle a late-specified return type. */
9555 if (funcdecl_p)
9557 if (type_uses_auto (type))
9559 if (!declarator->u.function.late_return_type)
9561 if (current_class_type
9562 && LAMBDA_TYPE_P (current_class_type))
9563 /* OK for C++11 lambdas. */;
9564 else if (cxx_dialect < cxx1y)
9565 pedwarn (input_location, 0, "%qs function uses "
9566 "%<auto%> type specifier without trailing "
9567 "return type", name);
9568 else if (virtualp)
9569 permerror (input_location, "virtual function cannot "
9570 "have deduced return type");
9572 else if (!is_auto (type))
9574 error ("%qs function with trailing return type has"
9575 " %qT as its type rather than plain %<auto%>",
9576 name, type);
9577 return error_mark_node;
9580 else if (declarator->u.function.late_return_type)
9582 if (cxx_dialect < cxx11)
9583 /* Not using maybe_warn_cpp0x because this should
9584 always be an error. */
9585 error ("trailing return type only available with "
9586 "-std=c++11 or -std=gnu++11");
9587 else
9588 error ("%qs function with trailing return type not "
9589 "declared with %<auto%> type specifier", name);
9590 return error_mark_node;
9593 type = splice_late_return_type
9594 (type, declarator->u.function.late_return_type);
9595 if (type == error_mark_node)
9596 return error_mark_node;
9598 if (ctype == NULL_TREE
9599 && decl_context == FIELD
9600 && funcdecl_p
9601 && (friendp == 0 || dname == current_class_name))
9602 ctype = current_class_type;
9604 if (ctype && (sfk == sfk_constructor
9605 || sfk == sfk_destructor))
9607 /* We are within a class's scope. If our declarator name
9608 is the same as the class name, and we are defining
9609 a function, then it is a constructor/destructor, and
9610 therefore returns a void type. */
9612 /* ISO C++ 12.4/2. A destructor may not be declared
9613 const or volatile. A destructor may not be static.
9614 A destructor may not be declared with ref-qualifier.
9616 ISO C++ 12.1. A constructor may not be declared
9617 const or volatile. A constructor may not be
9618 virtual. A constructor may not be static.
9619 A constructor may not be declared with ref-qualifier. */
9620 if (staticp == 2)
9621 error ((flags == DTOR_FLAG)
9622 ? G_("destructor cannot be static member function")
9623 : G_("constructor cannot be static member function"));
9624 if (memfn_quals)
9626 error ((flags == DTOR_FLAG)
9627 ? G_("destructors may not be cv-qualified")
9628 : G_("constructors may not be cv-qualified"));
9629 memfn_quals = TYPE_UNQUALIFIED;
9632 if (rqual)
9634 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9635 error ((flags == DTOR_FLAG)
9636 ? "destructors may not be ref-qualified"
9637 : "constructors may not be ref-qualified");
9638 rqual = REF_QUAL_NONE;
9641 if (decl_context == FIELD
9642 && !member_function_or_else (ctype,
9643 current_class_type,
9644 flags))
9645 return error_mark_node;
9647 if (flags != DTOR_FLAG)
9649 /* It's a constructor. */
9650 if (explicitp == 1)
9651 explicitp = 2;
9652 if (virtualp)
9654 permerror (input_location, "constructors cannot be declared virtual");
9655 virtualp = 0;
9657 if (decl_context == FIELD
9658 && sfk != sfk_constructor)
9659 return error_mark_node;
9661 if (decl_context == FIELD)
9662 staticp = 0;
9664 else if (friendp)
9666 if (initialized)
9667 error ("can%'t initialize friend function %qs", name);
9668 if (virtualp)
9670 /* Cannot be both friend and virtual. */
9671 error ("virtual functions cannot be friends");
9672 friendp = 0;
9674 if (decl_context == NORMAL)
9675 error ("friend declaration not in class definition");
9676 if (current_function_decl && funcdef_flag)
9677 error ("can%'t define friend function %qs in a local "
9678 "class definition",
9679 name);
9681 else if (ctype && sfk == sfk_conversion)
9683 if (explicitp == 1)
9685 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9686 explicitp = 2;
9690 arg_types = grokparms (declarator->u.function.parameters,
9691 &parms);
9693 if (inner_declarator
9694 && inner_declarator->kind == cdk_id
9695 && inner_declarator->u.id.sfk == sfk_destructor
9696 && arg_types != void_list_node)
9698 error ("destructors may not have parameters");
9699 arg_types = void_list_node;
9700 parms = NULL_TREE;
9703 type = build_function_type (type, arg_types);
9704 if (declarator->std_attributes)
9705 /* [dcl.fct]/2:
9707 The optional attribute-specifier-seq appertains to
9708 the function type. */
9709 decl_attributes (&type, declarator->std_attributes,
9712 break;
9714 case cdk_pointer:
9715 case cdk_reference:
9716 case cdk_ptrmem:
9717 /* Filter out pointers-to-references and references-to-references.
9718 We can get these if a TYPE_DECL is used. */
9720 if (TREE_CODE (type) == REFERENCE_TYPE)
9722 if (declarator->kind != cdk_reference)
9724 error ("cannot declare pointer to %q#T", type);
9725 type = TREE_TYPE (type);
9728 /* In C++0x, we allow reference to reference declarations
9729 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9730 and template type arguments [14.3.1/4 temp.arg.type]. The
9731 check for direct reference to reference declarations, which
9732 are still forbidden, occurs below. Reasoning behind the change
9733 can be found in DR106, DR540, and the rvalue reference
9734 proposals. */
9735 else if (cxx_dialect == cxx98)
9737 error ("cannot declare reference to %q#T", type);
9738 type = TREE_TYPE (type);
9741 else if (VOID_TYPE_P (type))
9743 if (declarator->kind == cdk_reference)
9744 error ("cannot declare reference to %q#T", type);
9745 else if (declarator->kind == cdk_ptrmem)
9746 error ("cannot declare pointer to %q#T member", type);
9749 /* We now know that the TYPE_QUALS don't apply to the decl,
9750 but to the target of the pointer. */
9751 type_quals = TYPE_UNQUALIFIED;
9753 /* This code used to handle METHOD_TYPE, but I don't think it's
9754 possible to get it here anymore. */
9755 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9756 if (declarator->kind == cdk_ptrmem
9757 && TREE_CODE (type) == FUNCTION_TYPE)
9759 memfn_quals |= type_memfn_quals (type);
9760 type = build_memfn_type (type,
9761 declarator->u.pointer.class_type,
9762 memfn_quals,
9763 rqual);
9764 if (type == error_mark_node)
9765 return error_mark_node;
9767 rqual = REF_QUAL_NONE;
9768 memfn_quals = TYPE_UNQUALIFIED;
9771 if (TREE_CODE (type) == FUNCTION_TYPE
9772 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9773 || type_memfn_rqual (type) != REF_QUAL_NONE))
9774 error (declarator->kind == cdk_reference
9775 ? G_("cannot declare reference to qualified function type %qT")
9776 : G_("cannot declare pointer to qualified function type %qT"),
9777 type);
9779 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
9780 pedwarn (input_location, OPT_Wvla,
9781 declarator->kind == cdk_reference
9782 ? G_("reference to array of runtime bound")
9783 : G_("pointer to array of runtime bound"));
9785 /* When the pointed-to type involves components of variable size,
9786 care must be taken to ensure that the size evaluation code is
9787 emitted early enough to dominate all the possible later uses
9788 and late enough for the variables on which it depends to have
9789 been assigned.
9791 This is expected to happen automatically when the pointed-to
9792 type has a name/declaration of it's own, but special attention
9793 is required if the type is anonymous.
9795 We handle the NORMAL and FIELD contexts here by inserting a
9796 dummy statement that just evaluates the size at a safe point
9797 and ensures it is not deferred until e.g. within a deeper
9798 conditional context (c++/43555).
9800 We expect nothing to be needed here for PARM or TYPENAME.
9801 Evaluating the size at this point for TYPENAME would
9802 actually be incorrect, as we might be in the middle of an
9803 expression with side effects on the pointed-to type size
9804 "arguments" prior to the pointer declaration point and the
9805 size evaluation could end up prior to the side effects. */
9807 if (!TYPE_NAME (type)
9808 && (decl_context == NORMAL || decl_context == FIELD)
9809 && at_function_scope_p ()
9810 && variably_modified_type_p (type, NULL_TREE))
9811 /* Force evaluation of the SAVE_EXPR. */
9812 finish_expr_stmt (TYPE_SIZE (type));
9814 if (declarator->kind == cdk_reference)
9816 /* In C++0x, the type we are creating a reference to might be
9817 a typedef which is itself a reference type. In that case,
9818 we follow the reference collapsing rules in
9819 [7.1.3/8 dcl.typedef] to create the final reference type:
9821 "If a typedef TD names a type that is a reference to a type
9822 T, an attempt to create the type 'lvalue reference to cv TD'
9823 creates the type 'lvalue reference to T,' while an attempt
9824 to create the type "rvalue reference to cv TD' creates the
9825 type TD."
9827 if (VOID_TYPE_P (type))
9828 /* We already gave an error. */;
9829 else if (TREE_CODE (type) == REFERENCE_TYPE)
9831 if (declarator->u.reference.rvalue_ref)
9832 /* Leave type alone. */;
9833 else
9834 type = cp_build_reference_type (TREE_TYPE (type), false);
9836 else
9837 type = cp_build_reference_type
9838 (type, declarator->u.reference.rvalue_ref);
9840 /* In C++0x, we need this check for direct reference to
9841 reference declarations, which are forbidden by
9842 [8.3.2/5 dcl.ref]. Reference to reference declarations
9843 are only allowed indirectly through typedefs and template
9844 type arguments. Example:
9846 void foo(int & &); // invalid ref-to-ref decl
9848 typedef int & int_ref;
9849 void foo(int_ref &); // valid ref-to-ref decl
9851 if (inner_declarator && inner_declarator->kind == cdk_reference)
9852 error ("cannot declare reference to %q#T, which is not "
9853 "a typedef or a template type argument", type);
9855 else if (TREE_CODE (type) == METHOD_TYPE)
9856 type = build_ptrmemfunc_type (build_pointer_type (type));
9857 else if (declarator->kind == cdk_ptrmem)
9859 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9860 != NAMESPACE_DECL);
9861 if (declarator->u.pointer.class_type == error_mark_node)
9862 /* We will already have complained. */
9863 type = error_mark_node;
9864 else
9865 type = build_ptrmem_type (declarator->u.pointer.class_type,
9866 type);
9868 else
9869 type = build_pointer_type (type);
9871 /* Process a list of type modifier keywords (such as
9872 const or volatile) that were given inside the `*' or `&'. */
9874 if (declarator->u.pointer.qualifiers)
9876 type
9877 = cp_build_qualified_type (type,
9878 declarator->u.pointer.qualifiers);
9879 type_quals = cp_type_quals (type);
9882 /* Apply C++11 attributes to the pointer, and not to the
9883 type pointed to. This is unlike what is done for GNU
9884 attributes above. It is to comply with [dcl.ptr]/1:
9886 [the optional attribute-specifier-seq (7.6.1) appertains
9887 to the pointer and not to the object pointed to]. */
9888 if (declarator->std_attributes)
9889 decl_attributes (&type, declarator->std_attributes,
9892 ctype = NULL_TREE;
9893 break;
9895 case cdk_error:
9896 break;
9898 default:
9899 gcc_unreachable ();
9903 /* A `constexpr' specifier used in an object declaration declares
9904 the object as `const'. */
9905 if (constexpr_p && innermost_code != cdk_function)
9907 if (type_quals & TYPE_QUAL_VOLATILE)
9908 error ("both %<volatile%> and %<constexpr%> cannot be used here");
9909 if (TREE_CODE (type) != REFERENCE_TYPE)
9911 type_quals |= TYPE_QUAL_CONST;
9912 type = cp_build_qualified_type (type, type_quals);
9916 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9917 && TREE_CODE (type) != FUNCTION_TYPE
9918 && TREE_CODE (type) != METHOD_TYPE)
9920 error ("template-id %qD used as a declarator",
9921 unqualified_id);
9922 unqualified_id = dname;
9925 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9926 qualified with a class-name, turn it into a METHOD_TYPE, unless
9927 we know that the function is static. We take advantage of this
9928 opportunity to do other processing that pertains to entities
9929 explicitly declared to be class members. Note that if DECLARATOR
9930 is non-NULL, we know it is a cdk_id declarator; otherwise, we
9931 would not have exited the loop above. */
9932 if (declarator
9933 && declarator->u.id.qualifying_scope
9934 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9936 ctype = declarator->u.id.qualifying_scope;
9937 ctype = TYPE_MAIN_VARIANT (ctype);
9938 template_count = num_template_headers_for_class (ctype);
9940 if (ctype == current_class_type)
9942 if (friendp)
9944 permerror (input_location, "member functions are implicitly friends of their class");
9945 friendp = 0;
9947 else
9948 permerror (declarator->id_loc,
9949 "extra qualification %<%T::%> on member %qs",
9950 ctype, name);
9952 else if (/* If the qualifying type is already complete, then we
9953 can skip the following checks. */
9954 !COMPLETE_TYPE_P (ctype)
9955 && (/* If the function is being defined, then
9956 qualifying type must certainly be complete. */
9957 funcdef_flag
9958 /* A friend declaration of "T::f" is OK, even if
9959 "T" is a template parameter. But, if this
9960 function is not a friend, the qualifying type
9961 must be a class. */
9962 || (!friendp && !CLASS_TYPE_P (ctype))
9963 /* For a declaration, the type need not be
9964 complete, if either it is dependent (since there
9965 is no meaningful definition of complete in that
9966 case) or the qualifying class is currently being
9967 defined. */
9968 || !(dependent_type_p (ctype)
9969 || currently_open_class (ctype)))
9970 /* Check that the qualifying type is complete. */
9971 && !complete_type_or_else (ctype, NULL_TREE))
9972 return error_mark_node;
9973 else if (TREE_CODE (type) == FUNCTION_TYPE)
9975 if (current_class_type
9976 && (!friendp || funcdef_flag))
9978 error (funcdef_flag
9979 ? G_("cannot define member function %<%T::%s%> "
9980 "within %<%T%>")
9981 : G_("cannot declare member function %<%T::%s%> "
9982 "within %<%T%>"),
9983 ctype, name, current_class_type);
9984 return error_mark_node;
9987 else if (typedef_p && current_class_type)
9989 error ("cannot declare member %<%T::%s%> within %qT",
9990 ctype, name, current_class_type);
9991 return error_mark_node;
9995 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9996 ctype = current_class_type;
9998 /* Now TYPE has the actual type. */
10000 if (returned_attrs)
10002 if (attrlist)
10003 *attrlist = chainon (returned_attrs, *attrlist);
10004 else
10005 attrlist = &returned_attrs;
10008 if (declarator
10009 && declarator->kind == cdk_id
10010 && declarator->std_attributes)
10011 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10012 a declarator-id appertains to the entity that is declared. */
10013 *attrlist = chainon (*attrlist, declarator->std_attributes);
10015 /* Handle parameter packs. */
10016 if (parameter_pack_p)
10018 if (decl_context == PARM)
10019 /* Turn the type into a pack expansion.*/
10020 type = make_pack_expansion (type);
10021 else
10022 error ("non-parameter %qs cannot be a parameter pack", name);
10025 /* Did array size calculations overflow or does the array cover more
10026 than half of the address-space? */
10027 if (TREE_CODE (type) == ARRAY_TYPE
10028 && COMPLETE_TYPE_P (type)
10029 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10030 && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10032 error ("size of array %qs is too large", name);
10033 /* If we proceed with the array type as it is, we'll eventually
10034 crash in tree_low_cst(). */
10035 type = error_mark_node;
10038 if ((decl_context == FIELD || decl_context == PARM)
10039 && !processing_template_decl
10040 && variably_modified_type_p (type, NULL_TREE))
10042 if (decl_context == FIELD)
10043 error ("data member may not have variably modified type %qT", type);
10044 else
10045 error ("parameter may not have variably modified type %qT", type);
10046 type = error_mark_node;
10049 if (explicitp == 1 || (explicitp && friendp))
10051 /* [dcl.fct.spec] The explicit specifier shall only be used in
10052 declarations of constructors within a class definition. */
10053 error ("only declarations of constructors can be %<explicit%>");
10054 explicitp = 0;
10057 if (storage_class == sc_mutable)
10059 if (decl_context != FIELD || friendp)
10061 error ("non-member %qs cannot be declared %<mutable%>", name);
10062 storage_class = sc_none;
10064 else if (decl_context == TYPENAME || typedef_p)
10066 error ("non-object member %qs cannot be declared %<mutable%>", name);
10067 storage_class = sc_none;
10069 else if (TREE_CODE (type) == FUNCTION_TYPE
10070 || TREE_CODE (type) == METHOD_TYPE)
10072 error ("function %qs cannot be declared %<mutable%>", name);
10073 storage_class = sc_none;
10075 else if (staticp)
10077 error ("static %qs cannot be declared %<mutable%>", name);
10078 storage_class = sc_none;
10080 else if (type_quals & TYPE_QUAL_CONST)
10082 error ("const %qs cannot be declared %<mutable%>", name);
10083 storage_class = sc_none;
10085 else if (TREE_CODE (type) == REFERENCE_TYPE)
10087 permerror (input_location, "reference %qs cannot be declared "
10088 "%<mutable%>", name);
10089 storage_class = sc_none;
10093 /* If this is declaring a typedef name, return a TYPE_DECL. */
10094 if (typedef_p && decl_context != TYPENAME)
10096 tree decl;
10098 /* Note that the grammar rejects storage classes
10099 in typenames, fields or parameters. */
10100 if (current_lang_name == lang_name_java)
10101 TYPE_FOR_JAVA (type) = 1;
10103 /* This declaration:
10105 typedef void f(int) const;
10107 declares a function type which is not a member of any
10108 particular class, but which is cv-qualified; for
10109 example "f S::*" declares a pointer to a const-qualified
10110 member function of S. We record the cv-qualification in the
10111 function type. */
10112 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10114 type = apply_memfn_quals (type, memfn_quals, rqual);
10116 /* We have now dealt with these qualifiers. */
10117 memfn_quals = TYPE_UNQUALIFIED;
10118 rqual = REF_QUAL_NONE;
10121 if (type_uses_auto (type))
10123 error ("typedef declared %<auto%>");
10124 type = error_mark_node;
10127 if (cxx_dialect >= cxx1y && array_of_runtime_bound_p (type))
10128 pedwarn (input_location, OPT_Wvla,
10129 "typedef naming array of runtime bound");
10131 if (decl_context == FIELD)
10132 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10133 else
10134 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10135 if (id_declarator && declarator->u.id.qualifying_scope) {
10136 error_at (DECL_SOURCE_LOCATION (decl),
10137 "typedef name may not be a nested-name-specifier");
10138 TREE_TYPE (decl) = error_mark_node;
10141 if (decl_context != FIELD)
10143 if (!current_function_decl)
10144 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10145 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10146 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10147 (current_function_decl)))
10148 /* The TYPE_DECL is "abstract" because there will be
10149 clones of this constructor/destructor, and there will
10150 be copies of this TYPE_DECL generated in those
10151 clones. */
10152 DECL_ABSTRACT (decl) = 1;
10154 else if (current_class_type
10155 && constructor_name_p (unqualified_id, current_class_type))
10156 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10157 "as enclosing class",
10158 unqualified_id);
10160 /* If the user declares "typedef struct {...} foo" then the
10161 struct will have an anonymous name. Fill that name in now.
10162 Nothing can refer to it, so nothing needs know about the name
10163 change. */
10164 if (type != error_mark_node
10165 && unqualified_id
10166 && TYPE_NAME (type)
10167 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10168 && TYPE_ANONYMOUS_P (type)
10169 && declspecs->type_definition_p
10170 && cp_type_quals (type) == TYPE_UNQUALIFIED)
10172 tree t;
10174 /* Replace the anonymous name with the real name everywhere. */
10175 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10177 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10178 /* We do not rename the debug info representing the
10179 anonymous tagged type because the standard says in
10180 [dcl.typedef] that the naming applies only for
10181 linkage purposes. */
10182 /*debug_hooks->set_name (t, decl);*/
10183 TYPE_NAME (t) = decl;
10186 if (TYPE_LANG_SPECIFIC (type))
10187 TYPE_WAS_ANONYMOUS (type) = 1;
10189 /* If this is a typedef within a template class, the nested
10190 type is a (non-primary) template. The name for the
10191 template needs updating as well. */
10192 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10193 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10194 = TYPE_IDENTIFIER (type);
10196 /* Adjust linkage now that we aren't anonymous anymore. */
10197 reset_type_linkage (type);
10199 /* FIXME remangle member functions; member functions of a
10200 type with external linkage have external linkage. */
10203 if (signed_p
10204 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10205 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10207 bad_specifiers (decl, BSP_TYPE, virtualp,
10208 memfn_quals != TYPE_UNQUALIFIED,
10209 inlinep, friendp, raises != NULL_TREE);
10211 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10212 /* Acknowledge that this was written:
10213 `using analias = atype;'. */
10214 TYPE_DECL_ALIAS_P (decl) = 1;
10216 return decl;
10219 /* Detect the case of an array type of unspecified size
10220 which came, as such, direct from a typedef name.
10221 We must copy the type, so that the array's domain can be
10222 individually set by the object's initializer. */
10224 if (type && typedef_type
10225 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10226 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10227 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10229 /* Detect where we're using a typedef of function type to declare a
10230 function. PARMS will not be set, so we must create it now. */
10232 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10234 tree decls = NULL_TREE;
10235 tree args;
10237 for (args = TYPE_ARG_TYPES (type);
10238 args && args != void_list_node;
10239 args = TREE_CHAIN (args))
10241 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10243 DECL_CHAIN (decl) = decls;
10244 decls = decl;
10247 parms = nreverse (decls);
10249 if (decl_context != TYPENAME)
10251 /* A cv-qualifier-seq shall only be part of the function type
10252 for a non-static member function. A ref-qualifier shall only
10253 .... /same as above/ [dcl.fct] */
10254 if ((type_memfn_quals (type) != TYPE_UNQUALIFIED
10255 || type_memfn_rqual (type) != REF_QUAL_NONE)
10256 && (current_class_type == NULL_TREE || staticp) )
10258 error (staticp
10259 ? G_("qualified function types cannot be used to "
10260 "declare static member functions")
10261 : G_("qualified function types cannot be used to "
10262 "declare free functions"));
10263 type = TYPE_MAIN_VARIANT (type);
10266 /* The qualifiers on the function type become the qualifiers on
10267 the non-static member function. */
10268 memfn_quals |= type_memfn_quals (type);
10269 rqual = type_memfn_rqual (type);
10270 type_quals = TYPE_UNQUALIFIED;
10274 /* If this is a type name (such as, in a cast or sizeof),
10275 compute the type and return it now. */
10277 if (decl_context == TYPENAME)
10279 /* Note that the grammar rejects storage classes
10280 in typenames, fields or parameters. */
10281 if (type_quals != TYPE_UNQUALIFIED)
10282 type_quals = TYPE_UNQUALIFIED;
10284 /* Special case: "friend class foo" looks like a TYPENAME context. */
10285 if (friendp)
10287 if (type_quals != TYPE_UNQUALIFIED)
10289 error ("type qualifiers specified for friend class declaration");
10290 type_quals = TYPE_UNQUALIFIED;
10292 if (inlinep)
10294 error ("%<inline%> specified for friend class declaration");
10295 inlinep = 0;
10298 if (!current_aggr)
10300 /* Don't allow friend declaration without a class-key. */
10301 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10302 permerror (input_location, "template parameters cannot be friends");
10303 else if (TREE_CODE (type) == TYPENAME_TYPE)
10304 permerror (input_location, "friend declaration requires class-key, "
10305 "i.e. %<friend class %T::%D%>",
10306 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10307 else
10308 permerror (input_location, "friend declaration requires class-key, "
10309 "i.e. %<friend %#T%>",
10310 type);
10313 /* Only try to do this stuff if we didn't already give up. */
10314 if (type != integer_type_node)
10316 /* A friendly class? */
10317 if (current_class_type)
10318 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10319 /*complain=*/true);
10320 else
10321 error ("trying to make class %qT a friend of global scope",
10322 type);
10324 type = void_type_node;
10327 else if (memfn_quals || rqual)
10329 if (ctype == NULL_TREE
10330 && TREE_CODE (type) == METHOD_TYPE)
10331 ctype = TYPE_METHOD_BASETYPE (type);
10333 if (ctype)
10334 type = build_memfn_type (type, ctype, memfn_quals, rqual);
10335 /* Core issue #547: need to allow this in template type args.
10336 Allow it in general in C++11 for alias-declarations. */
10337 else if ((template_type_arg || cxx_dialect >= cxx11)
10338 && TREE_CODE (type) == FUNCTION_TYPE)
10339 type = apply_memfn_quals (type, memfn_quals, rqual);
10340 else
10341 error ("invalid qualifiers on non-member function type");
10344 return type;
10346 else if (unqualified_id == NULL_TREE && decl_context != PARM
10347 && decl_context != CATCHPARM
10348 && TREE_CODE (type) != UNION_TYPE
10349 && ! bitfield)
10351 error ("abstract declarator %qT used as declaration", type);
10352 return error_mark_node;
10355 /* Only functions may be declared using an operator-function-id. */
10356 if (unqualified_id
10357 && IDENTIFIER_OPNAME_P (unqualified_id)
10358 && TREE_CODE (type) != FUNCTION_TYPE
10359 && TREE_CODE (type) != METHOD_TYPE)
10361 error ("declaration of %qD as non-function", unqualified_id);
10362 return error_mark_node;
10365 /* We don't check parameter types here because we can emit a better
10366 error message later. */
10367 if (decl_context != PARM)
10369 type = check_var_type (unqualified_id, type);
10370 if (type == error_mark_node)
10371 return error_mark_node;
10374 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10375 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
10377 if (decl_context == PARM || decl_context == CATCHPARM)
10379 if (ctype || in_namespace)
10380 error ("cannot use %<::%> in parameter declaration");
10382 if (type_uses_auto (type))
10384 if (template_parm_flag)
10386 error ("template parameter declared %<auto%>");
10387 type = error_mark_node;
10389 else if (decl_context == CATCHPARM)
10391 error ("catch parameter declared %<auto%>");
10392 type = error_mark_node;
10394 else if (current_class_type && LAMBDA_TYPE_P (current_class_type))
10396 if (cxx_dialect < cxx1y)
10397 pedwarn (location_of (type), 0,
10398 "use of %<auto%> in lambda parameter declaration "
10399 "only available with "
10400 "-std=c++1y or -std=gnu++1y");
10402 else if (cxx_dialect < cxx1y)
10403 pedwarn (location_of (type), 0,
10404 "use of %<auto%> in parameter declaration "
10405 "only available with "
10406 "-std=c++1y or -std=gnu++1y");
10407 else
10408 pedwarn (location_of (type), OPT_Wpedantic,
10409 "ISO C++ forbids use of %<auto%> in parameter "
10410 "declaration");
10413 /* A parameter declared as an array of T is really a pointer to T.
10414 One declared as a function is really a pointer to a function.
10415 One declared as a member is really a pointer to member. */
10417 if (TREE_CODE (type) == ARRAY_TYPE)
10419 /* Transfer const-ness of array into that of type pointed to. */
10420 type = build_pointer_type (TREE_TYPE (type));
10421 type_quals = TYPE_UNQUALIFIED;
10423 else if (TREE_CODE (type) == FUNCTION_TYPE)
10424 type = build_pointer_type (type);
10427 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10428 && !NEW_DELETE_OPNAME_P (unqualified_id))
10430 cp_cv_quals real_quals = memfn_quals;
10431 if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10432 real_quals |= TYPE_QUAL_CONST;
10433 type = build_memfn_type (type, ctype, real_quals, rqual);
10437 tree decl;
10439 if (decl_context == PARM)
10441 decl = cp_build_parm_decl (unqualified_id, type);
10443 bad_specifiers (decl, BSP_PARM, virtualp,
10444 memfn_quals != TYPE_UNQUALIFIED,
10445 inlinep, friendp, raises != NULL_TREE);
10447 else if (decl_context == FIELD)
10449 if (!staticp && TREE_CODE (type) != METHOD_TYPE
10450 && type_uses_auto (type))
10452 error ("non-static data member declared %<auto%>");
10453 type = error_mark_node;
10456 /* The C99 flexible array extension. */
10457 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10458 && TYPE_DOMAIN (type) == NULL_TREE)
10460 tree itype = compute_array_index_type (dname, integer_zero_node,
10461 tf_warning_or_error);
10462 type = build_cplus_array_type (TREE_TYPE (type), itype);
10465 if (type == error_mark_node)
10467 /* Happens when declaring arrays of sizes which
10468 are error_mark_node, for example. */
10469 decl = NULL_TREE;
10471 else if (in_namespace && !friendp)
10473 /* Something like struct S { int N::j; }; */
10474 error ("invalid use of %<::%>");
10475 return error_mark_node;
10477 else if (TREE_CODE (type) == FUNCTION_TYPE
10478 || TREE_CODE (type) == METHOD_TYPE)
10480 int publicp = 0;
10481 tree function_context;
10483 if (friendp == 0)
10485 /* This should never happen in pure C++ (the check
10486 could be an assert). It could happen in
10487 Objective-C++ if someone writes invalid code that
10488 uses a function declaration for an instance
10489 variable or property (instance variables and
10490 properties are parsed as FIELD_DECLs, but they are
10491 part of an Objective-C class, not a C++ class).
10492 That code is invalid and is caught by this
10493 check. */
10494 if (!ctype)
10496 error ("declaration of function %qD in invalid context",
10497 unqualified_id);
10498 return error_mark_node;
10501 /* ``A union may [ ... ] not [ have ] virtual functions.''
10502 ARM 9.5 */
10503 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10505 error ("function %qD declared virtual inside a union",
10506 unqualified_id);
10507 return error_mark_node;
10510 if (NEW_DELETE_OPNAME_P (unqualified_id))
10512 if (virtualp)
10514 error ("%qD cannot be declared virtual, since it "
10515 "is always static",
10516 unqualified_id);
10517 virtualp = 0;
10522 /* Check that the name used for a destructor makes sense. */
10523 if (sfk == sfk_destructor)
10525 tree uqname = id_declarator->u.id.unqualified_name;
10527 if (!ctype)
10529 gcc_assert (friendp);
10530 error ("expected qualified name in friend declaration "
10531 "for destructor %qD", uqname);
10532 return error_mark_node;
10535 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10537 error ("declaration of %qD as member of %qT",
10538 uqname, ctype);
10539 return error_mark_node;
10541 if (constexpr_p)
10543 error ("a destructor cannot be %<constexpr%>");
10544 return error_mark_node;
10547 else if (sfk == sfk_constructor && friendp && !ctype)
10549 error ("expected qualified name in friend declaration "
10550 "for constructor %qD",
10551 id_declarator->u.id.unqualified_name);
10552 return error_mark_node;
10555 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
10556 function_context = (ctype != NULL_TREE) ?
10557 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10558 publicp = (! friendp || ! staticp)
10559 && function_context == NULL_TREE;
10560 decl = grokfndecl (ctype, type,
10561 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10562 ? unqualified_id : dname,
10563 parms,
10564 unqualified_id,
10565 virtualp, flags, memfn_quals, rqual, raises,
10566 friendp ? -1 : 0, friendp, publicp,
10567 inlinep | (2 * constexpr_p),
10568 sfk,
10569 funcdef_flag, template_count, in_namespace,
10570 attrlist, declarator->id_loc);
10571 decl = set_virt_specifiers (decl, virt_specifiers);
10572 if (decl == NULL_TREE)
10573 return error_mark_node;
10574 #if 0
10575 /* This clobbers the attrs stored in `decl' from `attrlist'. */
10576 /* The decl and setting of decl_attr is also turned off. */
10577 decl = build_decl_attribute_variant (decl, decl_attr);
10578 #endif
10580 /* [class.conv.ctor]
10582 A constructor declared without the function-specifier
10583 explicit that can be called with a single parameter
10584 specifies a conversion from the type of its first
10585 parameter to the type of its class. Such a constructor
10586 is called a converting constructor. */
10587 if (explicitp == 2)
10588 DECL_NONCONVERTING_P (decl) = 1;
10590 else if (!staticp && !dependent_type_p (type)
10591 && !COMPLETE_TYPE_P (complete_type (type))
10592 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10594 if (unqualified_id)
10595 error ("field %qD has incomplete type %qT",
10596 unqualified_id, type);
10597 else
10598 error ("name %qT has incomplete type", type);
10600 type = error_mark_node;
10601 decl = NULL_TREE;
10603 else
10605 if (friendp)
10607 error ("%qE is neither function nor member function; "
10608 "cannot be declared friend", unqualified_id);
10609 friendp = 0;
10611 decl = NULL_TREE;
10614 if (friendp)
10616 /* Friends are treated specially. */
10617 if (ctype == current_class_type)
10618 ; /* We already issued a permerror. */
10619 else if (decl && DECL_NAME (decl))
10621 if (template_class_depth (current_class_type) == 0)
10623 decl = check_explicit_specialization
10624 (unqualified_id, decl, template_count,
10625 2 * funcdef_flag + 4);
10626 if (decl == error_mark_node)
10627 return error_mark_node;
10630 decl = do_friend (ctype, unqualified_id, decl,
10631 *attrlist, flags,
10632 funcdef_flag);
10633 return decl;
10635 else
10636 return error_mark_node;
10639 /* Structure field. It may not be a function, except for C++. */
10641 if (decl == NULL_TREE)
10643 if (staticp)
10645 /* C++ allows static class members. All other work
10646 for this is done by grokfield. */
10647 decl = build_lang_decl_loc (declarator->id_loc,
10648 VAR_DECL, unqualified_id, type);
10649 set_linkage_for_static_data_member (decl);
10650 /* Even if there is an in-class initialization, DECL
10651 is considered undefined until an out-of-class
10652 definition is provided. */
10653 DECL_EXTERNAL (decl) = 1;
10655 if (thread_p)
10657 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10658 if (declspecs->gnu_thread_keyword_p)
10659 DECL_GNU_TLS_P (decl) = true;
10662 if (constexpr_p && !initialized)
10664 error ("constexpr static data member %qD must have an "
10665 "initializer", decl);
10666 constexpr_p = false;
10669 else
10671 if (constexpr_p)
10673 error ("non-static data member %qE declared %<constexpr%>",
10674 unqualified_id);
10675 constexpr_p = false;
10677 decl = build_decl (input_location,
10678 FIELD_DECL, unqualified_id, type);
10679 DECL_NONADDRESSABLE_P (decl) = bitfield;
10680 if (bitfield && !unqualified_id)
10681 TREE_NO_WARNING (decl) = 1;
10683 if (storage_class == sc_mutable)
10685 DECL_MUTABLE_P (decl) = 1;
10686 storage_class = sc_none;
10689 if (initialized)
10691 /* An attempt is being made to initialize a non-static
10692 member. This is new in C++11. */
10693 maybe_warn_cpp0x (CPP0X_NSDMI);
10695 /* If this has been parsed with static storage class, but
10696 errors forced staticp to be cleared, ensure NSDMI is
10697 not present. */
10698 if (declspecs->storage_class == sc_static)
10699 DECL_INITIAL (decl) = error_mark_node;
10703 bad_specifiers (decl, BSP_FIELD, virtualp,
10704 memfn_quals != TYPE_UNQUALIFIED,
10705 inlinep, friendp, raises != NULL_TREE);
10708 else if (TREE_CODE (type) == FUNCTION_TYPE
10709 || TREE_CODE (type) == METHOD_TYPE)
10711 tree original_name;
10712 int publicp = 0;
10714 if (!unqualified_id)
10715 return error_mark_node;
10717 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10718 original_name = dname;
10719 else
10720 original_name = unqualified_id;
10722 if (storage_class == sc_auto)
10723 error ("storage class %<auto%> invalid for function %qs", name);
10724 else if (storage_class == sc_register)
10725 error ("storage class %<register%> invalid for function %qs", name);
10726 else if (thread_p)
10728 if (declspecs->gnu_thread_keyword_p)
10729 error ("storage class %<__thread%> invalid for function %qs",
10730 name);
10731 else
10732 error ("storage class %<thread_local%> invalid for function %qs",
10733 name);
10736 if (virt_specifiers)
10737 error ("virt-specifiers in %qs not allowed outside a class definition", name);
10738 /* Function declaration not at top level.
10739 Storage classes other than `extern' are not allowed
10740 and `extern' makes no difference. */
10741 if (! toplevel_bindings_p ()
10742 && (storage_class == sc_static
10743 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10744 && pedantic)
10746 if (storage_class == sc_static)
10747 pedwarn (input_location, OPT_Wpedantic,
10748 "%<static%> specified invalid for function %qs "
10749 "declared out of global scope", name);
10750 else
10751 pedwarn (input_location, OPT_Wpedantic,
10752 "%<inline%> specifier invalid for function %qs "
10753 "declared out of global scope", name);
10756 if (ctype == NULL_TREE)
10758 if (virtualp)
10760 error ("virtual non-class function %qs", name);
10761 virtualp = 0;
10763 else if (sfk == sfk_constructor
10764 || sfk == sfk_destructor)
10766 error (funcdef_flag
10767 ? G_("%qs defined in a non-class scope")
10768 : G_("%qs declared in a non-class scope"), name);
10769 sfk = sfk_none;
10773 /* Record whether the function is public. */
10774 publicp = (ctype != NULL_TREE
10775 || storage_class != sc_static);
10777 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10778 virtualp, flags, memfn_quals, rqual, raises,
10779 1, friendp,
10780 publicp, inlinep | (2 * constexpr_p), sfk,
10781 funcdef_flag,
10782 template_count, in_namespace, attrlist,
10783 declarator->id_loc);
10784 if (decl == NULL_TREE)
10785 return error_mark_node;
10787 if (staticp == 1)
10789 int invalid_static = 0;
10791 /* Don't allow a static member function in a class, and forbid
10792 declaring main to be static. */
10793 if (TREE_CODE (type) == METHOD_TYPE)
10795 permerror (input_location, "cannot declare member function %qD to have "
10796 "static linkage", decl);
10797 invalid_static = 1;
10799 else if (current_function_decl)
10801 /* FIXME need arm citation */
10802 error ("cannot declare static function inside another function");
10803 invalid_static = 1;
10806 if (invalid_static)
10808 staticp = 0;
10809 storage_class = sc_none;
10813 else
10815 /* It's a variable. */
10817 /* An uninitialized decl with `extern' is a reference. */
10818 decl = grokvardecl (type, unqualified_id,
10819 declspecs,
10820 initialized,
10821 (type_quals & TYPE_QUAL_CONST) != 0,
10822 ctype ? ctype : in_namespace);
10823 bad_specifiers (decl, BSP_VAR, virtualp,
10824 memfn_quals != TYPE_UNQUALIFIED,
10825 inlinep, friendp, raises != NULL_TREE);
10827 if (ctype)
10829 DECL_CONTEXT (decl) = ctype;
10830 if (staticp == 1)
10832 permerror (input_location, "%<static%> may not be used when defining "
10833 "(as opposed to declaring) a static data member");
10834 staticp = 0;
10835 storage_class = sc_none;
10837 if (storage_class == sc_register && TREE_STATIC (decl))
10839 error ("static member %qD declared %<register%>", decl);
10840 storage_class = sc_none;
10842 if (storage_class == sc_extern && pedantic)
10844 pedwarn (input_location, OPT_Wpedantic,
10845 "cannot explicitly declare member %q#D to have "
10846 "extern linkage", decl);
10847 storage_class = sc_none;
10850 else if (constexpr_p && DECL_EXTERNAL (decl))
10852 error ("declaration of constexpr variable %qD is not a definition",
10853 decl);
10854 constexpr_p = false;
10858 if (storage_class == sc_extern && initialized && !funcdef_flag)
10860 if (toplevel_bindings_p ())
10862 /* It's common practice (and completely valid) to have a const
10863 be initialized and declared extern. */
10864 if (!(type_quals & TYPE_QUAL_CONST))
10865 warning (0, "%qs initialized and declared %<extern%>", name);
10867 else
10869 error ("%qs has both %<extern%> and initializer", name);
10870 return error_mark_node;
10874 /* Record `register' declaration for warnings on &
10875 and in case doing stupid register allocation. */
10877 if (storage_class == sc_register)
10878 DECL_REGISTER (decl) = 1;
10879 else if (storage_class == sc_extern)
10880 DECL_THIS_EXTERN (decl) = 1;
10881 else if (storage_class == sc_static)
10882 DECL_THIS_STATIC (decl) = 1;
10884 /* Set constexpr flag on vars (functions got it in grokfndecl). */
10885 if (constexpr_p && VAR_P (decl))
10886 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10888 /* Record constancy and volatility on the DECL itself . There's
10889 no need to do this when processing a template; we'll do this
10890 for the instantiated declaration based on the type of DECL. */
10891 if (!processing_template_decl)
10892 cp_apply_type_quals_to_decl (type_quals, decl);
10894 return decl;
10898 /* Subroutine of start_function. Ensure that each of the parameter
10899 types (as listed in PARMS) is complete, as is required for a
10900 function definition. */
10902 static void
10903 require_complete_types_for_parms (tree parms)
10905 for (; parms; parms = DECL_CHAIN (parms))
10907 if (dependent_type_p (TREE_TYPE (parms)))
10908 continue;
10909 if (!VOID_TYPE_P (TREE_TYPE (parms))
10910 && complete_type_or_else (TREE_TYPE (parms), parms))
10912 relayout_decl (parms);
10913 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10915 else
10916 /* grokparms or complete_type_or_else will have already issued
10917 an error. */
10918 TREE_TYPE (parms) = error_mark_node;
10922 /* Returns nonzero if T is a local variable. */
10925 local_variable_p (const_tree t)
10927 if ((VAR_P (t)
10928 /* A VAR_DECL with a context that is a _TYPE is a static data
10929 member. */
10930 && !TYPE_P (CP_DECL_CONTEXT (t))
10931 /* Any other non-local variable must be at namespace scope. */
10932 && !DECL_NAMESPACE_SCOPE_P (t))
10933 || (TREE_CODE (t) == PARM_DECL))
10934 return 1;
10936 return 0;
10939 /* Like local_variable_p, but suitable for use as a tree-walking
10940 function. */
10942 static tree
10943 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10944 void * /*data*/)
10946 if (local_variable_p (*tp)
10947 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
10948 return *tp;
10949 else if (TYPE_P (*tp))
10950 *walk_subtrees = 0;
10952 return NULL_TREE;
10955 /* Check that ARG, which is a default-argument expression for a
10956 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
10957 something goes wrong. DECL may also be a _TYPE node, rather than a
10958 DECL, if there is no DECL available. */
10960 tree
10961 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
10963 tree var;
10964 tree decl_type;
10966 if (TREE_CODE (arg) == DEFAULT_ARG)
10967 /* We get a DEFAULT_ARG when looking at an in-class declaration
10968 with a default argument. Ignore the argument for now; we'll
10969 deal with it after the class is complete. */
10970 return arg;
10972 if (TYPE_P (decl))
10974 decl_type = decl;
10975 decl = NULL_TREE;
10977 else
10978 decl_type = TREE_TYPE (decl);
10980 if (arg == error_mark_node
10981 || decl == error_mark_node
10982 || TREE_TYPE (arg) == error_mark_node
10983 || decl_type == error_mark_node)
10984 /* Something already went wrong. There's no need to check
10985 further. */
10986 return error_mark_node;
10988 /* [dcl.fct.default]
10990 A default argument expression is implicitly converted to the
10991 parameter type. */
10992 ++cp_unevaluated_operand;
10993 perform_implicit_conversion_flags (decl_type, arg, complain,
10994 LOOKUP_IMPLICIT);
10995 --cp_unevaluated_operand;
10997 if (warn_zero_as_null_pointer_constant
10998 && TYPE_PTR_OR_PTRMEM_P (decl_type)
10999 && null_ptr_cst_p (arg)
11000 && (complain & tf_warning)
11001 && maybe_warn_zero_as_null_pointer_constant (arg, input_location))
11002 return nullptr_node;
11004 /* [dcl.fct.default]
11006 Local variables shall not be used in default argument
11007 expressions.
11009 The keyword `this' shall not be used in a default argument of a
11010 member function. */
11011 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11012 if (var)
11014 if (complain & tf_warning_or_error)
11016 if (DECL_NAME (var) == this_identifier)
11017 permerror (input_location, "default argument %qE uses %qD",
11018 arg, var);
11019 else
11020 error ("default argument %qE uses local variable %qD", arg, var);
11022 return error_mark_node;
11025 /* All is well. */
11026 return arg;
11029 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
11031 static tree
11032 type_is_deprecated (tree type)
11034 enum tree_code code;
11035 if (TREE_DEPRECATED (type))
11036 return type;
11037 if (TYPE_NAME (type)
11038 && TREE_DEPRECATED (TYPE_NAME (type)))
11039 return type;
11041 /* Do warn about using typedefs to a deprecated class. */
11042 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11043 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11045 code = TREE_CODE (type);
11047 if (code == POINTER_TYPE || code == REFERENCE_TYPE
11048 || code == OFFSET_TYPE || code == FUNCTION_TYPE
11049 || code == METHOD_TYPE || code == ARRAY_TYPE)
11050 return type_is_deprecated (TREE_TYPE (type));
11052 if (TYPE_PTRMEMFUNC_P (type))
11053 return type_is_deprecated
11054 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11056 return NULL_TREE;
11059 /* Decode the list of parameter types for a function type.
11060 Given the list of things declared inside the parens,
11061 return a list of types.
11063 If this parameter does not end with an ellipsis, we append
11064 void_list_node.
11066 *PARMS is set to the chain of PARM_DECLs created. */
11068 static tree
11069 grokparms (tree parmlist, tree *parms)
11071 tree result = NULL_TREE;
11072 tree decls = NULL_TREE;
11073 tree parm;
11074 int any_error = 0;
11076 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11078 tree type = NULL_TREE;
11079 tree init = TREE_PURPOSE (parm);
11080 tree decl = TREE_VALUE (parm);
11081 const char *errmsg;
11083 if (parm == void_list_node)
11084 break;
11086 if (! decl || TREE_TYPE (decl) == error_mark_node)
11087 continue;
11089 type = TREE_TYPE (decl);
11090 if (VOID_TYPE_P (type))
11092 if (same_type_p (type, void_type_node)
11093 && DECL_SELF_REFERENCE_P (type)
11094 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
11095 /* this is a parmlist of `(void)', which is ok. */
11096 break;
11097 cxx_incomplete_type_error (decl, type);
11098 /* It's not a good idea to actually create parameters of
11099 type `void'; other parts of the compiler assume that a
11100 void type terminates the parameter list. */
11101 type = error_mark_node;
11102 TREE_TYPE (decl) = error_mark_node;
11105 if (type != error_mark_node
11106 && TYPE_FOR_JAVA (type)
11107 && MAYBE_CLASS_TYPE_P (type))
11109 error ("parameter %qD has Java class type", decl);
11110 type = error_mark_node;
11111 TREE_TYPE (decl) = error_mark_node;
11112 init = NULL_TREE;
11115 if (type != error_mark_node
11116 && (errmsg = targetm.invalid_parameter_type (type)))
11118 error (errmsg);
11119 type = error_mark_node;
11120 TREE_TYPE (decl) = error_mark_node;
11123 if (type != error_mark_node)
11125 if (deprecated_state != DEPRECATED_SUPPRESS)
11127 tree deptype = type_is_deprecated (type);
11128 if (deptype)
11129 warn_deprecated_use (deptype, NULL_TREE);
11132 /* Top-level qualifiers on the parameters are
11133 ignored for function types. */
11134 type = cp_build_qualified_type (type, 0);
11135 if (TREE_CODE (type) == METHOD_TYPE)
11137 error ("parameter %qD invalidly declared method type", decl);
11138 type = build_pointer_type (type);
11139 TREE_TYPE (decl) = type;
11141 else if (abstract_virtuals_error (decl, type))
11142 any_error = 1; /* Seems like a good idea. */
11143 else if (POINTER_TYPE_P (type))
11145 /* [dcl.fct]/6, parameter types cannot contain pointers
11146 (references) to arrays of unknown bound. */
11147 tree t = TREE_TYPE (type);
11148 int ptr = TYPE_PTR_P (type);
11150 while (1)
11152 if (TYPE_PTR_P (t))
11153 ptr = 1;
11154 else if (TREE_CODE (t) != ARRAY_TYPE)
11155 break;
11156 else if (!TYPE_DOMAIN (t))
11157 break;
11158 t = TREE_TYPE (t);
11160 if (TREE_CODE (t) == ARRAY_TYPE)
11161 error (ptr
11162 ? G_("parameter %qD includes pointer to array of "
11163 "unknown bound %qT")
11164 : G_("parameter %qD includes reference to array of "
11165 "unknown bound %qT"),
11166 decl, t);
11169 if (any_error)
11170 init = NULL_TREE;
11171 else if (init && !processing_template_decl)
11172 init = check_default_argument (decl, init, tf_warning_or_error);
11175 DECL_CHAIN (decl) = decls;
11176 decls = decl;
11177 result = tree_cons (init, type, result);
11179 decls = nreverse (decls);
11180 result = nreverse (result);
11181 if (parm)
11182 result = chainon (result, void_list_node);
11183 *parms = decls;
11185 return result;
11189 /* D is a constructor or overloaded `operator='.
11191 Let T be the class in which D is declared. Then, this function
11192 returns:
11194 -1 if D's is an ill-formed constructor or copy assignment operator
11195 whose first parameter is of type `T'.
11196 0 if D is not a copy constructor or copy assignment
11197 operator.
11198 1 if D is a copy constructor or copy assignment operator whose
11199 first parameter is a reference to non-const qualified T.
11200 2 if D is a copy constructor or copy assignment operator whose
11201 first parameter is a reference to const qualified T.
11203 This function can be used as a predicate. Positive values indicate
11204 a copy constructor and nonzero values indicate a copy assignment
11205 operator. */
11208 copy_fn_p (const_tree d)
11210 tree args;
11211 tree arg_type;
11212 int result = 1;
11214 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11216 if (TREE_CODE (d) == TEMPLATE_DECL
11217 || (DECL_TEMPLATE_INFO (d)
11218 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11219 /* Instantiations of template member functions are never copy
11220 functions. Note that member functions of templated classes are
11221 represented as template functions internally, and we must
11222 accept those as copy functions. */
11223 return 0;
11225 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11226 if (!args)
11227 return 0;
11229 arg_type = TREE_VALUE (args);
11230 if (arg_type == error_mark_node)
11231 return 0;
11233 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11235 /* Pass by value copy assignment operator. */
11236 result = -1;
11238 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11239 && !TYPE_REF_IS_RVALUE (arg_type)
11240 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11242 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11243 result = 2;
11245 else
11246 return 0;
11248 args = TREE_CHAIN (args);
11250 if (args && args != void_list_node && !TREE_PURPOSE (args))
11251 /* There are more non-optional args. */
11252 return 0;
11254 return result;
11257 /* D is a constructor or overloaded `operator='.
11259 Let T be the class in which D is declared. Then, this function
11260 returns true when D is a move constructor or move assignment
11261 operator, false otherwise. */
11263 bool
11264 move_fn_p (const_tree d)
11266 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11268 if (cxx_dialect == cxx98)
11269 /* There are no move constructors if we are in C++98 mode. */
11270 return false;
11272 if (TREE_CODE (d) == TEMPLATE_DECL
11273 || (DECL_TEMPLATE_INFO (d)
11274 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11275 /* Instantiations of template member functions are never move
11276 functions. Note that member functions of templated classes are
11277 represented as template functions internally, and we must
11278 accept those as move functions. */
11279 return 0;
11281 return move_signature_fn_p (d);
11284 /* D is a constructor or overloaded `operator='.
11286 Then, this function returns true when D has the same signature as a move
11287 constructor or move assignment operator (because either it is such a
11288 ctor/op= or it is a template specialization with the same signature),
11289 false otherwise. */
11291 bool
11292 move_signature_fn_p (const_tree d)
11294 tree args;
11295 tree arg_type;
11296 bool result = false;
11298 args = FUNCTION_FIRST_USER_PARMTYPE (d);
11299 if (!args)
11300 return 0;
11302 arg_type = TREE_VALUE (args);
11303 if (arg_type == error_mark_node)
11304 return 0;
11306 if (TREE_CODE (arg_type) == REFERENCE_TYPE
11307 && TYPE_REF_IS_RVALUE (arg_type)
11308 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11309 DECL_CONTEXT (d)))
11310 result = true;
11312 args = TREE_CHAIN (args);
11314 if (args && args != void_list_node && !TREE_PURPOSE (args))
11315 /* There are more non-optional args. */
11316 return false;
11318 return result;
11321 /* Remember any special properties of member function DECL. */
11323 void
11324 grok_special_member_properties (tree decl)
11326 tree class_type;
11328 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11329 return;
11331 class_type = DECL_CONTEXT (decl);
11332 if (DECL_CONSTRUCTOR_P (decl))
11334 int ctor = copy_fn_p (decl);
11336 if (!DECL_ARTIFICIAL (decl))
11337 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11339 if (ctor > 0)
11341 /* [class.copy]
11343 A non-template constructor for class X is a copy
11344 constructor if its first parameter is of type X&, const
11345 X&, volatile X& or const volatile X&, and either there
11346 are no other parameters or else all other parameters have
11347 default arguments. */
11348 TYPE_HAS_COPY_CTOR (class_type) = 1;
11349 if (user_provided_p (decl))
11350 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11351 if (ctor > 1)
11352 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11354 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11356 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11357 if (user_provided_p (decl))
11358 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
11360 else if (move_fn_p (decl) && user_provided_p (decl))
11361 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11362 else if (is_list_ctor (decl))
11363 TYPE_HAS_LIST_CTOR (class_type) = 1;
11365 if (DECL_DECLARED_CONSTEXPR_P (decl)
11366 && !copy_fn_p (decl) && !move_fn_p (decl))
11367 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11369 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11371 /* [class.copy]
11373 A non-template assignment operator for class X is a copy
11374 assignment operator if its parameter is of type X, X&, const
11375 X&, volatile X& or const volatile X&. */
11377 int assop = copy_fn_p (decl);
11379 if (assop)
11381 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11382 if (user_provided_p (decl))
11383 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11384 if (assop != 1)
11385 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11387 else if (move_fn_p (decl) && user_provided_p (decl))
11388 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11390 /* Destructors are handled in check_methods. */
11393 /* Check a constructor DECL has the correct form. Complains
11394 if the class has a constructor of the form X(X). */
11397 grok_ctor_properties (const_tree ctype, const_tree decl)
11399 int ctor_parm = copy_fn_p (decl);
11401 if (ctor_parm < 0)
11403 /* [class.copy]
11405 A declaration of a constructor for a class X is ill-formed if
11406 its first parameter is of type (optionally cv-qualified) X
11407 and either there are no other parameters or else all other
11408 parameters have default arguments.
11410 We *don't* complain about member template instantiations that
11411 have this form, though; they can occur as we try to decide
11412 what constructor to use during overload resolution. Since
11413 overload resolution will never prefer such a constructor to
11414 the non-template copy constructor (which is either explicitly
11415 or implicitly defined), there's no need to worry about their
11416 existence. Theoretically, they should never even be
11417 instantiated, but that's hard to forestall. */
11418 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11419 ctype, ctype);
11420 return 0;
11423 return 1;
11426 /* An operator with this code is unary, but can also be binary. */
11428 static int
11429 ambi_op_p (enum tree_code code)
11431 return (code == INDIRECT_REF
11432 || code == ADDR_EXPR
11433 || code == UNARY_PLUS_EXPR
11434 || code == NEGATE_EXPR
11435 || code == PREINCREMENT_EXPR
11436 || code == PREDECREMENT_EXPR);
11439 /* An operator with this name can only be unary. */
11441 static int
11442 unary_op_p (enum tree_code code)
11444 return (code == TRUTH_NOT_EXPR
11445 || code == BIT_NOT_EXPR
11446 || code == COMPONENT_REF
11447 || code == TYPE_EXPR);
11450 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
11451 errors are issued for invalid declarations. */
11453 bool
11454 grok_op_properties (tree decl, bool complain)
11456 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11457 tree argtype;
11458 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11459 tree name = DECL_NAME (decl);
11460 enum tree_code operator_code;
11461 int arity;
11462 bool ellipsis_p;
11463 tree class_type;
11465 /* Count the number of arguments and check for ellipsis. */
11466 for (argtype = argtypes, arity = 0;
11467 argtype && argtype != void_list_node;
11468 argtype = TREE_CHAIN (argtype))
11469 ++arity;
11470 ellipsis_p = !argtype;
11472 class_type = DECL_CONTEXT (decl);
11473 if (class_type && !CLASS_TYPE_P (class_type))
11474 class_type = NULL_TREE;
11476 if (DECL_CONV_FN_P (decl))
11477 operator_code = TYPE_EXPR;
11478 else
11481 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
11482 if (ansi_opname (CODE) == name) \
11484 operator_code = (CODE); \
11485 break; \
11487 else if (ansi_assopname (CODE) == name) \
11489 operator_code = (CODE); \
11490 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
11491 break; \
11494 #include "operators.def"
11495 #undef DEF_OPERATOR
11497 gcc_unreachable ();
11499 while (0);
11500 gcc_assert (operator_code != MAX_TREE_CODES);
11501 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11503 if (class_type)
11504 switch (operator_code)
11506 case NEW_EXPR:
11507 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11508 break;
11510 case DELETE_EXPR:
11511 TYPE_GETS_DELETE (class_type) |= 1;
11512 break;
11514 case VEC_NEW_EXPR:
11515 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11516 break;
11518 case VEC_DELETE_EXPR:
11519 TYPE_GETS_DELETE (class_type) |= 2;
11520 break;
11522 default:
11523 break;
11526 /* [basic.std.dynamic.allocation]/1:
11528 A program is ill-formed if an allocation function is declared
11529 in a namespace scope other than global scope or declared static
11530 in global scope.
11532 The same also holds true for deallocation functions. */
11533 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11534 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11536 if (DECL_NAMESPACE_SCOPE_P (decl))
11538 if (CP_DECL_CONTEXT (decl) != global_namespace)
11540 error ("%qD may not be declared within a namespace", decl);
11541 return false;
11543 else if (!TREE_PUBLIC (decl))
11545 error ("%qD may not be declared as static", decl);
11546 return false;
11551 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11553 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11554 DECL_IS_OPERATOR_NEW (decl) = 1;
11556 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11557 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11558 else
11560 /* An operator function must either be a non-static member function
11561 or have at least one parameter of a class, a reference to a class,
11562 an enumeration, or a reference to an enumeration. 13.4.0.6 */
11563 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11565 if (operator_code == TYPE_EXPR
11566 || operator_code == CALL_EXPR
11567 || operator_code == COMPONENT_REF
11568 || operator_code == ARRAY_REF
11569 || operator_code == NOP_EXPR)
11571 error ("%qD must be a nonstatic member function", decl);
11572 return false;
11574 else
11576 tree p;
11578 if (DECL_STATIC_FUNCTION_P (decl))
11580 error ("%qD must be either a non-static member "
11581 "function or a non-member function", decl);
11582 return false;
11585 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11587 tree arg = non_reference (TREE_VALUE (p));
11588 if (arg == error_mark_node)
11589 return false;
11591 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11592 because these checks are performed even on
11593 template functions. */
11594 if (MAYBE_CLASS_TYPE_P (arg)
11595 || TREE_CODE (arg) == ENUMERAL_TYPE)
11596 break;
11599 if (!p || p == void_list_node)
11601 if (complain)
11602 error ("%qD must have an argument of class or "
11603 "enumerated type", decl);
11604 return false;
11609 /* There are no restrictions on the arguments to an overloaded
11610 "operator ()". */
11611 if (operator_code == CALL_EXPR)
11612 return true;
11614 /* Warn about conversion operators that will never be used. */
11615 if (IDENTIFIER_TYPENAME_P (name)
11616 && ! DECL_TEMPLATE_INFO (decl)
11617 && warn_conversion
11618 /* Warn only declaring the function; there is no need to
11619 warn again about out-of-class definitions. */
11620 && class_type == current_class_type)
11622 tree t = TREE_TYPE (name);
11623 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11625 if (ref)
11626 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11628 if (VOID_TYPE_P (t))
11629 warning (OPT_Wconversion,
11631 ? G_("conversion to a reference to void "
11632 "will never use a type conversion operator")
11633 : G_("conversion to void "
11634 "will never use a type conversion operator"));
11635 else if (class_type)
11637 if (t == class_type)
11638 warning (OPT_Wconversion,
11640 ? G_("conversion to a reference to the same type "
11641 "will never use a type conversion operator")
11642 : G_("conversion to the same type "
11643 "will never use a type conversion operator"));
11644 /* Don't force t to be complete here. */
11645 else if (MAYBE_CLASS_TYPE_P (t)
11646 && COMPLETE_TYPE_P (t)
11647 && DERIVED_FROM_P (t, class_type))
11648 warning (OPT_Wconversion,
11650 ? G_("conversion to a reference to a base class "
11651 "will never use a type conversion operator")
11652 : G_("conversion to a base class "
11653 "will never use a type conversion operator"));
11658 if (operator_code == COND_EXPR)
11660 /* 13.4.0.3 */
11661 error ("ISO C++ prohibits overloading operator ?:");
11662 return false;
11664 else if (ellipsis_p)
11666 error ("%qD must not have variable number of arguments", decl);
11667 return false;
11669 else if (ambi_op_p (operator_code))
11671 if (arity == 1)
11672 /* We pick the one-argument operator codes by default, so
11673 we don't have to change anything. */
11675 else if (arity == 2)
11677 /* If we thought this was a unary operator, we now know
11678 it to be a binary operator. */
11679 switch (operator_code)
11681 case INDIRECT_REF:
11682 operator_code = MULT_EXPR;
11683 break;
11685 case ADDR_EXPR:
11686 operator_code = BIT_AND_EXPR;
11687 break;
11689 case UNARY_PLUS_EXPR:
11690 operator_code = PLUS_EXPR;
11691 break;
11693 case NEGATE_EXPR:
11694 operator_code = MINUS_EXPR;
11695 break;
11697 case PREINCREMENT_EXPR:
11698 operator_code = POSTINCREMENT_EXPR;
11699 break;
11701 case PREDECREMENT_EXPR:
11702 operator_code = POSTDECREMENT_EXPR;
11703 break;
11705 default:
11706 gcc_unreachable ();
11709 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11711 if ((operator_code == POSTINCREMENT_EXPR
11712 || operator_code == POSTDECREMENT_EXPR)
11713 && ! processing_template_decl
11714 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11716 if (methodp)
11717 error ("postfix %qD must take %<int%> as its argument",
11718 decl);
11719 else
11720 error ("postfix %qD must take %<int%> as its second "
11721 "argument", decl);
11722 return false;
11725 else
11727 if (methodp)
11728 error ("%qD must take either zero or one argument", decl);
11729 else
11730 error ("%qD must take either one or two arguments", decl);
11731 return false;
11734 /* More Effective C++ rule 6. */
11735 if (warn_ecpp
11736 && (operator_code == POSTINCREMENT_EXPR
11737 || operator_code == POSTDECREMENT_EXPR
11738 || operator_code == PREINCREMENT_EXPR
11739 || operator_code == PREDECREMENT_EXPR))
11741 tree arg = TREE_VALUE (argtypes);
11742 tree ret = TREE_TYPE (TREE_TYPE (decl));
11743 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11744 arg = TREE_TYPE (arg);
11745 arg = TYPE_MAIN_VARIANT (arg);
11746 if (operator_code == PREINCREMENT_EXPR
11747 || operator_code == PREDECREMENT_EXPR)
11749 if (TREE_CODE (ret) != REFERENCE_TYPE
11750 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11751 arg))
11752 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11753 build_reference_type (arg));
11755 else
11757 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11758 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11762 else if (unary_op_p (operator_code))
11764 if (arity != 1)
11766 if (methodp)
11767 error ("%qD must take %<void%>", decl);
11768 else
11769 error ("%qD must take exactly one argument", decl);
11770 return false;
11773 else /* if (binary_op_p (operator_code)) */
11775 if (arity != 2)
11777 if (methodp)
11778 error ("%qD must take exactly one argument", decl);
11779 else
11780 error ("%qD must take exactly two arguments", decl);
11781 return false;
11784 /* More Effective C++ rule 7. */
11785 if (warn_ecpp
11786 && (operator_code == TRUTH_ANDIF_EXPR
11787 || operator_code == TRUTH_ORIF_EXPR
11788 || operator_code == COMPOUND_EXPR))
11789 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11790 decl);
11793 /* Effective C++ rule 23. */
11794 if (warn_ecpp
11795 && arity == 2
11796 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11797 && (operator_code == PLUS_EXPR
11798 || operator_code == MINUS_EXPR
11799 || operator_code == TRUNC_DIV_EXPR
11800 || operator_code == MULT_EXPR
11801 || operator_code == TRUNC_MOD_EXPR)
11802 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11803 warning (OPT_Weffc__, "%qD should return by value", decl);
11805 /* [over.oper]/8 */
11806 for (; argtypes && argtypes != void_list_node;
11807 argtypes = TREE_CHAIN (argtypes))
11808 if (TREE_PURPOSE (argtypes))
11810 TREE_PURPOSE (argtypes) = NULL_TREE;
11811 if (operator_code == POSTINCREMENT_EXPR
11812 || operator_code == POSTDECREMENT_EXPR)
11814 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments",
11815 decl);
11817 else
11819 error ("%qD cannot have default arguments", decl);
11820 return false;
11824 return true;
11827 /* Return a string giving the keyword associate with CODE. */
11829 static const char *
11830 tag_name (enum tag_types code)
11832 switch (code)
11834 case record_type:
11835 return "struct";
11836 case class_type:
11837 return "class";
11838 case union_type:
11839 return "union";
11840 case enum_type:
11841 return "enum";
11842 case typename_type:
11843 return "typename";
11844 default:
11845 gcc_unreachable ();
11849 /* Name lookup in an elaborated-type-specifier (after the keyword
11850 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
11851 elaborated-type-specifier is invalid, issue a diagnostic and return
11852 error_mark_node; otherwise, return the *_TYPE to which it referred.
11853 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
11855 tree
11856 check_elaborated_type_specifier (enum tag_types tag_code,
11857 tree decl,
11858 bool allow_template_p)
11860 tree type;
11862 /* In the case of:
11864 struct S { struct S *p; };
11866 name lookup will find the TYPE_DECL for the implicit "S::S"
11867 typedef. Adjust for that here. */
11868 if (DECL_SELF_REFERENCE_P (decl))
11869 decl = TYPE_NAME (TREE_TYPE (decl));
11871 type = TREE_TYPE (decl);
11873 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11874 is false for this case as well. */
11875 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11877 error ("using template type parameter %qT after %qs",
11878 type, tag_name (tag_code));
11879 return error_mark_node;
11881 /* Accept template template parameters. */
11882 else if (allow_template_p
11883 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
11884 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
11886 /* [dcl.type.elab]
11888 If the identifier resolves to a typedef-name or the
11889 simple-template-id resolves to an alias template
11890 specialization, the elaborated-type-specifier is ill-formed.
11892 In other words, the only legitimate declaration to use in the
11893 elaborated type specifier is the implicit typedef created when
11894 the type is declared. */
11895 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11896 && !DECL_SELF_REFERENCE_P (decl)
11897 && tag_code != typename_type)
11899 if (alias_template_specialization_p (type))
11900 error ("using alias template specialization %qT after %qs",
11901 type, tag_name (tag_code));
11902 else
11903 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11904 inform (DECL_SOURCE_LOCATION (decl),
11905 "%qD has a previous declaration here", decl);
11906 return error_mark_node;
11908 else if (TREE_CODE (type) != RECORD_TYPE
11909 && TREE_CODE (type) != UNION_TYPE
11910 && tag_code != enum_type
11911 && tag_code != typename_type)
11913 error ("%qT referred to as %qs", type, tag_name (tag_code));
11914 inform (input_location, "%q+T has a previous declaration here", type);
11915 return error_mark_node;
11917 else if (TREE_CODE (type) != ENUMERAL_TYPE
11918 && tag_code == enum_type)
11920 error ("%qT referred to as enum", type);
11921 inform (input_location, "%q+T has a previous declaration here", type);
11922 return error_mark_node;
11924 else if (!allow_template_p
11925 && TREE_CODE (type) == RECORD_TYPE
11926 && CLASSTYPE_IS_TEMPLATE (type))
11928 /* If a class template appears as elaborated type specifier
11929 without a template header such as:
11931 template <class T> class C {};
11932 void f(class C); // No template header here
11934 then the required template argument is missing. */
11935 error ("template argument required for %<%s %T%>",
11936 tag_name (tag_code),
11937 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11938 return error_mark_node;
11941 return type;
11944 /* Lookup NAME in elaborate type specifier in scope according to
11945 SCOPE and issue diagnostics if necessary.
11946 Return *_TYPE node upon success, NULL_TREE when the NAME is not
11947 found, and ERROR_MARK_NODE for type error. */
11949 static tree
11950 lookup_and_check_tag (enum tag_types tag_code, tree name,
11951 tag_scope scope, bool template_header_p)
11953 tree t;
11954 tree decl;
11955 if (scope == ts_global)
11957 /* First try ordinary name lookup, ignoring hidden class name
11958 injected via friend declaration. */
11959 decl = lookup_name_prefer_type (name, 2);
11960 /* If that fails, the name will be placed in the smallest
11961 non-class, non-function-prototype scope according to 3.3.1/5.
11962 We may already have a hidden name declared as friend in this
11963 scope. So lookup again but not ignoring hidden names.
11964 If we find one, that name will be made visible rather than
11965 creating a new tag. */
11966 if (!decl)
11967 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11969 else
11970 decl = lookup_type_scope (name, scope);
11972 if (decl
11973 && (DECL_CLASS_TEMPLATE_P (decl)
11974 || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
11975 decl = DECL_TEMPLATE_RESULT (decl);
11977 if (decl && TREE_CODE (decl) == TYPE_DECL)
11979 /* Look for invalid nested type:
11980 class C {
11981 class C {};
11982 }; */
11983 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11985 error ("%qD has the same name as the class in which it is "
11986 "declared",
11987 decl);
11988 return error_mark_node;
11991 /* Two cases we need to consider when deciding if a class
11992 template is allowed as an elaborated type specifier:
11993 1. It is a self reference to its own class.
11994 2. It comes with a template header.
11996 For example:
11998 template <class T> class C {
11999 class C *c1; // DECL_SELF_REFERENCE_P is true
12000 class D;
12002 template <class U> class C; // template_header_p is true
12003 template <class T> class C<T>::D {
12004 class C *c2; // DECL_SELF_REFERENCE_P is true
12005 }; */
12007 t = check_elaborated_type_specifier (tag_code,
12008 decl,
12009 template_header_p
12010 | DECL_SELF_REFERENCE_P (decl));
12011 return t;
12013 else if (decl && TREE_CODE (decl) == TREE_LIST)
12015 error ("reference to %qD is ambiguous", name);
12016 print_candidates (decl);
12017 return error_mark_node;
12019 else
12020 return NULL_TREE;
12023 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12024 Define the tag as a forward-reference if it is not defined.
12026 If a declaration is given, process it here, and report an error if
12027 multiple declarations are not identical.
12029 SCOPE is TS_CURRENT when this is also a definition. Only look in
12030 the current frame for the name (since C++ allows new names in any
12031 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12032 declaration. Only look beginning from the current scope outward up
12033 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
12035 TEMPLATE_HEADER_P is true when this declaration is preceded by
12036 a set of template parameters. */
12038 static tree
12039 xref_tag_1 (enum tag_types tag_code, tree name,
12040 tag_scope orig_scope, bool template_header_p)
12042 enum tree_code code;
12043 tree t;
12044 tree context = NULL_TREE;
12045 tag_scope scope;
12047 gcc_assert (identifier_p (name));
12049 switch (tag_code)
12051 case record_type:
12052 case class_type:
12053 code = RECORD_TYPE;
12054 break;
12055 case union_type:
12056 code = UNION_TYPE;
12057 break;
12058 case enum_type:
12059 code = ENUMERAL_TYPE;
12060 break;
12061 default:
12062 gcc_unreachable ();
12065 if (orig_scope == ts_lambda)
12066 scope = ts_current;
12067 else
12068 scope = orig_scope;
12070 /* In case of anonymous name, xref_tag is only called to
12071 make type node and push name. Name lookup is not required. */
12072 if (ANON_AGGRNAME_P (name))
12073 t = NULL_TREE;
12074 else
12075 t = lookup_and_check_tag (tag_code, name,
12076 scope, template_header_p);
12078 if (t == error_mark_node)
12079 return error_mark_node;
12081 if (scope != ts_current && t && current_class_type
12082 && template_class_depth (current_class_type)
12083 && template_header_p)
12085 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12086 return t;
12088 /* Since SCOPE is not TS_CURRENT, we are not looking at a
12089 definition of this tag. Since, in addition, we are currently
12090 processing a (member) template declaration of a template
12091 class, we must be very careful; consider:
12093 template <class X>
12094 struct S1
12096 template <class U>
12097 struct S2
12098 { template <class V>
12099 friend struct S1; };
12101 Here, the S2::S1 declaration should not be confused with the
12102 outer declaration. In particular, the inner version should
12103 have a template parameter of level 2, not level 1. This
12104 would be particularly important if the member declaration
12105 were instead:
12107 template <class V = U> friend struct S1;
12109 say, when we should tsubst into `U' when instantiating
12110 S2. On the other hand, when presented with:
12112 template <class T>
12113 struct S1 {
12114 template <class U>
12115 struct S2 {};
12116 template <class U>
12117 friend struct S2;
12120 we must find the inner binding eventually. We
12121 accomplish this by making sure that the new type we
12122 create to represent this declaration has the right
12123 TYPE_CONTEXT. */
12124 context = TYPE_CONTEXT (t);
12125 t = NULL_TREE;
12128 if (! t)
12130 /* If no such tag is yet defined, create a forward-reference node
12131 and record it as the "definition".
12132 When a real declaration of this type is found,
12133 the forward-reference will be altered into a real type. */
12134 if (code == ENUMERAL_TYPE)
12136 error ("use of enum %q#D without previous declaration", name);
12137 return error_mark_node;
12139 else
12141 t = make_class_type (code);
12142 TYPE_CONTEXT (t) = context;
12143 if (orig_scope == ts_lambda)
12144 /* Remember that we're declaring a lambda to avoid bogus errors
12145 in push_template_decl. */
12146 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12147 t = pushtag (name, t, scope);
12150 else
12152 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12154 if (!redeclare_class_template (t, current_template_parms))
12155 return error_mark_node;
12157 else if (!processing_template_decl
12158 && CLASS_TYPE_P (t)
12159 && CLASSTYPE_IS_TEMPLATE (t))
12161 error ("redeclaration of %qT as a non-template", t);
12162 error ("previous declaration %q+D", t);
12163 return error_mark_node;
12166 /* Make injected friend class visible. */
12167 if (scope != ts_within_enclosing_non_class
12168 && hidden_name_p (TYPE_NAME (t)))
12170 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12171 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12173 if (TYPE_TEMPLATE_INFO (t))
12175 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12176 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12181 return t;
12184 /* Wrapper for xref_tag_1. */
12186 tree
12187 xref_tag (enum tag_types tag_code, tree name,
12188 tag_scope scope, bool template_header_p)
12190 tree ret;
12191 bool subtime;
12192 subtime = timevar_cond_start (TV_NAME_LOOKUP);
12193 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12194 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12195 return ret;
12199 tree
12200 xref_tag_from_type (tree old, tree id, tag_scope scope)
12202 enum tag_types tag_kind;
12204 if (TREE_CODE (old) == RECORD_TYPE)
12205 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12206 else
12207 tag_kind = union_type;
12209 if (id == NULL_TREE)
12210 id = TYPE_IDENTIFIER (old);
12212 return xref_tag (tag_kind, id, scope, false);
12215 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12216 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
12217 access_* node, and the TREE_VALUE is the type of the base-class.
12218 Non-NULL TREE_TYPE indicates virtual inheritance.
12220 Returns true if the binfo hierarchy was successfully created,
12221 false if an error was detected. */
12223 bool
12224 xref_basetypes (tree ref, tree base_list)
12226 tree *basep;
12227 tree binfo, base_binfo;
12228 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
12229 unsigned max_bases = 0; /* Maximum direct bases. */
12230 int i;
12231 tree default_access;
12232 tree igo_prev; /* Track Inheritance Graph Order. */
12234 if (ref == error_mark_node)
12235 return false;
12237 /* The base of a derived class is private by default, all others are
12238 public. */
12239 default_access = (TREE_CODE (ref) == RECORD_TYPE
12240 && CLASSTYPE_DECLARED_CLASS (ref)
12241 ? access_private_node : access_public_node);
12243 /* First, make sure that any templates in base-classes are
12244 instantiated. This ensures that if we call ourselves recursively
12245 we do not get confused about which classes are marked and which
12246 are not. */
12247 basep = &base_list;
12248 while (*basep)
12250 tree basetype = TREE_VALUE (*basep);
12252 /* The dependent_type_p call below should really be dependent_scope_p
12253 so that we give a hard error about using an incomplete type as a
12254 base, but we allow it with a pedwarn for backward
12255 compatibility. */
12256 if (processing_template_decl
12257 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12258 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12259 if (!dependent_type_p (basetype)
12260 && !complete_type_or_else (basetype, NULL))
12261 /* An incomplete type. Remove it from the list. */
12262 *basep = TREE_CHAIN (*basep);
12263 else
12265 max_bases++;
12266 if (TREE_TYPE (*basep))
12267 max_vbases++;
12268 if (CLASS_TYPE_P (basetype))
12269 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12270 basep = &TREE_CHAIN (*basep);
12274 TYPE_MARKED_P (ref) = 1;
12276 /* The binfo slot should be empty, unless this is an (ill-formed)
12277 redefinition. */
12278 if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12280 error ("redefinition of %q#T", ref);
12281 return false;
12284 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12286 binfo = make_tree_binfo (max_bases);
12288 TYPE_BINFO (ref) = binfo;
12289 BINFO_OFFSET (binfo) = size_zero_node;
12290 BINFO_TYPE (binfo) = ref;
12292 /* Apply base-class info set up to the variants of this type. */
12293 fixup_type_variants (ref);
12295 if (max_bases)
12297 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12298 /* An aggregate cannot have baseclasses. */
12299 CLASSTYPE_NON_AGGREGATE (ref) = 1;
12301 if (TREE_CODE (ref) == UNION_TYPE)
12303 error ("derived union %qT invalid", ref);
12304 return false;
12308 if (max_bases > 1)
12310 if (TYPE_FOR_JAVA (ref))
12312 error ("Java class %qT cannot have multiple bases", ref);
12313 return false;
12317 if (max_vbases)
12319 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12321 if (TYPE_FOR_JAVA (ref))
12323 error ("Java class %qT cannot have virtual bases", ref);
12324 return false;
12328 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12330 tree access = TREE_PURPOSE (base_list);
12331 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12332 tree basetype = TREE_VALUE (base_list);
12334 if (access == access_default_node)
12335 access = default_access;
12337 if (PACK_EXPANSION_P (basetype))
12338 basetype = PACK_EXPANSION_PATTERN (basetype);
12339 if (TREE_CODE (basetype) == TYPE_DECL)
12340 basetype = TREE_TYPE (basetype);
12341 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12343 error ("base type %qT fails to be a struct or class type",
12344 basetype);
12345 return false;
12348 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12349 TYPE_FOR_JAVA (ref) = 1;
12351 base_binfo = NULL_TREE;
12352 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12354 base_binfo = TYPE_BINFO (basetype);
12355 /* The original basetype could have been a typedef'd type. */
12356 basetype = BINFO_TYPE (base_binfo);
12358 /* Inherit flags from the base. */
12359 TYPE_HAS_NEW_OPERATOR (ref)
12360 |= TYPE_HAS_NEW_OPERATOR (basetype);
12361 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12362 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12363 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12364 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12365 CLASSTYPE_DIAMOND_SHAPED_P (ref)
12366 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12367 CLASSTYPE_REPEATED_BASE_P (ref)
12368 |= CLASSTYPE_REPEATED_BASE_P (basetype);
12371 /* We must do this test after we've seen through a typedef
12372 type. */
12373 if (TYPE_MARKED_P (basetype))
12375 if (basetype == ref)
12376 error ("recursive type %qT undefined", basetype);
12377 else
12378 error ("duplicate base type %qT invalid", basetype);
12379 return false;
12382 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12383 /* Regenerate the pack expansion for the bases. */
12384 basetype = make_pack_expansion (basetype);
12386 TYPE_MARKED_P (basetype) = 1;
12388 base_binfo = copy_binfo (base_binfo, basetype, ref,
12389 &igo_prev, via_virtual);
12390 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12391 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12393 BINFO_BASE_APPEND (binfo, base_binfo);
12394 BINFO_BASE_ACCESS_APPEND (binfo, access);
12397 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12398 /* If we didn't get max_vbases vbases, we must have shared at
12399 least one of them, and are therefore diamond shaped. */
12400 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12402 /* Unmark all the types. */
12403 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12404 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12405 TYPE_MARKED_P (ref) = 0;
12407 /* Now see if we have a repeated base type. */
12408 if (!CLASSTYPE_REPEATED_BASE_P (ref))
12410 for (base_binfo = binfo; base_binfo;
12411 base_binfo = TREE_CHAIN (base_binfo))
12413 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12415 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12416 break;
12418 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12420 for (base_binfo = binfo; base_binfo;
12421 base_binfo = TREE_CHAIN (base_binfo))
12422 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12423 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12424 else
12425 break;
12428 return true;
12432 /* Copies the enum-related properties from type SRC to type DST.
12433 Used with the underlying type of an enum and the enum itself. */
12434 static void
12435 copy_type_enum (tree dst, tree src)
12437 tree t;
12438 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12440 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12441 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12442 TYPE_SIZE (t) = TYPE_SIZE (src);
12443 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12444 SET_TYPE_MODE (dst, TYPE_MODE (src));
12445 TYPE_PRECISION (t) = TYPE_PRECISION (src);
12446 TYPE_ALIGN (t) = TYPE_ALIGN (src);
12447 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12448 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12452 /* Begin compiling the definition of an enumeration type.
12453 NAME is its name,
12455 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12457 UNDERLYING_TYPE is the type that will be used as the storage for
12458 the enumeration type. This should be NULL_TREE if no storage type
12459 was specified.
12461 SCOPED_ENUM_P is true if this is a scoped enumeration type.
12463 if IS_NEW is not NULL, gets TRUE iff a new type is created.
12465 Returns the type object, as yet incomplete.
12466 Also records info about it so that build_enumerator
12467 may be used to declare the individual values as they are read. */
12469 tree
12470 start_enum (tree name, tree enumtype, tree underlying_type,
12471 bool scoped_enum_p, bool *is_new)
12473 tree prevtype = NULL_TREE;
12474 gcc_assert (identifier_p (name));
12476 if (is_new)
12477 *is_new = false;
12478 /* [C++0x dcl.enum]p5:
12480 If not explicitly specified, the underlying type of a scoped
12481 enumeration type is int. */
12482 if (!underlying_type && scoped_enum_p)
12483 underlying_type = integer_type_node;
12485 if (underlying_type)
12486 underlying_type = cv_unqualified (underlying_type);
12488 /* If this is the real definition for a previous forward reference,
12489 fill in the contents in the same object that used to be the
12490 forward reference. */
12491 if (!enumtype)
12492 enumtype = lookup_and_check_tag (enum_type, name,
12493 /*tag_scope=*/ts_current,
12494 /*template_header_p=*/false);
12496 /* In case of a template_decl, the only check that should be deferred
12497 to instantiation time is the comparison of underlying types. */
12498 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12500 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12502 error_at (input_location, "scoped/unscoped mismatch "
12503 "in enum %q#T", enumtype);
12504 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12505 "previous definition here");
12506 enumtype = error_mark_node;
12508 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12510 error_at (input_location, "underlying type mismatch "
12511 "in enum %q#T", enumtype);
12512 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12513 "previous definition here");
12514 enumtype = error_mark_node;
12516 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12517 && !dependent_type_p (underlying_type)
12518 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12519 && !same_type_p (underlying_type,
12520 ENUM_UNDERLYING_TYPE (enumtype)))
12522 error_at (input_location, "different underlying type "
12523 "in enum %q#T", enumtype);
12524 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12525 "previous definition here");
12526 underlying_type = NULL_TREE;
12530 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12531 || processing_template_decl)
12533 /* In case of error, make a dummy enum to allow parsing to
12534 continue. */
12535 if (enumtype == error_mark_node)
12537 name = make_anon_name ();
12538 enumtype = NULL_TREE;
12541 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12542 of an opaque enum, or an opaque enum of an already defined
12543 enumeration (C++0x only).
12544 In any other case, it'll be NULL_TREE. */
12545 if (!enumtype)
12547 if (is_new)
12548 *is_new = true;
12550 prevtype = enumtype;
12552 /* Do not push the decl more than once, unless we need to
12553 compare underlying types at instantiation time */
12554 if (!enumtype
12555 || TREE_CODE (enumtype) != ENUMERAL_TYPE
12556 || (underlying_type
12557 && dependent_type_p (underlying_type))
12558 || (ENUM_UNDERLYING_TYPE (enumtype)
12559 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12561 enumtype = cxx_make_type (ENUMERAL_TYPE);
12562 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12564 else
12565 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12566 false);
12568 if (enumtype == error_mark_node)
12569 return error_mark_node;
12571 /* The enum is considered opaque until the opening '{' of the
12572 enumerator list. */
12573 SET_OPAQUE_ENUM_P (enumtype, true);
12574 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12577 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12579 if (underlying_type)
12581 if (CP_INTEGRAL_TYPE_P (underlying_type))
12583 copy_type_enum (enumtype, underlying_type);
12584 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12586 else if (dependent_type_p (underlying_type))
12587 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12588 else
12589 error ("underlying type %<%T%> of %<%T%> must be an integral type",
12590 underlying_type, enumtype);
12593 /* If into a template class, the returned enum is always the first
12594 declaration (opaque or not) seen. This way all the references to
12595 this type will be to the same declaration. The following ones are used
12596 only to check for definition errors. */
12597 if (prevtype && processing_template_decl)
12598 return prevtype;
12599 else
12600 return enumtype;
12603 /* After processing and defining all the values of an enumeration type,
12604 install their decls in the enumeration type.
12605 ENUMTYPE is the type object. */
12607 void
12608 finish_enum_value_list (tree enumtype)
12610 tree values;
12611 tree underlying_type;
12612 tree decl;
12613 tree value;
12614 tree minnode, maxnode;
12615 tree t;
12617 bool fixed_underlying_type_p
12618 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12620 /* We built up the VALUES in reverse order. */
12621 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12623 /* For an enum defined in a template, just set the type of the values;
12624 all further processing is postponed until the template is
12625 instantiated. We need to set the type so that tsubst of a CONST_DECL
12626 works. */
12627 if (processing_template_decl)
12629 for (values = TYPE_VALUES (enumtype);
12630 values;
12631 values = TREE_CHAIN (values))
12632 TREE_TYPE (TREE_VALUE (values)) = enumtype;
12633 return;
12636 /* Determine the minimum and maximum values of the enumerators. */
12637 if (TYPE_VALUES (enumtype))
12639 minnode = maxnode = NULL_TREE;
12641 for (values = TYPE_VALUES (enumtype);
12642 values;
12643 values = TREE_CHAIN (values))
12645 decl = TREE_VALUE (values);
12647 /* [dcl.enum]: Following the closing brace of an enum-specifier,
12648 each enumerator has the type of its enumeration. Prior to the
12649 closing brace, the type of each enumerator is the type of its
12650 initializing value. */
12651 TREE_TYPE (decl) = enumtype;
12653 /* Update the minimum and maximum values, if appropriate. */
12654 value = DECL_INITIAL (decl);
12655 if (value == error_mark_node)
12656 value = integer_zero_node;
12657 /* Figure out what the minimum and maximum values of the
12658 enumerators are. */
12659 if (!minnode)
12660 minnode = maxnode = value;
12661 else if (tree_int_cst_lt (maxnode, value))
12662 maxnode = value;
12663 else if (tree_int_cst_lt (value, minnode))
12664 minnode = value;
12667 else
12668 /* [dcl.enum]
12670 If the enumerator-list is empty, the underlying type is as if
12671 the enumeration had a single enumerator with value 0. */
12672 minnode = maxnode = integer_zero_node;
12674 if (!fixed_underlying_type_p)
12676 /* Compute the number of bits require to represent all values of the
12677 enumeration. We must do this before the type of MINNODE and
12678 MAXNODE are transformed, since tree_int_cst_min_precision relies
12679 on the TREE_TYPE of the value it is passed. */
12680 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12681 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12682 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12683 int precision = MAX (lowprec, highprec);
12684 unsigned int itk;
12685 bool use_short_enum;
12687 /* Determine the underlying type of the enumeration.
12689 [dcl.enum]
12691 The underlying type of an enumeration is an integral type that
12692 can represent all the enumerator values defined in the
12693 enumeration. It is implementation-defined which integral type is
12694 used as the underlying type for an enumeration except that the
12695 underlying type shall not be larger than int unless the value of
12696 an enumerator cannot fit in an int or unsigned int.
12698 We use "int" or an "unsigned int" as the underlying type, even if
12699 a smaller integral type would work, unless the user has
12700 explicitly requested that we use the smallest possible type. The
12701 user can request that for all enumerations with a command line
12702 flag, or for just one enumeration with an attribute. */
12704 use_short_enum = flag_short_enums
12705 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12707 for (itk = (use_short_enum ? itk_char : itk_int);
12708 itk != itk_none;
12709 itk++)
12711 underlying_type = integer_types[itk];
12712 if (underlying_type != NULL_TREE
12713 && TYPE_PRECISION (underlying_type) >= precision
12714 && TYPE_UNSIGNED (underlying_type) == unsignedp)
12715 break;
12717 if (itk == itk_none)
12719 /* DR 377
12721 IF no integral type can represent all the enumerator values, the
12722 enumeration is ill-formed. */
12723 error ("no integral type can represent all of the enumerator values "
12724 "for %qT", enumtype);
12725 precision = TYPE_PRECISION (long_long_integer_type_node);
12726 underlying_type = integer_types[itk_unsigned_long_long];
12729 /* [dcl.enum]
12731 The value of sizeof() applied to an enumeration type, an object
12732 of an enumeration type, or an enumerator, is the value of sizeof()
12733 applied to the underlying type. */
12734 copy_type_enum (enumtype, underlying_type);
12736 /* Compute the minimum and maximum values for the type.
12738 [dcl.enum]
12740 For an enumeration where emin is the smallest enumerator and emax
12741 is the largest, the values of the enumeration are the values of the
12742 underlying type in the range bmin to bmax, where bmin and bmax are,
12743 respectively, the smallest and largest values of the smallest bit-
12744 field that can store emin and emax. */
12746 /* The middle-end currently assumes that types with TYPE_PRECISION
12747 narrower than their underlying type are suitably zero or sign
12748 extended to fill their mode. Similarly, it assumes that the front
12749 end assures that a value of a particular type must be within
12750 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12752 We used to set these fields based on bmin and bmax, but that led
12753 to invalid assumptions like optimizing away bounds checking. So
12754 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12755 TYPE_MAX_VALUE to the values for the mode above and only restrict
12756 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
12757 ENUM_UNDERLYING_TYPE (enumtype)
12758 = build_distinct_type_copy (underlying_type);
12759 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12760 set_min_and_max_values_for_integral_type
12761 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12763 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
12764 if (flag_strict_enums)
12765 set_min_and_max_values_for_integral_type (enumtype, precision,
12766 unsignedp);
12768 else
12769 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12771 /* Convert each of the enumerators to the type of the underlying
12772 type of the enumeration. */
12773 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12775 location_t saved_location;
12777 decl = TREE_VALUE (values);
12778 saved_location = input_location;
12779 input_location = DECL_SOURCE_LOCATION (decl);
12780 if (fixed_underlying_type_p)
12781 /* If the enumeration type has a fixed underlying type, we
12782 already checked all of the enumerator values. */
12783 value = DECL_INITIAL (decl);
12784 else
12785 value = perform_implicit_conversion (underlying_type,
12786 DECL_INITIAL (decl),
12787 tf_warning_or_error);
12788 input_location = saved_location;
12790 /* Do not clobber shared ints. */
12791 value = copy_node (value);
12793 TREE_TYPE (value) = enumtype;
12794 DECL_INITIAL (decl) = value;
12797 /* Fix up all variant types of this enum type. */
12798 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12799 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12801 if (at_class_scope_p ()
12802 && COMPLETE_TYPE_P (current_class_type)
12803 && UNSCOPED_ENUM_P (enumtype))
12804 insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12805 current_class_type);
12807 /* Finish debugging output for this type. */
12808 rest_of_type_compilation (enumtype, namespace_bindings_p ());
12811 /* Finishes the enum type. This is called only the first time an
12812 enumeration is seen, be it opaque or odinary.
12813 ENUMTYPE is the type object. */
12815 void
12816 finish_enum (tree enumtype)
12818 if (processing_template_decl)
12820 if (at_function_scope_p ())
12821 add_stmt (build_min (TAG_DEFN, enumtype));
12822 return;
12825 /* If this is a forward declaration, there should not be any variants,
12826 though we can get a variant in the middle of an enum-specifier with
12827 wacky code like 'enum E { e = sizeof(const E*) };' */
12828 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12829 && (TYPE_VALUES (enumtype)
12830 || !TYPE_NEXT_VARIANT (enumtype)));
12833 /* Build and install a CONST_DECL for an enumeration constant of the
12834 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12835 LOC is the location of NAME.
12836 Assignment of sequential values by default is handled here. */
12838 void
12839 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12841 tree decl;
12842 tree context;
12843 tree type;
12845 /* If the VALUE was erroneous, pretend it wasn't there; that will
12846 result in the enum being assigned the next value in sequence. */
12847 if (value == error_mark_node)
12848 value = NULL_TREE;
12850 /* Remove no-op casts from the value. */
12851 if (value)
12852 STRIP_TYPE_NOPS (value);
12854 if (! processing_template_decl)
12856 /* Validate and default VALUE. */
12857 if (value != NULL_TREE)
12859 value = cxx_constant_value (value);
12861 if (TREE_CODE (value) != INTEGER_CST
12862 || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12864 error ("enumerator value for %qD is not an integer constant",
12865 name);
12866 value = NULL_TREE;
12870 /* Default based on previous value. */
12871 if (value == NULL_TREE)
12873 if (TYPE_VALUES (enumtype))
12875 tree prev_value;
12876 bool overflowed;
12878 /* C++03 7.2/4: If no initializer is specified for the first
12879 enumerator, the type is an unspecified integral
12880 type. Otherwise the type is the same as the type of the
12881 initializing value of the preceding enumerator unless the
12882 incremented value is not representable in that type, in
12883 which case the type is an unspecified integral type
12884 sufficient to contain the incremented value. */
12885 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12886 if (error_operand_p (prev_value))
12887 value = error_mark_node;
12888 else
12890 double_int di = TREE_INT_CST (prev_value)
12891 .add_with_sign (double_int_one,
12892 false, &overflowed);
12893 if (!overflowed)
12895 tree type = TREE_TYPE (prev_value);
12896 bool pos = TYPE_UNSIGNED (type) || !di.is_negative ();
12897 if (!double_int_fits_to_tree_p (type, di))
12899 unsigned int itk;
12900 for (itk = itk_int; itk != itk_none; itk++)
12902 type = integer_types[itk];
12903 if (type != NULL_TREE
12904 && (pos || !TYPE_UNSIGNED (type))
12905 && double_int_fits_to_tree_p (type, di))
12906 break;
12908 if (type && cxx_dialect < cxx11
12909 && itk > itk_unsigned_long)
12910 pedwarn (input_location, OPT_Wlong_long, pos ? "\
12911 incremented enumerator value is too large for %<unsigned long%>" : "\
12912 incremented enumerator value is too large for %<long%>");
12914 if (type == NULL_TREE)
12915 overflowed = true;
12916 else
12917 value = double_int_to_tree (type, di);
12920 if (overflowed)
12922 error ("overflow in enumeration values at %qD", name);
12923 value = error_mark_node;
12927 else
12928 value = integer_zero_node;
12931 /* Remove no-op casts from the value. */
12932 STRIP_TYPE_NOPS (value);
12934 /* If the underlying type of the enum is fixed, check whether
12935 the enumerator values fits in the underlying type. If it
12936 does not fit, the program is ill-formed [C++0x dcl.enum]. */
12937 if (ENUM_UNDERLYING_TYPE (enumtype)
12938 && value
12939 && TREE_CODE (value) == INTEGER_CST)
12941 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12942 error ("enumerator value %E is outside the range of underlying "
12943 "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
12945 /* Convert the value to the appropriate type. */
12946 value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
12950 /* C++ associates enums with global, function, or class declarations. */
12951 context = current_scope ();
12953 /* Build the actual enumeration constant. Note that the enumeration
12954 constants have the underlying type of the enum (if it is fixed)
12955 or the type of their initializer (if the underlying type of the
12956 enum is not fixed):
12958 [ C++0x dcl.enum ]
12960 If the underlying type is fixed, the type of each enumerator
12961 prior to the closing brace is the underlying type; if the
12962 initializing value of an enumerator cannot be represented by
12963 the underlying type, the program is ill-formed. If the
12964 underlying type is not fixed, the type of each enumerator is
12965 the type of its initializing value.
12967 If the underlying type is not fixed, it will be computed by
12968 finish_enum and we will reset the type of this enumerator. Of
12969 course, if we're processing a template, there may be no value. */
12970 type = value ? TREE_TYPE (value) : NULL_TREE;
12972 decl = build_decl (loc, CONST_DECL, name, type);
12974 DECL_CONTEXT (decl) = enumtype;
12975 TREE_CONSTANT (decl) = 1;
12976 TREE_READONLY (decl) = 1;
12977 DECL_INITIAL (decl) = value;
12979 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12980 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12981 on the TYPE_FIELDS list for `S'. (That's so that you can say
12982 things like `S::i' later.) */
12983 finish_member_declaration (decl);
12984 else
12985 pushdecl (decl);
12987 /* Add this enumeration constant to the list for this type. */
12988 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12991 /* Look for an enumerator with the given NAME within the enumeration
12992 type ENUMTYPE. This routine is used primarily for qualified name
12993 lookup into an enumerator in C++0x, e.g.,
12995 enum class Color { Red, Green, Blue };
12997 Color color = Color::Red;
12999 Returns the value corresponding to the enumerator, or
13000 NULL_TREE if no such enumerator was found. */
13001 tree
13002 lookup_enumerator (tree enumtype, tree name)
13004 tree e;
13005 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13007 e = purpose_member (name, TYPE_VALUES (enumtype));
13008 return e? TREE_VALUE (e) : NULL_TREE;
13012 /* We're defining DECL. Make sure that its type is OK. */
13014 static void
13015 check_function_type (tree decl, tree current_function_parms)
13017 tree fntype = TREE_TYPE (decl);
13018 tree return_type = complete_type (TREE_TYPE (fntype));
13020 /* In a function definition, arg types must be complete. */
13021 require_complete_types_for_parms (current_function_parms);
13023 if (dependent_type_p (return_type)
13024 || type_uses_auto (return_type))
13025 return;
13026 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13027 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13029 tree args = TYPE_ARG_TYPES (fntype);
13031 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13032 error ("return type %q#T is incomplete", return_type);
13033 else
13034 error ("return type has Java class type %q#T", return_type);
13036 /* Make it return void instead. */
13037 if (TREE_CODE (fntype) == METHOD_TYPE)
13038 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13039 void_type_node,
13040 TREE_CHAIN (args));
13041 else
13042 fntype = build_function_type (void_type_node, args);
13043 fntype
13044 = build_exception_variant (fntype,
13045 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13046 fntype = (cp_build_type_attribute_variant
13047 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13048 TREE_TYPE (decl) = fntype;
13050 else
13051 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13054 /* Create the FUNCTION_DECL for a function definition.
13055 DECLSPECS and DECLARATOR are the parts of the declaration;
13056 they describe the function's name and the type it returns,
13057 but twisted together in a fashion that parallels the syntax of C.
13059 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13060 DECLARATOR is really the DECL for the function we are about to
13061 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13062 indicating that the function is an inline defined in-class.
13064 This function creates a binding context for the function body
13065 as well as setting up the FUNCTION_DECL in current_function_decl.
13067 For C++, we must first check whether that datum makes any sense.
13068 For example, "class A local_a(1,2);" means that variable local_a
13069 is an aggregate of type A, which should have a constructor
13070 applied to it with the argument list [1, 2].
13072 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13073 or may be a BLOCK if the function has been defined previously
13074 in this translation unit. On exit, DECL_INITIAL (decl1) will be
13075 error_mark_node if the function has never been defined, or
13076 a BLOCK if the function has been defined somewhere. */
13078 bool
13079 start_preparsed_function (tree decl1, tree attrs, int flags)
13081 tree ctype = NULL_TREE;
13082 tree fntype;
13083 tree restype;
13084 int doing_friend = 0;
13085 cp_binding_level *bl;
13086 tree current_function_parms;
13087 struct c_fileinfo *finfo
13088 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13089 bool honor_interface;
13091 /* Sanity check. */
13092 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13093 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13095 fntype = TREE_TYPE (decl1);
13096 if (TREE_CODE (fntype) == METHOD_TYPE)
13097 ctype = TYPE_METHOD_BASETYPE (fntype);
13099 /* ISO C++ 11.4/5. A friend function defined in a class is in
13100 the (lexical) scope of the class in which it is defined. */
13101 if (!ctype && DECL_FRIEND_P (decl1))
13103 ctype = DECL_FRIEND_CONTEXT (decl1);
13105 /* CTYPE could be null here if we're dealing with a template;
13106 for example, `inline friend float foo()' inside a template
13107 will have no CTYPE set. */
13108 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13109 ctype = NULL_TREE;
13110 else
13111 doing_friend = 1;
13114 if (DECL_DECLARED_INLINE_P (decl1)
13115 && lookup_attribute ("noinline", attrs))
13116 warning (0, "inline function %q+D given attribute noinline", decl1);
13118 /* Handle gnu_inline attribute. */
13119 if (GNU_INLINE_P (decl1))
13121 DECL_EXTERNAL (decl1) = 1;
13122 DECL_NOT_REALLY_EXTERN (decl1) = 0;
13123 DECL_INTERFACE_KNOWN (decl1) = 1;
13124 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13127 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13128 /* This is a constructor, we must ensure that any default args
13129 introduced by this definition are propagated to the clones
13130 now. The clones are used directly in overload resolution. */
13131 adjust_clone_args (decl1);
13133 /* Sometimes we don't notice that a function is a static member, and
13134 build a METHOD_TYPE for it. Fix that up now. */
13135 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13136 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13138 /* Set up current_class_type, and enter the scope of the class, if
13139 appropriate. */
13140 if (ctype)
13141 push_nested_class (ctype);
13142 else if (DECL_STATIC_FUNCTION_P (decl1))
13143 push_nested_class (DECL_CONTEXT (decl1));
13145 /* Now that we have entered the scope of the class, we must restore
13146 the bindings for any template parameters surrounding DECL1, if it
13147 is an inline member template. (Order is important; consider the
13148 case where a template parameter has the same name as a field of
13149 the class.) It is not until after this point that
13150 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13151 if (flags & SF_INCLASS_INLINE)
13152 maybe_begin_member_template_processing (decl1);
13154 /* Effective C++ rule 15. */
13155 if (warn_ecpp
13156 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13157 && VOID_TYPE_P (TREE_TYPE (fntype)))
13158 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13160 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13161 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13162 if (!DECL_INITIAL (decl1))
13163 DECL_INITIAL (decl1) = error_mark_node;
13165 /* This function exists in static storage.
13166 (This does not mean `static' in the C sense!) */
13167 TREE_STATIC (decl1) = 1;
13169 /* We must call push_template_decl after current_class_type is set
13170 up. (If we are processing inline definitions after exiting a
13171 class scope, current_class_type will be NULL_TREE until set above
13172 by push_nested_class.) */
13173 if (processing_template_decl)
13175 tree newdecl1 = push_template_decl (decl1);
13176 if (newdecl1 == error_mark_node)
13178 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13179 pop_nested_class ();
13180 return false;
13182 decl1 = newdecl1;
13185 /* We are now in the scope of the function being defined. */
13186 current_function_decl = decl1;
13188 /* Save the parm names or decls from this function's declarator
13189 where store_parm_decls will find them. */
13190 current_function_parms = DECL_ARGUMENTS (decl1);
13192 /* Make sure the parameter and return types are reasonable. When
13193 you declare a function, these types can be incomplete, but they
13194 must be complete when you define the function. */
13195 check_function_type (decl1, current_function_parms);
13197 /* Build the return declaration for the function. */
13198 restype = TREE_TYPE (fntype);
13200 if (DECL_RESULT (decl1) == NULL_TREE)
13202 tree resdecl;
13204 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13205 DECL_ARTIFICIAL (resdecl) = 1;
13206 DECL_IGNORED_P (resdecl) = 1;
13207 DECL_RESULT (decl1) = resdecl;
13209 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13212 /* Let the user know we're compiling this function. */
13213 announce_function (decl1);
13215 /* Record the decl so that the function name is defined.
13216 If we already have a decl for this name, and it is a FUNCTION_DECL,
13217 use the old decl. */
13218 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13220 /* A specialization is not used to guide overload resolution. */
13221 if (!DECL_FUNCTION_MEMBER_P (decl1)
13222 && !(DECL_USE_TEMPLATE (decl1) &&
13223 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13225 tree olddecl = pushdecl (decl1);
13227 if (olddecl == error_mark_node)
13228 /* If something went wrong when registering the declaration,
13229 use DECL1; we have to have a FUNCTION_DECL to use when
13230 parsing the body of the function. */
13232 else
13234 /* Otherwise, OLDDECL is either a previous declaration
13235 of the same function or DECL1 itself. */
13237 if (warn_missing_declarations
13238 && olddecl == decl1
13239 && !DECL_MAIN_P (decl1)
13240 && TREE_PUBLIC (decl1)
13241 && !DECL_DECLARED_INLINE_P (decl1))
13243 tree context;
13245 /* Check whether DECL1 is in an anonymous
13246 namespace. */
13247 for (context = DECL_CONTEXT (decl1);
13248 context;
13249 context = DECL_CONTEXT (context))
13251 if (TREE_CODE (context) == NAMESPACE_DECL
13252 && DECL_NAME (context) == NULL_TREE)
13253 break;
13256 if (context == NULL)
13257 warning (OPT_Wmissing_declarations,
13258 "no previous declaration for %q+D", decl1);
13261 decl1 = olddecl;
13264 else
13266 /* We need to set the DECL_CONTEXT. */
13267 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13268 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13270 fntype = TREE_TYPE (decl1);
13271 restype = TREE_TYPE (fntype);
13273 /* If #pragma weak applies, mark the decl appropriately now.
13274 The pragma only applies to global functions. Because
13275 determining whether or not the #pragma applies involves
13276 computing the mangled name for the declaration, we cannot
13277 apply the pragma until after we have merged this declaration
13278 with any previous declarations; if the original declaration
13279 has a linkage specification, that specification applies to
13280 the definition as well, and may affect the mangled name. */
13281 if (DECL_FILE_SCOPE_P (decl1))
13282 maybe_apply_pragma_weak (decl1);
13285 /* Reset this in case the call to pushdecl changed it. */
13286 current_function_decl = decl1;
13288 gcc_assert (DECL_INITIAL (decl1));
13290 /* This function may already have been parsed, in which case just
13291 return; our caller will skip over the body without parsing. */
13292 if (DECL_INITIAL (decl1) != error_mark_node)
13293 return true;
13295 /* Initialize RTL machinery. We cannot do this until
13296 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13297 even when processing a template; this is how we get
13298 CFUN set up, and our per-function variables initialized.
13299 FIXME factor out the non-RTL stuff. */
13300 bl = current_binding_level;
13301 allocate_struct_function (decl1, processing_template_decl);
13303 /* Initialize the language data structures. Whenever we start
13304 a new function, we destroy temporaries in the usual way. */
13305 cfun->language = ggc_alloc_cleared_language_function ();
13306 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13307 current_binding_level = bl;
13309 if (!processing_template_decl && type_uses_auto (restype))
13311 FNDECL_USED_AUTO (decl1) = true;
13312 current_function_auto_return_pattern = restype;
13315 /* Start the statement-tree, start the tree now. */
13316 DECL_SAVED_TREE (decl1) = push_stmt_list ();
13318 /* If we are (erroneously) defining a function that we have already
13319 defined before, wipe out what we knew before. */
13320 if (!DECL_PENDING_INLINE_P (decl1))
13321 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13323 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13325 /* We know that this was set up by `grokclassfn'. We do not
13326 wait until `store_parm_decls', since evil parse errors may
13327 never get us to that point. Here we keep the consistency
13328 between `current_class_type' and `current_class_ptr'. */
13329 tree t = DECL_ARGUMENTS (decl1);
13331 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13332 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13334 cp_function_chain->x_current_class_ref
13335 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13336 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
13337 cp_function_chain->x_current_class_ptr = t;
13339 /* Constructors and destructors need to know whether they're "in
13340 charge" of initializing virtual base classes. */
13341 t = DECL_CHAIN (t);
13342 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13344 current_in_charge_parm = t;
13345 t = DECL_CHAIN (t);
13347 if (DECL_HAS_VTT_PARM_P (decl1))
13349 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13350 current_vtt_parm = t;
13354 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13355 /* Implicitly-defined methods (like the
13356 destructor for a class in which no destructor
13357 is explicitly declared) must not be defined
13358 until their definition is needed. So, we
13359 ignore interface specifications for
13360 compiler-generated functions. */
13361 && !DECL_ARTIFICIAL (decl1));
13363 if (processing_template_decl)
13364 /* Don't mess with interface flags. */;
13365 else if (DECL_INTERFACE_KNOWN (decl1))
13367 tree ctx = decl_function_context (decl1);
13369 if (DECL_NOT_REALLY_EXTERN (decl1))
13370 DECL_EXTERNAL (decl1) = 0;
13372 if (ctx != NULL_TREE && vague_linkage_p (ctx))
13373 /* This is a function in a local class in an extern inline
13374 or template function. */
13375 comdat_linkage (decl1);
13377 /* If this function belongs to an interface, it is public.
13378 If it belongs to someone else's interface, it is also external.
13379 This only affects inlines and template instantiations. */
13380 else if (!finfo->interface_unknown && honor_interface)
13382 if (DECL_DECLARED_INLINE_P (decl1)
13383 || DECL_TEMPLATE_INSTANTIATION (decl1))
13385 DECL_EXTERNAL (decl1)
13386 = (finfo->interface_only
13387 || (DECL_DECLARED_INLINE_P (decl1)
13388 && ! flag_implement_inlines
13389 && !DECL_VINDEX (decl1)));
13391 /* For WIN32 we also want to put these in linkonce sections. */
13392 maybe_make_one_only (decl1);
13394 else
13395 DECL_EXTERNAL (decl1) = 0;
13396 DECL_INTERFACE_KNOWN (decl1) = 1;
13397 /* If this function is in an interface implemented in this file,
13398 make sure that the back end knows to emit this function
13399 here. */
13400 if (!DECL_EXTERNAL (decl1))
13401 mark_needed (decl1);
13403 else if (finfo->interface_unknown && finfo->interface_only
13404 && honor_interface)
13406 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13407 interface, we will have both finfo->interface_unknown and
13408 finfo->interface_only set. In that case, we don't want to
13409 use the normal heuristics because someone will supply a
13410 #pragma implementation elsewhere, and deducing it here would
13411 produce a conflict. */
13412 comdat_linkage (decl1);
13413 DECL_EXTERNAL (decl1) = 0;
13414 DECL_INTERFACE_KNOWN (decl1) = 1;
13415 DECL_DEFER_OUTPUT (decl1) = 1;
13417 else
13419 /* This is a definition, not a reference.
13420 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
13421 if (!GNU_INLINE_P (decl1))
13422 DECL_EXTERNAL (decl1) = 0;
13424 if ((DECL_DECLARED_INLINE_P (decl1)
13425 || DECL_TEMPLATE_INSTANTIATION (decl1))
13426 && ! DECL_INTERFACE_KNOWN (decl1))
13427 DECL_DEFER_OUTPUT (decl1) = 1;
13428 else
13429 DECL_INTERFACE_KNOWN (decl1) = 1;
13432 /* Determine the ELF visibility attribute for the function. We must not
13433 do this before calling "pushdecl", as we must allow "duplicate_decls"
13434 to merge any attributes appropriately. We also need to wait until
13435 linkage is set. */
13436 if (!DECL_CLONED_FUNCTION_P (decl1))
13437 determine_visibility (decl1);
13439 begin_scope (sk_function_parms, decl1);
13441 ++function_depth;
13443 if (DECL_DESTRUCTOR_P (decl1)
13444 || (DECL_CONSTRUCTOR_P (decl1)
13445 && targetm.cxx.cdtor_returns_this ()))
13447 cdtor_label = build_decl (input_location,
13448 LABEL_DECL, NULL_TREE, NULL_TREE);
13449 DECL_CONTEXT (cdtor_label) = current_function_decl;
13452 start_fname_decls ();
13454 store_parm_decls (current_function_parms);
13456 return true;
13460 /* Like start_preparsed_function, except that instead of a
13461 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13463 Returns true on success. If the DECLARATOR is not suitable
13464 for a function, we return false, which tells the parser to
13465 skip the entire function. */
13467 bool
13468 start_function (cp_decl_specifier_seq *declspecs,
13469 const cp_declarator *declarator,
13470 tree attrs)
13472 tree decl1;
13474 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13475 if (decl1 == error_mark_node)
13476 return false;
13477 /* If the declarator is not suitable for a function definition,
13478 cause a syntax error. */
13479 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13481 error ("invalid function declaration");
13482 return false;
13485 if (DECL_MAIN_P (decl1))
13486 /* main must return int. grokfndecl should have corrected it
13487 (and issued a diagnostic) if the user got it wrong. */
13488 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13489 integer_type_node));
13491 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13494 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13495 FN. */
13497 static bool
13498 use_eh_spec_block (tree fn)
13500 return (flag_exceptions && flag_enforce_eh_specs
13501 && !processing_template_decl
13502 && !type_throw_all_p (TREE_TYPE (fn))
13503 /* We insert the EH_SPEC_BLOCK only in the original
13504 function; then, it is copied automatically to the
13505 clones. */
13506 && !DECL_CLONED_FUNCTION_P (fn)
13507 /* Implicitly-generated constructors and destructors have
13508 exception specifications. However, those specifications
13509 are the union of the possible exceptions specified by the
13510 constructors/destructors for bases and members, so no
13511 unallowed exception will ever reach this function. By
13512 not creating the EH_SPEC_BLOCK we save a little memory,
13513 and we avoid spurious warnings about unreachable
13514 code. */
13515 && !DECL_DEFAULTED_FN (fn));
13518 /* Store the parameter declarations into the current function declaration.
13519 This is called after parsing the parameter declarations, before
13520 digesting the body of the function.
13522 Also install to binding contour return value identifier, if any. */
13524 static void
13525 store_parm_decls (tree current_function_parms)
13527 tree fndecl = current_function_decl;
13528 tree parm;
13530 /* This is a chain of any other decls that came in among the parm
13531 declarations. If a parm is declared with enum {foo, bar} x;
13532 then CONST_DECLs for foo and bar are put here. */
13533 tree nonparms = NULL_TREE;
13535 if (current_function_parms)
13537 /* This case is when the function was defined with an ANSI prototype.
13538 The parms already have decls, so we need not do anything here
13539 except record them as in effect
13540 and complain if any redundant old-style parm decls were written. */
13542 tree specparms = current_function_parms;
13543 tree next;
13545 /* Must clear this because it might contain TYPE_DECLs declared
13546 at class level. */
13547 current_binding_level->names = NULL;
13549 /* If we're doing semantic analysis, then we'll call pushdecl
13550 for each of these. We must do them in reverse order so that
13551 they end in the correct forward order. */
13552 specparms = nreverse (specparms);
13554 for (parm = specparms; parm; parm = next)
13556 next = DECL_CHAIN (parm);
13557 if (TREE_CODE (parm) == PARM_DECL)
13559 if (DECL_NAME (parm) == NULL_TREE
13560 || !VOID_TYPE_P (parm))
13561 pushdecl (parm);
13562 else
13563 error ("parameter %qD declared void", parm);
13565 else
13567 /* If we find an enum constant or a type tag,
13568 put it aside for the moment. */
13569 TREE_CHAIN (parm) = NULL_TREE;
13570 nonparms = chainon (nonparms, parm);
13574 /* Get the decls in their original chain order and record in the
13575 function. This is all and only the PARM_DECLs that were
13576 pushed into scope by the loop above. */
13577 DECL_ARGUMENTS (fndecl) = getdecls ();
13579 else
13580 DECL_ARGUMENTS (fndecl) = NULL_TREE;
13582 /* Now store the final chain of decls for the arguments
13583 as the decl-chain of the current lexical scope.
13584 Put the enumerators in as well, at the front so that
13585 DECL_ARGUMENTS is not modified. */
13586 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13588 if (use_eh_spec_block (current_function_decl))
13589 current_eh_spec_block = begin_eh_spec_block ();
13593 /* We have finished doing semantic analysis on DECL, but have not yet
13594 generated RTL for its body. Save away our current state, so that
13595 when we want to generate RTL later we know what to do. */
13597 static void
13598 save_function_data (tree decl)
13600 struct language_function *f;
13602 /* Save the language-specific per-function data so that we can
13603 get it back when we really expand this function. */
13604 gcc_assert (!DECL_PENDING_INLINE_P (decl));
13606 /* Make a copy. */
13607 f = ggc_alloc_language_function ();
13608 memcpy (f, cp_function_chain, sizeof (struct language_function));
13609 DECL_SAVED_FUNCTION_DATA (decl) = f;
13611 /* Clear out the bits we don't need. */
13612 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13613 f->bindings = NULL;
13614 f->x_local_names = NULL;
13615 f->base.local_typedefs = NULL;
13619 /* Set the return value of the constructor (if present). */
13621 static void
13622 finish_constructor_body (void)
13624 tree val;
13625 tree exprstmt;
13627 if (targetm.cxx.cdtor_returns_this ()
13628 && (! TYPE_FOR_JAVA (current_class_type)))
13630 /* Any return from a constructor will end up here. */
13631 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13633 val = DECL_ARGUMENTS (current_function_decl);
13634 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13635 DECL_RESULT (current_function_decl), val);
13636 /* Return the address of the object. */
13637 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13638 add_stmt (exprstmt);
13642 /* Do all the processing for the beginning of a destructor; set up the
13643 vtable pointers and cleanups for bases and members. */
13645 static void
13646 begin_destructor_body (void)
13648 tree compound_stmt;
13650 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13651 issued an error message. We still want to try to process the
13652 body of the function, but initialize_vtbl_ptrs will crash if
13653 TYPE_BINFO is NULL. */
13654 if (COMPLETE_TYPE_P (current_class_type))
13656 compound_stmt = begin_compound_stmt (0);
13657 /* Make all virtual function table pointers in non-virtual base
13658 classes point to CURRENT_CLASS_TYPE's virtual function
13659 tables. */
13660 initialize_vtbl_ptrs (current_class_ptr);
13661 finish_compound_stmt (compound_stmt);
13663 /* Insert a cleanup to let the back end know that the object is dead
13664 when we exit the destructor, either normally or via exception. */
13665 tree clobber = build_constructor (current_class_type, NULL);
13666 TREE_THIS_VOLATILE (clobber) = true;
13667 tree exprstmt = build2 (MODIFY_EXPR, current_class_type,
13668 current_class_ref, clobber);
13669 finish_decl_cleanup (NULL_TREE, exprstmt);
13671 /* And insert cleanups for our bases and members so that they
13672 will be properly destroyed if we throw. */
13673 push_base_cleanups ();
13677 /* At the end of every destructor we generate code to delete the object if
13678 necessary. Do that now. */
13680 static void
13681 finish_destructor_body (void)
13683 tree exprstmt;
13685 /* Any return from a destructor will end up here; that way all base
13686 and member cleanups will be run when the function returns. */
13687 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13689 /* In a virtual destructor, we must call delete. */
13690 if (DECL_VIRTUAL_P (current_function_decl))
13692 tree if_stmt;
13693 tree virtual_size = cxx_sizeof (current_class_type);
13695 /* [class.dtor]
13697 At the point of definition of a virtual destructor (including
13698 an implicit definition), non-placement operator delete shall
13699 be looked up in the scope of the destructor's class and if
13700 found shall be accessible and unambiguous. */
13701 exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13702 virtual_size,
13703 /*global_p=*/false,
13704 /*placement=*/NULL_TREE,
13705 /*alloc_fn=*/NULL_TREE,
13706 tf_warning_or_error);
13708 if_stmt = begin_if_stmt ();
13709 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13710 current_in_charge_parm,
13711 integer_one_node),
13712 if_stmt);
13713 finish_expr_stmt (exprstmt);
13714 finish_then_clause (if_stmt);
13715 finish_if_stmt (if_stmt);
13718 if (targetm.cxx.cdtor_returns_this ())
13720 tree val;
13722 val = DECL_ARGUMENTS (current_function_decl);
13723 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13724 DECL_RESULT (current_function_decl), val);
13725 /* Return the address of the object. */
13726 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13727 add_stmt (exprstmt);
13731 /* Do the necessary processing for the beginning of a function body, which
13732 in this case includes member-initializers, but not the catch clauses of
13733 a function-try-block. Currently, this means opening a binding level
13734 for the member-initializers (in a ctor), member cleanups (in a dtor),
13735 and capture proxies (in a lambda operator()). */
13737 tree
13738 begin_function_body (void)
13740 tree stmt;
13742 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13743 return NULL_TREE;
13745 if (processing_template_decl)
13746 /* Do nothing now. */;
13747 else
13748 /* Always keep the BLOCK node associated with the outermost pair of
13749 curly braces of a function. These are needed for correct
13750 operation of dwarfout.c. */
13751 keep_next_level (true);
13753 stmt = begin_compound_stmt (BCS_FN_BODY);
13755 if (processing_template_decl)
13756 /* Do nothing now. */;
13757 else if (DECL_DESTRUCTOR_P (current_function_decl))
13758 begin_destructor_body ();
13760 return stmt;
13763 /* Do the processing for the end of a function body. Currently, this means
13764 closing out the cleanups for fully-constructed bases and members, and in
13765 the case of the destructor, deleting the object if desired. Again, this
13766 is only meaningful for [cd]tors, since they are the only functions where
13767 there is a significant distinction between the main body and any
13768 function catch clauses. Handling, say, main() return semantics here
13769 would be wrong, as flowing off the end of a function catch clause for
13770 main() would also need to return 0. */
13772 void
13773 finish_function_body (tree compstmt)
13775 if (compstmt == NULL_TREE)
13776 return;
13778 /* Close the block. */
13779 finish_compound_stmt (compstmt);
13781 if (processing_template_decl)
13782 /* Do nothing now. */;
13783 else if (DECL_CONSTRUCTOR_P (current_function_decl))
13784 finish_constructor_body ();
13785 else if (DECL_DESTRUCTOR_P (current_function_decl))
13786 finish_destructor_body ();
13789 /* Given a function, returns the BLOCK corresponding to the outermost level
13790 of curly braces, skipping the artificial block created for constructor
13791 initializers. */
13793 tree
13794 outer_curly_brace_block (tree fndecl)
13796 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13797 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13798 /* Skip the artificial function body block. */
13799 block = BLOCK_SUBBLOCKS (block);
13800 return block;
13803 /* If FNDECL is a class's key method, add the class to the list of
13804 keyed classes that should be emitted. */
13806 static void
13807 record_key_method_defined (tree fndecl)
13809 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13810 && DECL_VIRTUAL_P (fndecl)
13811 && !processing_template_decl)
13813 tree fnclass = DECL_CONTEXT (fndecl);
13814 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13815 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13819 /* Subroutine of finish_function.
13820 Save the body of constexpr functions for possible
13821 future compile time evaluation. */
13823 static void
13824 maybe_save_function_definition (tree fun)
13826 if (!processing_template_decl
13827 && DECL_DECLARED_CONSTEXPR_P (fun)
13828 && !DECL_CLONED_FUNCTION_P (fun))
13829 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13832 /* Finish up a function declaration and compile that function
13833 all the way to assembler language output. The free the storage
13834 for the function definition.
13836 FLAGS is a bitwise or of the following values:
13837 2 - INCLASS_INLINE
13838 We just finished processing the body of an in-class inline
13839 function definition. (This processing will have taken place
13840 after the class definition is complete.) */
13842 tree
13843 finish_function (int flags)
13845 tree fndecl = current_function_decl;
13846 tree fntype, ctype = NULL_TREE;
13847 int inclass_inline = (flags & 2) != 0;
13849 /* When we get some parse errors, we can end up without a
13850 current_function_decl, so cope. */
13851 if (fndecl == NULL_TREE)
13852 return error_mark_node;
13854 if (c_dialect_objc ())
13855 objc_finish_function ();
13857 gcc_assert (!defer_mark_used_calls);
13858 defer_mark_used_calls = true;
13860 record_key_method_defined (fndecl);
13862 fntype = TREE_TYPE (fndecl);
13864 /* TREE_READONLY (fndecl) = 1;
13865 This caused &foo to be of type ptr-to-const-function
13866 which then got a warning when stored in a ptr-to-function variable. */
13868 gcc_assert (building_stmt_list_p ());
13869 /* The current function is being defined, so its DECL_INITIAL should
13870 be set, and unless there's a multiple definition, it should be
13871 error_mark_node. */
13872 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13874 /* For a cloned function, we've already got all the code we need;
13875 there's no need to add any extra bits. */
13876 if (!DECL_CLONED_FUNCTION_P (fndecl))
13878 /* Make it so that `main' always returns 0 by default. */
13879 if (DECL_MAIN_P (current_function_decl))
13880 finish_return_stmt (integer_zero_node);
13882 if (use_eh_spec_block (current_function_decl))
13883 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13884 (TREE_TYPE (current_function_decl)),
13885 current_eh_spec_block);
13888 /* If we're saving up tree structure, tie off the function now. */
13889 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13891 finish_fname_decls ();
13893 /* If this function can't throw any exceptions, remember that. */
13894 if (!processing_template_decl
13895 && !cp_function_chain->can_throw
13896 && !flag_non_call_exceptions
13897 && !decl_replaceable_p (fndecl))
13898 TREE_NOTHROW (fndecl) = 1;
13900 /* This must come after expand_function_end because cleanups might
13901 have declarations (from inline functions) that need to go into
13902 this function's blocks. */
13904 /* If the current binding level isn't the outermost binding level
13905 for this function, either there is a bug, or we have experienced
13906 syntax errors and the statement tree is malformed. */
13907 if (current_binding_level->kind != sk_function_parms)
13909 /* Make sure we have already experienced errors. */
13910 gcc_assert (errorcount);
13912 /* Throw away the broken statement tree and extra binding
13913 levels. */
13914 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13916 while (current_binding_level->kind != sk_function_parms)
13918 if (current_binding_level->kind == sk_class)
13919 pop_nested_class ();
13920 else
13921 poplevel (0, 0, 0);
13924 poplevel (1, 0, 1);
13926 /* Statements should always be full-expressions at the outermost set
13927 of curly braces for a function. */
13928 gcc_assert (stmts_are_full_exprs_p ());
13930 /* If there are no return statements in a function with auto return type,
13931 the return type is void. But if the declared type is something like
13932 auto*, this is an error. */
13933 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
13934 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
13936 if (!is_auto (current_function_auto_return_pattern)
13937 && !current_function_returns_value && !current_function_returns_null)
13939 error ("no return statements in function returning %qT",
13940 current_function_auto_return_pattern);
13941 inform (input_location, "only plain %<auto%> return type can be "
13942 "deduced to %<void%>");
13944 apply_deduced_return_type (fndecl, void_type_node);
13945 fntype = TREE_TYPE (fndecl);
13948 /* Save constexpr function body before it gets munged by
13949 the NRV transformation. */
13950 maybe_save_function_definition (fndecl);
13952 /* Set up the named return value optimization, if we can. Candidate
13953 variables are selected in check_return_expr. */
13954 if (current_function_return_value)
13956 tree r = current_function_return_value;
13957 tree outer;
13959 if (r != error_mark_node
13960 /* This is only worth doing for fns that return in memory--and
13961 simpler, since we don't have to worry about promoted modes. */
13962 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13963 /* Only allow this for variables declared in the outer scope of
13964 the function so we know that their lifetime always ends with a
13965 return; see g++.dg/opt/nrv6.C. We could be more flexible if
13966 we were to do this optimization in tree-ssa. */
13967 && (outer = outer_curly_brace_block (fndecl))
13968 && chain_member (r, BLOCK_VARS (outer)))
13969 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13971 current_function_return_value = NULL_TREE;
13974 /* Remember that we were in class scope. */
13975 if (current_class_name)
13976 ctype = current_class_type;
13978 /* Must mark the RESULT_DECL as being in this function. */
13979 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13981 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13982 to the FUNCTION_DECL node itself. */
13983 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13985 /* Save away current state, if appropriate. */
13986 if (!processing_template_decl)
13987 save_function_data (fndecl);
13989 /* Complain if there's just no return statement. */
13990 if (warn_return_type
13991 && !VOID_TYPE_P (TREE_TYPE (fntype))
13992 && !dependent_type_p (TREE_TYPE (fntype))
13993 && !current_function_returns_value && !current_function_returns_null
13994 /* Don't complain if we abort or throw. */
13995 && !current_function_returns_abnormally
13996 /* Don't complain if we are declared noreturn. */
13997 && !TREE_THIS_VOLATILE (fndecl)
13998 && !DECL_NAME (DECL_RESULT (fndecl))
13999 && !TREE_NO_WARNING (fndecl)
14000 /* Structor return values (if any) are set by the compiler. */
14001 && !DECL_CONSTRUCTOR_P (fndecl)
14002 && !DECL_DESTRUCTOR_P (fndecl)
14003 && targetm.warn_func_return (fndecl))
14005 warning (OPT_Wreturn_type,
14006 "no return statement in function returning non-void");
14007 TREE_NO_WARNING (fndecl) = 1;
14010 /* Store the end of the function, so that we get good line number
14011 info for the epilogue. */
14012 cfun->function_end_locus = input_location;
14014 /* Complain about parameters that are only set, but never otherwise used. */
14015 if (warn_unused_but_set_parameter
14016 && !processing_template_decl
14017 && errorcount == unused_but_set_errorcount
14018 && !DECL_CLONED_FUNCTION_P (fndecl))
14020 tree decl;
14022 for (decl = DECL_ARGUMENTS (fndecl);
14023 decl;
14024 decl = DECL_CHAIN (decl))
14025 if (TREE_USED (decl)
14026 && TREE_CODE (decl) == PARM_DECL
14027 && !DECL_READ_P (decl)
14028 && DECL_NAME (decl)
14029 && !DECL_ARTIFICIAL (decl)
14030 && !TREE_NO_WARNING (decl)
14031 && !DECL_IN_SYSTEM_HEADER (decl)
14032 && TREE_TYPE (decl) != error_mark_node
14033 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14034 && (!CLASS_TYPE_P (TREE_TYPE (decl))
14035 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14036 warning (OPT_Wunused_but_set_parameter,
14037 "parameter %q+D set but not used", decl);
14038 unused_but_set_errorcount = errorcount;
14041 /* Complain about locally defined typedefs that are not used in this
14042 function. */
14043 maybe_warn_unused_local_typedefs ();
14045 /* Genericize before inlining. */
14046 if (!processing_template_decl)
14048 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14049 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14050 cp_genericize (fndecl);
14051 /* Clear out the bits we don't need. */
14052 f->x_current_class_ptr = NULL;
14053 f->x_current_class_ref = NULL;
14054 f->x_eh_spec_block = NULL;
14055 f->x_in_charge_parm = NULL;
14056 f->x_vtt_parm = NULL;
14057 f->x_return_value = NULL;
14058 f->bindings = NULL;
14059 f->extern_decl_map = NULL;
14061 /* Clear out the bits we don't need. */
14062 local_names = NULL;
14064 /* We're leaving the context of this function, so zap cfun. It's still in
14065 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
14066 set_cfun (NULL);
14067 current_function_decl = NULL;
14069 /* If this is an in-class inline definition, we may have to pop the
14070 bindings for the template parameters that we added in
14071 maybe_begin_member_template_processing when start_function was
14072 called. */
14073 if (inclass_inline)
14074 maybe_end_member_template_processing ();
14076 /* Leave the scope of the class. */
14077 if (ctype)
14078 pop_nested_class ();
14080 --function_depth;
14082 /* Clean up. */
14083 current_function_decl = NULL_TREE;
14085 defer_mark_used_calls = false;
14086 if (deferred_mark_used_calls)
14088 unsigned int i;
14089 tree decl;
14091 FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14092 mark_used (decl);
14093 vec_free (deferred_mark_used_calls);
14096 return fndecl;
14099 /* Create the FUNCTION_DECL for a function definition.
14100 DECLSPECS and DECLARATOR are the parts of the declaration;
14101 they describe the return type and the name of the function,
14102 but twisted together in a fashion that parallels the syntax of C.
14104 This function creates a binding context for the function body
14105 as well as setting up the FUNCTION_DECL in current_function_decl.
14107 Returns a FUNCTION_DECL on success.
14109 If the DECLARATOR is not suitable for a function (it defines a datum
14110 instead), we return 0, which tells yyparse to report a parse error.
14112 May return void_type_node indicating that this method is actually
14113 a friend. See grokfield for more details.
14115 Came here with a `.pushlevel' .
14117 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14118 CHANGES TO CODE IN `grokfield'. */
14120 tree
14121 grokmethod (cp_decl_specifier_seq *declspecs,
14122 const cp_declarator *declarator, tree attrlist)
14124 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14125 &attrlist);
14127 if (fndecl == error_mark_node)
14128 return error_mark_node;
14130 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14132 error ("invalid member function declaration");
14133 return error_mark_node;
14136 if (attrlist)
14137 cplus_decl_attributes (&fndecl, attrlist, 0);
14139 /* Pass friends other than inline friend functions back. */
14140 if (fndecl == void_type_node)
14141 return fndecl;
14143 if (DECL_IN_AGGR_P (fndecl))
14145 if (DECL_CLASS_SCOPE_P (fndecl))
14146 error ("%qD is already defined in class %qT", fndecl,
14147 DECL_CONTEXT (fndecl));
14148 return error_mark_node;
14151 check_template_shadow (fndecl);
14153 DECL_DECLARED_INLINE_P (fndecl) = 1;
14154 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14156 /* We process method specializations in finish_struct_1. */
14157 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14159 fndecl = push_template_decl (fndecl);
14160 if (fndecl == error_mark_node)
14161 return fndecl;
14164 if (! DECL_FRIEND_P (fndecl))
14166 if (DECL_CHAIN (fndecl))
14168 fndecl = copy_node (fndecl);
14169 TREE_CHAIN (fndecl) = NULL_TREE;
14173 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14175 DECL_IN_AGGR_P (fndecl) = 1;
14176 return fndecl;
14180 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14181 we can lay it out later, when and if its type becomes complete.
14183 Also handle constexpr pointer to member variables where the initializer
14184 is an unlowered PTRMEM_CST because the class isn't complete yet. */
14186 void
14187 maybe_register_incomplete_var (tree var)
14189 gcc_assert (VAR_P (var));
14191 /* Keep track of variables with incomplete types. */
14192 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14193 && DECL_EXTERNAL (var))
14195 tree inner_type = TREE_TYPE (var);
14197 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14198 inner_type = TREE_TYPE (inner_type);
14199 inner_type = TYPE_MAIN_VARIANT (inner_type);
14201 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14202 /* RTTI TD entries are created while defining the type_info. */
14203 || (TYPE_LANG_SPECIFIC (inner_type)
14204 && TYPE_BEING_DEFINED (inner_type)))
14206 incomplete_var iv = {var, inner_type};
14207 vec_safe_push (incomplete_vars, iv);
14209 else if (TYPE_PTRMEM_P (inner_type)
14210 && DECL_INITIAL (var)
14211 && TREE_CODE (DECL_INITIAL (var)) == PTRMEM_CST)
14213 tree context = TYPE_PTRMEM_CLASS_TYPE (inner_type);
14214 gcc_assert (TYPE_BEING_DEFINED (context));
14215 incomplete_var iv = {var, context};
14216 vec_safe_push (incomplete_vars, iv);
14221 /* Called when a class type (given by TYPE) is defined. If there are
14222 any existing VAR_DECLs whose type has been completed by this
14223 declaration, update them now. */
14225 void
14226 complete_vars (tree type)
14228 unsigned ix;
14229 incomplete_var *iv;
14231 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14233 if (same_type_p (type, iv->incomplete_type))
14235 tree var = iv->decl;
14236 tree type = TREE_TYPE (var);
14238 if (TYPE_PTRMEM_P (type))
14239 DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14240 else
14242 /* Complete the type of the variable. The VAR_DECL itself
14243 will be laid out in expand_expr. */
14244 complete_type (type);
14245 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14248 /* Remove this entry from the list. */
14249 incomplete_vars->unordered_remove (ix);
14251 else
14252 ix++;
14255 /* Check for pending declarations which may have abstract type. */
14256 complete_type_check_abstract (type);
14259 /* If DECL is of a type which needs a cleanup, build and return an
14260 expression to perform that cleanup here. Return NULL_TREE if no
14261 cleanup need be done. */
14263 tree
14264 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14266 tree type;
14267 tree attr;
14268 tree cleanup;
14270 /* Assume no cleanup is required. */
14271 cleanup = NULL_TREE;
14273 if (error_operand_p (decl))
14274 return cleanup;
14276 /* Handle "__attribute__((cleanup))". We run the cleanup function
14277 before the destructor since the destructor is what actually
14278 terminates the lifetime of the object. */
14279 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14280 if (attr)
14282 tree id;
14283 tree fn;
14284 tree arg;
14286 /* Get the name specified by the user for the cleanup function. */
14287 id = TREE_VALUE (TREE_VALUE (attr));
14288 /* Look up the name to find the cleanup function to call. It is
14289 important to use lookup_name here because that is what is
14290 used in c-common.c:handle_cleanup_attribute when performing
14291 initial checks on the attribute. Note that those checks
14292 include ensuring that the function found is not an overloaded
14293 function, or an object with an overloaded call operator,
14294 etc.; we can rely on the fact that the function found is an
14295 ordinary FUNCTION_DECL. */
14296 fn = lookup_name (id);
14297 arg = build_address (decl);
14298 mark_used (decl);
14299 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14300 if (cleanup == error_mark_node)
14301 return error_mark_node;
14303 /* Handle ordinary C++ destructors. */
14304 type = TREE_TYPE (decl);
14305 if (type_build_dtor_call (type))
14307 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14308 tree addr;
14309 tree call;
14311 if (TREE_CODE (type) == ARRAY_TYPE)
14312 addr = decl;
14313 else
14314 addr = build_address (decl);
14316 call = build_delete (TREE_TYPE (addr), addr,
14317 sfk_complete_destructor, flags, 0, complain);
14318 if (call == error_mark_node)
14319 cleanup = error_mark_node;
14320 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14321 /* Discard the call. */;
14322 else if (cleanup)
14323 cleanup = cp_build_compound_expr (cleanup, call, complain);
14324 else
14325 cleanup = call;
14328 /* build_delete sets the location of the destructor call to the
14329 current location, even though the destructor is going to be
14330 called later, at the end of the current scope. This can lead to
14331 a "jumpy" behaviour for users of debuggers when they step around
14332 the end of the block. So let's unset the location of the
14333 destructor call instead. */
14334 if (cleanup != NULL && EXPR_P (cleanup))
14335 SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14336 return cleanup;
14340 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14341 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14342 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
14344 tree
14345 static_fn_type (tree memfntype)
14347 tree fntype;
14348 tree args;
14350 if (TYPE_PTRMEMFUNC_P (memfntype))
14351 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14352 if (POINTER_TYPE_P (memfntype)
14353 || TREE_CODE (memfntype) == FUNCTION_DECL)
14354 memfntype = TREE_TYPE (memfntype);
14355 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14356 return memfntype;
14357 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14358 args = TYPE_ARG_TYPES (memfntype);
14359 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14360 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14361 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14362 fntype = (cp_build_type_attribute_variant
14363 (fntype, TYPE_ATTRIBUTES (memfntype)));
14364 fntype = (build_exception_variant
14365 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14366 return fntype;
14369 /* DECL was originally constructed as a non-static member function,
14370 but turned out to be static. Update it accordingly. */
14372 void
14373 revert_static_member_fn (tree decl)
14375 tree stype = static_fn_type (decl);
14376 cp_cv_quals quals = type_memfn_quals (stype);
14377 cp_ref_qualifier rqual = type_memfn_rqual (stype);
14379 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14380 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14382 TREE_TYPE (decl) = stype;
14384 if (DECL_ARGUMENTS (decl))
14385 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14386 DECL_STATIC_FUNCTION_P (decl) = 1;
14389 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14390 one of the language-independent trees. */
14392 enum cp_tree_node_structure_enum
14393 cp_tree_node_structure (union lang_tree_node * t)
14395 switch (TREE_CODE (&t->generic))
14397 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14398 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
14399 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14400 case OVERLOAD: return TS_CP_OVERLOAD;
14401 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14402 case PTRMEM_CST: return TS_CP_PTRMEM;
14403 case BASELINK: return TS_CP_BASELINK;
14404 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
14405 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
14406 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
14407 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
14408 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
14409 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
14410 default: return TS_CP_GENERIC;
14414 /* Build the void_list_node (void_type_node having been created). */
14415 tree
14416 build_void_list_node (void)
14418 tree t = build_tree_list (NULL_TREE, void_type_node);
14419 return t;
14422 bool
14423 cp_missing_noreturn_ok_p (tree decl)
14425 /* A missing noreturn is ok for the `main' function. */
14426 return DECL_MAIN_P (decl);
14429 /* Return the COMDAT group into which DECL should be placed. */
14431 tree
14432 cxx_comdat_group (tree decl)
14434 tree name;
14436 /* Virtual tables, construction virtual tables, and virtual table
14437 tables all go in a single COMDAT group, named after the primary
14438 virtual table. */
14439 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14440 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
14441 /* For all other DECLs, the COMDAT group is the mangled name of the
14442 declaration itself. */
14443 else
14445 while (DECL_THUNK_P (decl))
14447 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14448 into the same section as the target function. In that case
14449 we must return target's name. */
14450 tree target = THUNK_TARGET (decl);
14451 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14452 && DECL_SECTION_NAME (target) != NULL
14453 && DECL_ONE_ONLY (target))
14454 decl = target;
14455 else
14456 break;
14458 name = DECL_ASSEMBLER_NAME (decl);
14461 return name;
14464 /* Returns the return type for FN as written by the user, which may include
14465 a placeholder for a deduced return type. */
14467 tree
14468 fndecl_declared_return_type (tree fn)
14470 fn = STRIP_TEMPLATE (fn);
14471 if (FNDECL_USED_AUTO (fn))
14473 struct language_function *f = NULL;
14474 if (DECL_STRUCT_FUNCTION (fn))
14475 f = DECL_STRUCT_FUNCTION (fn)->language;
14476 if (f == NULL)
14477 f = DECL_SAVED_FUNCTION_DATA (fn);
14478 return f->x_auto_return_pattern;
14480 return TREE_TYPE (TREE_TYPE (fn));
14483 /* Returns true iff DECL was declared with an auto return type and it has
14484 not yet been deduced to a real type. */
14486 bool
14487 undeduced_auto_decl (tree decl)
14489 if (cxx_dialect < cxx1y)
14490 return false;
14491 return type_uses_auto (TREE_TYPE (decl));
14494 /* Complain if DECL has an undeduced return type. */
14496 void
14497 require_deduced_type (tree decl)
14499 if (undeduced_auto_decl (decl))
14500 error ("use of %qD before deduction of %<auto%>", decl);
14503 #include "gt-cp-decl.h"