new patch
[official-gcc/constexpr.git] / gcc / cp / decl.c
bloba0efe5f4a19d59966c527a774e19b13b4585ed14
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* Process declarations and symbol lookup for C++ front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "intl.h"
43 #include "output.h"
44 #include "except.h"
45 #include "toplev.h"
46 #include "hashtab.h"
47 #include "tm_p.h"
48 #include "target.h"
49 #include "c-common.h"
50 #include "c-pragma.h"
51 #include "diagnostic.h"
52 #include "intl.h"
53 #include "debug.h"
54 #include "timevar.h"
55 #include "tree-flow.h"
56 #include "pointer-set.h"
57 #include "plugin.h"
59 static tree grokparms (tree parmlist, tree *);
60 static const char *redeclaration_error_message (tree, tree);
62 static int decl_jump_unsafe (tree);
63 static void require_complete_types_for_parms (tree);
64 static int ambi_op_p (enum tree_code);
65 static int unary_op_p (enum tree_code);
66 static void push_local_name (tree);
67 static tree grok_reference_init (tree, tree, tree, tree *);
68 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
69 int, int, tree);
70 static void record_unknown_type (tree, const char *);
71 static tree builtin_function_1 (tree, tree, bool);
72 static tree build_library_fn_1 (tree, enum tree_code, tree);
73 static int member_function_or_else (tree, tree, enum overload_flags);
74 static void bad_specifiers (tree, const char *, int, int, int, int,
75 int);
76 static void check_for_uninitialized_const_var (tree);
77 static hashval_t typename_hash (const void *);
78 static int typename_compare (const void *, const void *);
79 static tree local_variable_p_walkfn (tree *, int *, void *);
80 static tree record_builtin_java_type (const char *, int);
81 static const char *tag_name (enum tag_types);
82 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
83 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
84 static void maybe_deduce_size_from_array_init (tree, tree);
85 static void layout_var_decl (tree);
86 static tree check_initializer (tree, tree, int, tree *);
87 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
88 static void save_function_data (tree);
89 static void check_function_type (tree, tree);
90 static void finish_constructor_body (void);
91 static void begin_destructor_body (void);
92 static void finish_destructor_body (void);
93 static tree create_array_type_for_decl (tree, tree, tree);
94 static tree get_atexit_node (void);
95 static tree get_dso_handle_node (void);
96 static tree start_cleanup_fn (void);
97 static void end_cleanup_fn (void);
98 static tree cp_make_fname_decl (location_t, tree, int);
99 static void initialize_predefined_identifiers (void);
100 static tree check_special_function_return_type
101 (special_function_kind, tree, tree);
102 static tree push_cp_library_fn (enum tree_code, tree);
103 static tree build_cp_library_fn (tree, enum tree_code, tree);
104 static void store_parm_decls (tree);
105 static void initialize_local_var (tree, tree);
106 static void expand_static_init (tree, tree);
108 /* The following symbols are subsumed in the cp_global_trees array, and
109 listed here individually for documentation purposes.
111 C++ extensions
112 tree wchar_decl_node;
114 tree vtable_entry_type;
115 tree delta_type_node;
116 tree __t_desc_type_node;
118 tree class_type_node;
119 tree unknown_type_node;
121 Array type `vtable_entry_type[]'
123 tree vtbl_type_node;
124 tree vtbl_ptr_type_node;
126 Namespaces,
128 tree std_node;
129 tree abi_node;
131 A FUNCTION_DECL which can call `abort'. Not necessarily the
132 one that the user will declare, but sufficient to be called
133 by routines that want to abort the program.
135 tree abort_fndecl;
137 The FUNCTION_DECL for the default `::operator delete'.
139 tree global_delete_fndecl;
141 Used by RTTI
142 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
143 tree tinfo_var_id; */
145 tree cp_global_trees[CPTI_MAX];
147 /* Indicates that there is a type value in some namespace, although
148 that is not necessarily in scope at the moment. */
150 tree global_type_node;
152 /* The node that holds the "name" of the global scope. */
153 tree global_scope_name;
155 #define local_names cp_function_chain->x_local_names
157 /* A list of objects which have constructors or destructors
158 which reside in the global scope. The decl is stored in
159 the TREE_VALUE slot and the initializer is stored
160 in the TREE_PURPOSE slot. */
161 tree static_aggregates;
163 /* -- end of C++ */
165 /* A node for the integer constants 2, and 3. */
167 tree integer_two_node, integer_three_node;
169 /* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
172 struct GTY(()) named_label_use_entry {
173 struct named_label_use_entry *next;
174 /* The binding level to which this entry is *currently* attached.
175 This is initially the binding level in which the goto appeared,
176 but is modified as scopes are closed. */
177 struct cp_binding_level *binding_level;
178 /* The head of the names list that was current when the goto appeared,
179 or the inner scope popped. These are the decls that will *not* be
180 skipped when jumping to the label. */
181 tree names_in_scope;
182 /* The location of the goto, for error reporting. */
183 location_t o_goto_locus;
184 /* True if an OpenMP structured block scope has been closed since
185 the goto appeared. This means that the branch from the label will
186 illegally exit an OpenMP scope. */
187 bool in_omp_scope;
190 /* A list of all LABEL_DECLs in the function that have names. Here so
191 we can clear out their names' definitions at the end of the
192 function, and so we can check the validity of jumps to these labels. */
194 struct GTY(()) named_label_entry {
195 /* The decl itself. */
196 tree label_decl;
198 /* The binding level to which the label is *currently* attached.
199 This is initially set to the binding level in which the label
200 is defined, but is modified as scopes are closed. */
201 struct cp_binding_level *binding_level;
202 /* The head of the names list that was current when the label was
203 defined, or the inner scope popped. These are the decls that will
204 be skipped when jumping to the label. */
205 tree names_in_scope;
206 /* A tree list of all decls from all binding levels that would be
207 crossed by a backward branch to the label. */
208 tree bad_decls;
210 /* A list of uses of the label, before the label is defined. */
211 struct named_label_use_entry *uses;
213 /* The following bits are set after the label is defined, and are
214 updated as scopes are popped. They indicate that a backward jump
215 to the label will illegally enter a scope of the given flavor. */
216 bool in_try_scope;
217 bool in_catch_scope;
218 bool in_omp_scope;
221 #define named_labels cp_function_chain->x_named_labels
223 /* The number of function bodies which we are currently processing.
224 (Zero if we are at namespace scope, one inside the body of a
225 function, two inside the body of a function in a local class, etc.) */
226 int function_depth;
228 /* To avoid unwanted recursion, finish_function defers all mark_used calls
229 encountered during its execution until it finishes. */
230 bool defer_mark_used_calls;
231 VEC(tree, gc) *deferred_mark_used_calls;
233 /* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
236 deprecated items. */
237 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
240 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
241 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
242 time the VAR_DECL was declared, the type was incomplete. */
244 static GTY(()) tree incomplete_vars;
246 /* Returns the kind of template specialization we are currently
247 processing, given that it's declaration contained N_CLASS_SCOPES
248 explicit scope qualifications. */
250 tmpl_spec_kind
251 current_tmpl_spec_kind (int n_class_scopes)
253 int n_template_parm_scopes = 0;
254 int seen_specialization_p = 0;
255 int innermost_specialization_p = 0;
256 struct cp_binding_level *b;
258 /* Scan through the template parameter scopes. */
259 for (b = current_binding_level;
260 b->kind == sk_template_parms;
261 b = b->level_chain)
263 /* If we see a specialization scope inside a parameter scope,
264 then something is wrong. That corresponds to a declaration
265 like:
267 template <class T> template <> ...
269 which is always invalid since [temp.expl.spec] forbids the
270 specialization of a class member template if the enclosing
271 class templates are not explicitly specialized as well. */
272 if (b->explicit_spec_p)
274 if (n_template_parm_scopes == 0)
275 innermost_specialization_p = 1;
276 else
277 seen_specialization_p = 1;
279 else if (seen_specialization_p == 1)
280 return tsk_invalid_member_spec;
282 ++n_template_parm_scopes;
285 /* Handle explicit instantiations. */
286 if (processing_explicit_instantiation)
288 if (n_template_parm_scopes != 0)
289 /* We've seen a template parameter list during an explicit
290 instantiation. For example:
292 template <class T> template void f(int);
294 This is erroneous. */
295 return tsk_invalid_expl_inst;
296 else
297 return tsk_expl_inst;
300 if (n_template_parm_scopes < n_class_scopes)
301 /* We've not seen enough template headers to match all the
302 specialized classes present. For example:
304 template <class T> void R<T>::S<T>::f(int);
306 This is invalid; there needs to be one set of template
307 parameters for each class. */
308 return tsk_insufficient_parms;
309 else if (n_template_parm_scopes == n_class_scopes)
310 /* We're processing a non-template declaration (even though it may
311 be a member of a template class.) For example:
313 template <class T> void S<T>::f(int);
315 The `class T' matches the `S<T>', leaving no template headers
316 corresponding to the `f'. */
317 return tsk_none;
318 else if (n_template_parm_scopes > n_class_scopes + 1)
319 /* We've got too many template headers. For example:
321 template <> template <class T> void f (T);
323 There need to be more enclosing classes. */
324 return tsk_excessive_parms;
325 else
326 /* This must be a template. It's of the form:
328 template <class T> template <class U> void S<T>::f(U);
330 This is a specialization if the innermost level was a
331 specialization; otherwise it's just a definition of the
332 template. */
333 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
336 /* Exit the current scope. */
338 void
339 finish_scope (void)
341 poplevel (0, 0, 0);
344 /* When a label goes out of scope, check to see if that label was used
345 in a valid manner, and issue any appropriate warnings or errors. */
347 static void
348 pop_label (tree label, tree old_value)
350 if (!processing_template_decl)
352 if (DECL_INITIAL (label) == NULL_TREE)
354 location_t location;
356 error ("label %q+D used but not defined", label);
357 location = input_location; /* FIXME want (input_filename, (line)0) */
358 /* Avoid crashing later. */
359 define_label (location, DECL_NAME (label));
361 else
362 warn_for_unused_label (label);
365 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
368 /* At the end of a function, all labels declared within the function
369 go out of scope. BLOCK is the top-level block for the
370 function. */
372 static int
373 pop_labels_1 (void **slot, void *data)
375 struct named_label_entry *ent = (struct named_label_entry *) *slot;
376 tree block = (tree) data;
378 pop_label (ent->label_decl, NULL_TREE);
380 /* Put the labels into the "variables" of the top-level block,
381 so debugger can see them. */
382 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
383 BLOCK_VARS (block) = ent->label_decl;
385 htab_clear_slot (named_labels, slot);
387 return 1;
390 static void
391 pop_labels (tree block)
393 if (named_labels)
395 htab_traverse (named_labels, pop_labels_1, block);
396 named_labels = NULL;
400 /* At the end of a block with local labels, restore the outer definition. */
402 static void
403 pop_local_label (tree label, tree old_value)
405 struct named_label_entry dummy;
406 void **slot;
408 pop_label (label, old_value);
410 dummy.label_decl = label;
411 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
412 htab_clear_slot (named_labels, slot);
415 /* The following two routines are used to interface to Objective-C++.
416 The binding level is purposely treated as an opaque type. */
418 void *
419 objc_get_current_scope (void)
421 return current_binding_level;
424 /* The following routine is used by the NeXT-style SJLJ exceptions;
425 variables get marked 'volatile' so as to not be clobbered by
426 _setjmp()/_longjmp() calls. All variables in the current scope,
427 as well as parent scopes up to (but not including) ENCLOSING_BLK
428 shall be thusly marked. */
430 void
431 objc_mark_locals_volatile (void *enclosing_blk)
433 struct cp_binding_level *scope;
435 for (scope = current_binding_level;
436 scope && scope != enclosing_blk;
437 scope = scope->level_chain)
439 tree decl;
441 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
442 objc_volatilize_decl (decl);
444 /* Do not climb up past the current function. */
445 if (scope->kind == sk_function_parms)
446 break;
450 /* Update data for defined and undefined labels when leaving a scope. */
452 static int
453 poplevel_named_label_1 (void **slot, void *data)
455 struct named_label_entry *ent = (struct named_label_entry *) *slot;
456 struct cp_binding_level *bl = (struct cp_binding_level *) data;
457 struct cp_binding_level *obl = bl->level_chain;
459 if (ent->binding_level == bl)
461 tree decl;
463 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
464 if (decl_jump_unsafe (decl))
465 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
467 ent->binding_level = obl;
468 ent->names_in_scope = obl->names;
469 switch (bl->kind)
471 case sk_try:
472 ent->in_try_scope = true;
473 break;
474 case sk_catch:
475 ent->in_catch_scope = true;
476 break;
477 case sk_omp:
478 ent->in_omp_scope = true;
479 break;
480 default:
481 break;
484 else if (ent->uses)
486 struct named_label_use_entry *use;
488 for (use = ent->uses; use ; use = use->next)
489 if (use->binding_level == bl)
491 use->binding_level = obl;
492 use->names_in_scope = obl->names;
493 if (bl->kind == sk_omp)
494 use->in_omp_scope = true;
498 return 1;
501 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
502 when errors were reported, except for -Werror-unused-but-set-*. */
503 static int unused_but_set_errorcount;
505 /* Exit a binding level.
506 Pop the level off, and restore the state of the identifier-decl mappings
507 that were in effect when this level was entered.
509 If KEEP == 1, this level had explicit declarations, so
510 and create a "block" (a BLOCK node) for the level
511 to record its declarations and subblocks for symbol table output.
513 If FUNCTIONBODY is nonzero, this level is the body of a function,
514 so create a block as if KEEP were set and also clear out all
515 label names.
517 If REVERSE is nonzero, reverse the order of decls before putting
518 them into the BLOCK. */
520 tree
521 poplevel (int keep, int reverse, int functionbody)
523 tree link;
524 /* The chain of decls was accumulated in reverse order.
525 Put it into forward order, just for cleanliness. */
526 tree decls;
527 tree subblocks;
528 tree block;
529 tree decl;
530 int leaving_for_scope;
531 scope_kind kind;
533 timevar_push (TV_NAME_LOOKUP);
534 restart:
536 block = NULL_TREE;
538 gcc_assert (current_binding_level->kind != sk_class);
540 if (current_binding_level->kind == sk_cleanup)
541 functionbody = 0;
542 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
544 gcc_assert (!VEC_length(cp_class_binding,
545 current_binding_level->class_shadowed));
547 /* We used to use KEEP == 2 to indicate that the new block should go
548 at the beginning of the list of blocks at this binding level,
549 rather than the end. This hack is no longer used. */
550 gcc_assert (keep == 0 || keep == 1);
552 if (current_binding_level->keep)
553 keep = 1;
555 /* Any uses of undefined labels, and any defined labels, now operate
556 under constraints of next binding contour. */
557 if (cfun && !functionbody && named_labels)
558 htab_traverse (named_labels, poplevel_named_label_1,
559 current_binding_level);
561 /* Get the decls in the order they were written.
562 Usually current_binding_level->names is in reverse order.
563 But parameter decls were previously put in forward order. */
565 if (reverse)
566 current_binding_level->names
567 = decls = nreverse (current_binding_level->names);
568 else
569 decls = current_binding_level->names;
571 /* If there were any declarations or structure tags in that level,
572 or if this level is a function body,
573 create a BLOCK to record them for the life of this function. */
574 block = NULL_TREE;
575 if (keep == 1 || functionbody)
576 block = make_node (BLOCK);
577 if (block != NULL_TREE)
579 BLOCK_VARS (block) = decls;
580 BLOCK_SUBBLOCKS (block) = subblocks;
583 /* In each subblock, record that this is its superior. */
584 if (keep >= 0)
585 for (link = subblocks; link; link = BLOCK_CHAIN (link))
586 BLOCK_SUPERCONTEXT (link) = block;
588 /* We still support the old for-scope rules, whereby the variables
589 in a for-init statement were in scope after the for-statement
590 ended. We only use the new rules if flag_new_for_scope is
591 nonzero. */
592 leaving_for_scope
593 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
595 /* Before we remove the declarations first check for unused variables. */
596 if ((warn_unused_variable || warn_unused_but_set_variable)
597 && !processing_template_decl)
598 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
599 if (TREE_CODE (decl) == VAR_DECL
600 && (! TREE_USED (decl) || !DECL_READ_P (decl))
601 && ! DECL_IN_SYSTEM_HEADER (decl)
602 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
604 if (! TREE_USED (decl))
605 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
606 else if (DECL_CONTEXT (decl) == current_function_decl
607 && TREE_TYPE (decl) != error_mark_node
608 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
609 && errorcount == unused_but_set_errorcount
610 && (!CLASS_TYPE_P (TREE_TYPE (decl))
611 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
613 warning (OPT_Wunused_but_set_variable,
614 "variable %q+D set but not used", decl);
615 unused_but_set_errorcount = errorcount;
619 /* Remove declarations for all the DECLs in this level. */
620 for (link = decls; link; link = TREE_CHAIN (link))
622 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
623 && DECL_NAME (link))
625 tree name = DECL_NAME (link);
626 cxx_binding *ob;
627 tree ns_binding;
629 ob = outer_binding (name,
630 IDENTIFIER_BINDING (name),
631 /*class_p=*/true);
632 if (!ob)
633 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
634 else
635 ns_binding = NULL_TREE;
637 if (ob && ob->scope == current_binding_level->level_chain)
638 /* We have something like:
640 int i;
641 for (int i; ;);
643 and we are leaving the `for' scope. There's no reason to
644 keep the binding of the inner `i' in this case. */
645 pop_binding (name, link);
646 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
647 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
648 /* Here, we have something like:
650 typedef int I;
652 void f () {
653 for (int I; ;);
656 We must pop the for-scope binding so we know what's a
657 type and what isn't. */
658 pop_binding (name, link);
659 else
661 /* Mark this VAR_DECL as dead so that we can tell we left it
662 there only for backward compatibility. */
663 DECL_DEAD_FOR_LOCAL (link) = 1;
665 /* Keep track of what should have happened when we
666 popped the binding. */
667 if (ob && ob->value)
669 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
670 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
673 /* Add it to the list of dead variables in the next
674 outermost binding to that we can remove these when we
675 leave that binding. */
676 current_binding_level->level_chain->dead_vars_from_for
677 = tree_cons (NULL_TREE, link,
678 current_binding_level->level_chain->
679 dead_vars_from_for);
681 /* Although we don't pop the cxx_binding, we do clear
682 its SCOPE since the scope is going away now. */
683 IDENTIFIER_BINDING (name)->scope
684 = current_binding_level->level_chain;
687 else
689 tree name;
691 /* Remove the binding. */
692 decl = link;
694 if (TREE_CODE (decl) == TREE_LIST)
695 decl = TREE_VALUE (decl);
696 name = decl;
698 if (TREE_CODE (name) == OVERLOAD)
699 name = OVL_FUNCTION (name);
701 gcc_assert (DECL_P (name));
702 pop_binding (DECL_NAME (name), decl);
706 /* Remove declarations for any `for' variables from inner scopes
707 that we kept around. */
708 for (link = current_binding_level->dead_vars_from_for;
709 link; link = TREE_CHAIN (link))
710 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
712 /* Restore the IDENTIFIER_TYPE_VALUEs. */
713 for (link = current_binding_level->type_shadowed;
714 link; link = TREE_CHAIN (link))
715 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
717 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
718 for (link = current_binding_level->shadowed_labels;
719 link;
720 link = TREE_CHAIN (link))
721 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
723 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
724 list if a `using' declaration put them there. The debugging
725 back ends won't understand OVERLOAD, so we remove them here.
726 Because the BLOCK_VARS are (temporarily) shared with
727 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
728 popped all the bindings. */
729 if (block)
731 tree* d;
733 for (d = &BLOCK_VARS (block); *d; )
735 if (TREE_CODE (*d) == TREE_LIST)
736 *d = TREE_CHAIN (*d);
737 else
738 d = &TREE_CHAIN (*d);
742 /* If the level being exited is the top level of a function,
743 check over all the labels. */
744 if (functionbody)
746 /* Since this is the top level block of a function, the vars are
747 the function's parameters. Don't leave them in the BLOCK
748 because they are found in the FUNCTION_DECL instead. */
749 BLOCK_VARS (block) = 0;
750 pop_labels (block);
753 kind = current_binding_level->kind;
754 if (kind == sk_cleanup)
756 tree stmt;
758 /* If this is a temporary binding created for a cleanup, then we'll
759 have pushed a statement list level. Pop that, create a new
760 BIND_EXPR for the block, and insert it into the stream. */
761 stmt = pop_stmt_list (current_binding_level->statement_list);
762 stmt = c_build_bind_expr (input_location, block, stmt);
763 add_stmt (stmt);
766 leave_scope ();
767 if (functionbody)
769 /* The current function is being defined, so its DECL_INITIAL
770 should be error_mark_node. */
771 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
772 DECL_INITIAL (current_function_decl) = block;
774 else if (block)
775 current_binding_level->blocks
776 = chainon (current_binding_level->blocks, block);
778 /* If we did not make a block for the level just exited,
779 any blocks made for inner levels
780 (since they cannot be recorded as subblocks in that level)
781 must be carried forward so they will later become subblocks
782 of something else. */
783 else if (subblocks)
784 current_binding_level->blocks
785 = chainon (current_binding_level->blocks, subblocks);
787 /* Each and every BLOCK node created here in `poplevel' is important
788 (e.g. for proper debugging information) so if we created one
789 earlier, mark it as "used". */
790 if (block)
791 TREE_USED (block) = 1;
793 /* All temporary bindings created for cleanups are popped silently. */
794 if (kind == sk_cleanup)
795 goto restart;
797 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
800 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
801 itself, calling F for each. The DATA is passed to F as well. */
803 static int
804 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
806 int result = 0;
807 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
809 result |= (*f) (name_space, data);
811 for (; current; current = TREE_CHAIN (current))
812 result |= walk_namespaces_r (current, f, data);
814 return result;
817 /* Walk all the namespaces, calling F for each. The DATA is passed to
818 F as well. */
821 walk_namespaces (walk_namespaces_fn f, void* data)
823 return walk_namespaces_r (global_namespace, f, data);
826 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
827 DATA is non-NULL, this is the last time we will call
828 wrapup_global_declarations for this NAMESPACE. */
831 wrapup_globals_for_namespace (tree name_space, void* data)
833 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
834 VEC(tree,gc) *statics = level->static_decls;
835 tree *vec = VEC_address (tree, statics);
836 int len = VEC_length (tree, statics);
837 int last_time = (data != 0);
839 if (last_time)
841 check_global_declarations (vec, len);
842 emit_debug_global_declarations (vec, len);
843 return 0;
846 /* Write out any globals that need to be output. */
847 return wrapup_global_declarations (vec, len);
851 /* In C++, you don't have to write `struct S' to refer to `S'; you
852 can just use `S'. We accomplish this by creating a TYPE_DECL as
853 if the user had written `typedef struct S S'. Create and return
854 the TYPE_DECL for TYPE. */
856 tree
857 create_implicit_typedef (tree name, tree type)
859 tree decl;
861 decl = build_decl (input_location, TYPE_DECL, name, type);
862 DECL_ARTIFICIAL (decl) = 1;
863 /* There are other implicit type declarations, like the one *within*
864 a class that allows you to write `S::S'. We must distinguish
865 amongst these. */
866 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
867 TYPE_NAME (type) = decl;
868 TYPE_STUB_DECL (type) = decl;
870 return decl;
873 /* Remember a local name for name-mangling purposes. */
875 static void
876 push_local_name (tree decl)
878 size_t i, nelts;
879 tree t, name;
881 timevar_push (TV_NAME_LOOKUP);
883 name = DECL_NAME (decl);
885 nelts = VEC_length (tree, local_names);
886 for (i = 0; i < nelts; i++)
888 t = VEC_index (tree, local_names, i);
889 if (DECL_NAME (t) == name)
891 if (!DECL_LANG_SPECIFIC (decl))
892 retrofit_lang_decl (decl);
893 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
894 if (DECL_LANG_SPECIFIC (t))
895 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
896 else
897 DECL_DISCRIMINATOR (decl) = 1;
899 VEC_replace (tree, local_names, i, decl);
900 timevar_pop (TV_NAME_LOOKUP);
901 return;
905 VEC_safe_push (tree, gc, local_names, decl);
906 timevar_pop (TV_NAME_LOOKUP);
909 /* Subroutine of duplicate_decls: return truthvalue of whether
910 or not types of these decls match.
912 For C++, we must compare the parameter list so that `int' can match
913 `int&' in a parameter position, but `int&' is not confused with
914 `const int&'. */
917 decls_match (tree newdecl, tree olddecl)
919 int types_match;
921 if (newdecl == olddecl)
922 return 1;
924 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
925 /* If the two DECLs are not even the same kind of thing, we're not
926 interested in their types. */
927 return 0;
929 if (TREE_CODE (newdecl) == FUNCTION_DECL)
931 tree f1 = TREE_TYPE (newdecl);
932 tree f2 = TREE_TYPE (olddecl);
933 tree p1 = TYPE_ARG_TYPES (f1);
934 tree p2 = TYPE_ARG_TYPES (f2);
936 /* Specializations of different templates are different functions
937 even if they have the same type. */
938 tree t1 = (DECL_USE_TEMPLATE (newdecl)
939 ? DECL_TI_TEMPLATE (newdecl)
940 : NULL_TREE);
941 tree t2 = (DECL_USE_TEMPLATE (olddecl)
942 ? DECL_TI_TEMPLATE (olddecl)
943 : NULL_TREE);
944 if (t1 != t2)
945 return 0;
947 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
948 && ! (DECL_EXTERN_C_P (newdecl)
949 && DECL_EXTERN_C_P (olddecl)))
950 return 0;
952 #ifdef NO_IMPLICIT_EXTERN_C
953 /* A new declaration doesn't match a built-in one unless it
954 is also extern "C". */
955 if (DECL_IS_BUILTIN (olddecl)
956 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
957 return 0;
958 #endif
960 if (TREE_CODE (f1) != TREE_CODE (f2))
961 return 0;
963 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
965 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
966 && (DECL_BUILT_IN (olddecl)
967 #ifndef NO_IMPLICIT_EXTERN_C
968 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
969 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
970 #endif
973 types_match = self_promoting_args_p (p1);
974 if (p1 == void_list_node)
975 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
977 #ifndef NO_IMPLICIT_EXTERN_C
978 else if (p1 == NULL_TREE
979 && (DECL_EXTERN_C_P (olddecl)
980 && DECL_IN_SYSTEM_HEADER (olddecl)
981 && !DECL_CLASS_SCOPE_P (olddecl))
982 && (DECL_EXTERN_C_P (newdecl)
983 && DECL_IN_SYSTEM_HEADER (newdecl)
984 && !DECL_CLASS_SCOPE_P (newdecl)))
986 types_match = self_promoting_args_p (p2);
987 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
989 #endif
990 else
991 types_match = compparms (p1, p2);
993 else
994 types_match = 0;
996 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
998 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
999 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1000 return 0;
1002 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1003 DECL_TEMPLATE_PARMS (olddecl)))
1004 return 0;
1006 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1007 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1008 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1009 else
1010 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1011 DECL_TEMPLATE_RESULT (newdecl));
1013 else
1015 /* Need to check scope for variable declaration (VAR_DECL).
1016 For typedef (TYPE_DECL), scope is ignored. */
1017 if (TREE_CODE (newdecl) == VAR_DECL
1018 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1019 /* [dcl.link]
1020 Two declarations for an object with C language linkage
1021 with the same name (ignoring the namespace that qualify
1022 it) that appear in different namespace scopes refer to
1023 the same object. */
1024 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1025 return 0;
1027 if (TREE_TYPE (newdecl) == error_mark_node)
1028 types_match = TREE_TYPE (olddecl) == error_mark_node;
1029 else if (TREE_TYPE (olddecl) == NULL_TREE)
1030 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1031 else if (TREE_TYPE (newdecl) == NULL_TREE)
1032 types_match = 0;
1033 else
1034 types_match = comptypes (TREE_TYPE (newdecl),
1035 TREE_TYPE (olddecl),
1036 COMPARE_REDECLARATION);
1039 return types_match;
1042 /* If NEWDECL is `static' and an `extern' was seen previously,
1043 warn about it. OLDDECL is the previous declaration.
1045 Note that this does not apply to the C++ case of declaring
1046 a variable `extern const' and then later `const'.
1048 Don't complain about built-in functions, since they are beyond
1049 the user's control. */
1051 void
1052 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1054 if (TREE_CODE (newdecl) == TYPE_DECL
1055 || TREE_CODE (newdecl) == TEMPLATE_DECL
1056 || TREE_CODE (newdecl) == CONST_DECL
1057 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1058 return;
1060 /* Don't get confused by static member functions; that's a different
1061 use of `static'. */
1062 if (TREE_CODE (newdecl) == FUNCTION_DECL
1063 && DECL_STATIC_FUNCTION_P (newdecl))
1064 return;
1066 /* If the old declaration was `static', or the new one isn't, then
1067 then everything is OK. */
1068 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1069 return;
1071 /* It's OK to declare a builtin function as `static'. */
1072 if (TREE_CODE (olddecl) == FUNCTION_DECL
1073 && DECL_ARTIFICIAL (olddecl))
1074 return;
1076 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1077 permerror (input_location, "previous declaration of %q+D", olddecl);
1080 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1081 function templates. If their exception specifications do not
1082 match, issue a diagnostic. */
1084 static void
1085 check_redeclaration_exception_specification (tree new_decl,
1086 tree old_decl)
1088 tree new_type;
1089 tree old_type;
1090 tree new_exceptions;
1091 tree old_exceptions;
1093 new_type = TREE_TYPE (new_decl);
1094 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1095 old_type = TREE_TYPE (old_decl);
1096 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1098 /* [except.spec]
1100 If any declaration of a function has an exception-specification,
1101 all declarations, including the definition and an explicit
1102 specialization, of that function shall have an
1103 exception-specification with the same set of type-ids. */
1104 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1105 && ! DECL_IS_BUILTIN (old_decl)
1106 && flag_exceptions
1107 && !comp_except_specs (new_exceptions, old_exceptions,
1108 /*exact=*/true))
1110 error ("declaration of %qF throws different exceptions", new_decl);
1111 error ("from previous declaration %q+F", old_decl);
1115 /* Return true if both OLD_DECL and NEW_DECL agrees on constexprnes.
1116 Otherwise issue diagnostics. */
1118 static bool
1119 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1121 old_decl = STRIP_TEMPLATE (old_decl);
1122 new_decl = STRIP_TEMPLATE (new_decl);
1123 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1124 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1125 return true;
1126 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1127 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1128 return true;
1129 error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1130 error ("from previous declaration %q+D", old_decl);
1131 return false;
1134 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1135 && lookup_attribute ("gnu_inline", \
1136 DECL_ATTRIBUTES (fn)))
1138 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1139 If the redeclaration is invalid, a diagnostic is issued, and the
1140 error_mark_node is returned. Otherwise, OLDDECL is returned.
1142 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1143 returned.
1145 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1147 tree
1148 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1150 unsigned olddecl_uid = DECL_UID (olddecl);
1151 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1152 int new_defines_function = 0;
1153 tree new_template_info;
1155 if (newdecl == olddecl)
1156 return olddecl;
1158 types_match = decls_match (newdecl, olddecl);
1160 /* If either the type of the new decl or the type of the old decl is an
1161 error_mark_node, then that implies that we have already issued an
1162 error (earlier) for some bogus type specification, and in that case,
1163 it is rather pointless to harass the user with yet more error message
1164 about the same declaration, so just pretend the types match here. */
1165 if (TREE_TYPE (newdecl) == error_mark_node
1166 || TREE_TYPE (olddecl) == error_mark_node)
1167 return error_mark_node;
1169 if (DECL_P (olddecl)
1170 && TREE_CODE (newdecl) == FUNCTION_DECL
1171 && TREE_CODE (olddecl) == FUNCTION_DECL
1172 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1174 if (DECL_DECLARED_INLINE_P (newdecl)
1175 && DECL_UNINLINABLE (newdecl)
1176 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1177 /* Already warned elsewhere. */;
1178 else if (DECL_DECLARED_INLINE_P (olddecl)
1179 && DECL_UNINLINABLE (olddecl)
1180 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1181 /* Already warned. */;
1182 else if (DECL_DECLARED_INLINE_P (newdecl)
1183 && DECL_UNINLINABLE (olddecl)
1184 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1186 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1187 newdecl);
1188 warning (OPT_Wattributes, "previous declaration of %q+D "
1189 "with attribute noinline", olddecl);
1191 else if (DECL_DECLARED_INLINE_P (olddecl)
1192 && DECL_UNINLINABLE (newdecl)
1193 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1195 warning (OPT_Wattributes, "function %q+D redeclared with "
1196 "attribute noinline", newdecl);
1197 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1198 olddecl);
1202 /* Check for redeclaration and other discrepancies. */
1203 if (TREE_CODE (olddecl) == FUNCTION_DECL
1204 && DECL_ARTIFICIAL (olddecl))
1206 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1207 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1209 /* Avoid warnings redeclaring built-ins which have not been
1210 explicitly declared. */
1211 if (DECL_ANTICIPATED (olddecl))
1212 return NULL_TREE;
1214 /* If you declare a built-in or predefined function name as static,
1215 the old definition is overridden, but optionally warn this was a
1216 bad choice of name. */
1217 if (! TREE_PUBLIC (newdecl))
1219 warning (OPT_Wshadow,
1220 DECL_BUILT_IN (olddecl)
1221 ? G_("shadowing built-in function %q#D")
1222 : G_("shadowing library function %q#D"), olddecl);
1223 /* Discard the old built-in function. */
1224 return NULL_TREE;
1226 /* If the built-in is not ansi, then programs can override
1227 it even globally without an error. */
1228 else if (! DECL_BUILT_IN (olddecl))
1229 warning (0, "library function %q#D redeclared as non-function %q#D",
1230 olddecl, newdecl);
1231 else
1233 error ("declaration of %q#D", newdecl);
1234 error ("conflicts with built-in declaration %q#D",
1235 olddecl);
1237 return NULL_TREE;
1239 else if (!types_match)
1241 /* Avoid warnings redeclaring built-ins which have not been
1242 explicitly declared. */
1243 if (DECL_ANTICIPATED (olddecl))
1245 /* Deal with fileptr_type_node. FILE type is not known
1246 at the time we create the builtins. */
1247 tree t1, t2;
1249 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1250 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1251 t1 || t2;
1252 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1253 if (!t1 || !t2)
1254 break;
1255 else if (TREE_VALUE (t2) == fileptr_type_node)
1257 tree t = TREE_VALUE (t1);
1259 if (TREE_CODE (t) == POINTER_TYPE
1260 && TYPE_NAME (TREE_TYPE (t))
1261 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1262 == get_identifier ("FILE")
1263 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1265 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1267 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1268 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1269 types_match = decls_match (newdecl, olddecl);
1270 if (types_match)
1271 return duplicate_decls (newdecl, olddecl,
1272 newdecl_is_friend);
1273 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1276 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1277 break;
1279 else if ((DECL_EXTERN_C_P (newdecl)
1280 && DECL_EXTERN_C_P (olddecl))
1281 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1282 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1284 /* A near match; override the builtin. */
1286 if (TREE_PUBLIC (newdecl))
1288 warning (0, "new declaration %q#D", newdecl);
1289 warning (0, "ambiguates built-in declaration %q#D",
1290 olddecl);
1292 else
1293 warning (OPT_Wshadow,
1294 DECL_BUILT_IN (olddecl)
1295 ? G_("shadowing built-in function %q#D")
1296 : G_("shadowing library function %q#D"), olddecl);
1298 else
1299 /* Discard the old built-in function. */
1300 return NULL_TREE;
1302 /* Replace the old RTL to avoid problems with inlining. */
1303 COPY_DECL_RTL (newdecl, olddecl);
1305 /* Even if the types match, prefer the new declarations type for
1306 built-ins which have not been explicitly declared, for
1307 exception lists, etc... */
1308 else if (DECL_ANTICIPATED (olddecl))
1310 tree type = TREE_TYPE (newdecl);
1311 tree attribs = (*targetm.merge_type_attributes)
1312 (TREE_TYPE (olddecl), type);
1314 type = cp_build_type_attribute_variant (type, attribs);
1315 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1318 /* If a function is explicitly declared "throw ()", propagate that to
1319 the corresponding builtin. */
1320 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1321 && DECL_ANTICIPATED (olddecl)
1322 && TREE_NOTHROW (newdecl)
1323 && !TREE_NOTHROW (olddecl)
1324 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1325 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1326 && types_match)
1327 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1329 /* Whether or not the builtin can throw exceptions has no
1330 bearing on this declarator. */
1331 TREE_NOTHROW (olddecl) = 0;
1333 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1335 /* If a builtin function is redeclared as `static', merge
1336 the declarations, but make the original one static. */
1337 DECL_THIS_STATIC (olddecl) = 1;
1338 TREE_PUBLIC (olddecl) = 0;
1340 /* Make the old declaration consistent with the new one so
1341 that all remnants of the builtin-ness of this function
1342 will be banished. */
1343 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1344 COPY_DECL_RTL (newdecl, olddecl);
1347 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1349 /* C++ Standard, 3.3, clause 4:
1350 "[Note: a namespace name or a class template name must be unique
1351 in its declarative region (7.3.2, clause 14). ]" */
1352 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1353 && TREE_CODE (newdecl) != NAMESPACE_DECL
1354 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1355 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1356 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1357 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1359 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1360 && TREE_CODE (newdecl) != TYPE_DECL)
1361 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1362 && TREE_CODE (olddecl) != TYPE_DECL))
1364 /* We do nothing special here, because C++ does such nasty
1365 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1366 get shadowed, and know that if we need to find a TYPE_DECL
1367 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1368 slot of the identifier. */
1369 return NULL_TREE;
1372 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1373 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1374 || (TREE_CODE (olddecl) == FUNCTION_DECL
1375 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1376 return NULL_TREE;
1379 error ("%q#D redeclared as different kind of symbol", newdecl);
1380 if (TREE_CODE (olddecl) == TREE_LIST)
1381 olddecl = TREE_VALUE (olddecl);
1382 error ("previous declaration of %q+#D", olddecl);
1384 return error_mark_node;
1386 else if (!types_match)
1388 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1389 /* These are certainly not duplicate declarations; they're
1390 from different scopes. */
1391 return NULL_TREE;
1393 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1395 /* The name of a class template may not be declared to refer to
1396 any other template, class, function, object, namespace, value,
1397 or type in the same scope. */
1398 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1399 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1401 error ("declaration of template %q#D", newdecl);
1402 error ("conflicts with previous declaration %q+#D", olddecl);
1404 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1405 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1406 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1407 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1408 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1409 DECL_TEMPLATE_PARMS (olddecl))
1410 /* Template functions can be disambiguated by
1411 return type. */
1412 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1413 TREE_TYPE (TREE_TYPE (olddecl))))
1415 error ("new declaration %q#D", newdecl);
1416 error ("ambiguates old declaration %q+#D", olddecl);
1418 return NULL_TREE;
1420 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1422 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1424 error ("declaration of C function %q#D conflicts with",
1425 newdecl);
1426 error ("previous declaration %q+#D here", olddecl);
1428 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1429 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1431 error ("new declaration %q#D", newdecl);
1432 error ("ambiguates old declaration %q+#D", olddecl);
1433 return error_mark_node;
1435 else
1436 return NULL_TREE;
1438 else
1440 error ("conflicting declaration %q#D", newdecl);
1441 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1442 return error_mark_node;
1445 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1446 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1447 && (!DECL_TEMPLATE_INFO (newdecl)
1448 || (DECL_TI_TEMPLATE (newdecl)
1449 != DECL_TI_TEMPLATE (olddecl))))
1450 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1451 && (!DECL_TEMPLATE_INFO (olddecl)
1452 || (DECL_TI_TEMPLATE (olddecl)
1453 != DECL_TI_TEMPLATE (newdecl))))))
1454 /* It's OK to have a template specialization and a non-template
1455 with the same type, or to have specializations of two
1456 different templates with the same type. Note that if one is a
1457 specialization, and the other is an instantiation of the same
1458 template, that we do not exit at this point. That situation
1459 can occur if we instantiate a template class, and then
1460 specialize one of its methods. This situation is valid, but
1461 the declarations must be merged in the usual way. */
1462 return NULL_TREE;
1463 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1464 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1465 && !DECL_USE_TEMPLATE (newdecl))
1466 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1467 && !DECL_USE_TEMPLATE (olddecl))))
1468 /* One of the declarations is a template instantiation, and the
1469 other is not a template at all. That's OK. */
1470 return NULL_TREE;
1471 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1473 /* In [namespace.alias] we have:
1475 In a declarative region, a namespace-alias-definition can be
1476 used to redefine a namespace-alias declared in that declarative
1477 region to refer only to the namespace to which it already
1478 refers.
1480 Therefore, if we encounter a second alias directive for the same
1481 alias, we can just ignore the second directive. */
1482 if (DECL_NAMESPACE_ALIAS (newdecl)
1483 && (DECL_NAMESPACE_ALIAS (newdecl)
1484 == DECL_NAMESPACE_ALIAS (olddecl)))
1485 return olddecl;
1486 /* [namespace.alias]
1488 A namespace-name or namespace-alias shall not be declared as
1489 the name of any other entity in the same declarative region.
1490 A namespace-name defined at global scope shall not be
1491 declared as the name of any other entity in any global scope
1492 of the program. */
1493 error ("declaration of namespace %qD conflicts with", newdecl);
1494 error ("previous declaration of namespace %q+D here", olddecl);
1495 return error_mark_node;
1497 else
1499 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1500 if (errmsg)
1502 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1503 if (DECL_NAME (olddecl) != NULL_TREE)
1504 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1505 ? "%q+#D previously defined here"
1506 : "%q+#D previously declared here", olddecl);
1507 return error_mark_node;
1509 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1510 && DECL_INITIAL (olddecl) != NULL_TREE
1511 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1512 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1514 /* Prototype decl follows defn w/o prototype. */
1515 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1516 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1517 "follows non-prototype definition here");
1519 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1520 || TREE_CODE (olddecl) == VAR_DECL)
1521 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1523 /* [dcl.link]
1524 If two declarations of the same function or object
1525 specify different linkage-specifications ..., the program
1526 is ill-formed.... Except for functions with C++ linkage,
1527 a function declaration without a linkage specification
1528 shall not precede the first linkage specification for
1529 that function. A function can be declared without a
1530 linkage specification after an explicit linkage
1531 specification has been seen; the linkage explicitly
1532 specified in the earlier declaration is not affected by
1533 such a function declaration.
1535 DR 563 raises the question why the restrictions on
1536 functions should not also apply to objects. Older
1537 versions of G++ silently ignore the linkage-specification
1538 for this example:
1540 namespace N {
1541 extern int i;
1542 extern "C" int i;
1545 which is clearly wrong. Therefore, we now treat objects
1546 like functions. */
1547 if (current_lang_depth () == 0)
1549 /* There is no explicit linkage-specification, so we use
1550 the linkage from the previous declaration. */
1551 if (!DECL_LANG_SPECIFIC (newdecl))
1552 retrofit_lang_decl (newdecl);
1553 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1555 else
1557 error ("previous declaration of %q+#D with %qL linkage",
1558 olddecl, DECL_LANGUAGE (olddecl));
1559 error ("conflicts with new declaration with %qL linkage",
1560 DECL_LANGUAGE (newdecl));
1564 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1566 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1568 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1569 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1570 int i = 1;
1572 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1573 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1575 for (; t1 && t1 != void_list_node;
1576 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1577 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1579 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1580 TREE_PURPOSE (t2)))
1582 permerror (input_location, "default argument given for parameter %d of %q#D",
1583 i, newdecl);
1584 permerror (input_location, "after previous specification in %q+#D", olddecl);
1586 else
1588 error ("default argument given for parameter %d of %q#D",
1589 i, newdecl);
1590 error ("after previous specification in %q+#D",
1591 olddecl);
1597 /* Do not merge an implicit typedef with an explicit one. In:
1599 class A;
1601 typedef class A A __attribute__ ((foo));
1603 the attribute should apply only to the typedef. */
1604 if (TREE_CODE (olddecl) == TYPE_DECL
1605 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1606 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1607 return NULL_TREE;
1609 /* If new decl is `static' and an `extern' was seen previously,
1610 warn about it. */
1611 warn_extern_redeclared_static (newdecl, olddecl);
1613 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1614 return error_mark_node;
1616 /* We have committed to returning 1 at this point. */
1617 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1619 /* Now that functions must hold information normally held
1620 by field decls, there is extra work to do so that
1621 declaration information does not get destroyed during
1622 definition. */
1623 if (DECL_VINDEX (olddecl))
1624 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1625 if (DECL_CONTEXT (olddecl))
1626 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1627 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1628 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1629 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1630 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1631 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1632 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1633 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1634 SET_OVERLOADED_OPERATOR_CODE
1635 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1636 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1638 /* Optionally warn about more than one declaration for the same
1639 name, but don't warn about a function declaration followed by a
1640 definition. */
1641 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1642 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1643 /* Don't warn about extern decl followed by definition. */
1644 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1645 /* Don't warn about friends, let add_friend take care of it. */
1646 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1648 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1649 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1652 if (DECL_DELETED_FN (newdecl))
1654 error ("deleted definition of %qD", newdecl);
1655 error ("after previous declaration %q+D", olddecl);
1659 /* Deal with C++: must preserve virtual function table size. */
1660 if (TREE_CODE (olddecl) == TYPE_DECL)
1662 tree newtype = TREE_TYPE (newdecl);
1663 tree oldtype = TREE_TYPE (olddecl);
1665 if (newtype != error_mark_node && oldtype != error_mark_node
1666 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1667 CLASSTYPE_FRIEND_CLASSES (newtype)
1668 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1670 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1673 /* Copy all the DECL_... slots specified in the new decl
1674 except for any that we copy here from the old type. */
1675 DECL_ATTRIBUTES (newdecl)
1676 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1678 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1680 tree old_result;
1681 tree new_result;
1682 old_result = DECL_TEMPLATE_RESULT (olddecl);
1683 new_result = DECL_TEMPLATE_RESULT (newdecl);
1684 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1685 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1686 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1687 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1689 DECL_ATTRIBUTES (old_result)
1690 = (*targetm.merge_decl_attributes) (old_result, new_result);
1692 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1694 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1695 && DECL_INITIAL (new_result))
1697 if (DECL_INITIAL (old_result))
1698 DECL_UNINLINABLE (old_result) = 1;
1699 else
1700 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1701 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1702 DECL_NOT_REALLY_EXTERN (old_result)
1703 = DECL_NOT_REALLY_EXTERN (new_result);
1704 DECL_INTERFACE_KNOWN (old_result)
1705 = DECL_INTERFACE_KNOWN (new_result);
1706 DECL_DECLARED_INLINE_P (old_result)
1707 = DECL_DECLARED_INLINE_P (new_result);
1708 DECL_DISREGARD_INLINE_LIMITS (old_result)
1709 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1712 else
1714 DECL_DECLARED_INLINE_P (old_result)
1715 |= DECL_DECLARED_INLINE_P (new_result);
1716 DECL_DISREGARD_INLINE_LIMITS (old_result)
1717 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1718 check_redeclaration_exception_specification (newdecl, olddecl);
1722 /* If the new declaration is a definition, update the file and
1723 line information on the declaration, and also make
1724 the old declaration the same definition. */
1725 if (DECL_INITIAL (new_result) != NULL_TREE)
1727 DECL_SOURCE_LOCATION (olddecl)
1728 = DECL_SOURCE_LOCATION (old_result)
1729 = DECL_SOURCE_LOCATION (newdecl);
1730 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1731 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1733 tree parm;
1734 DECL_ARGUMENTS (old_result)
1735 = DECL_ARGUMENTS (new_result);
1736 for (parm = DECL_ARGUMENTS (old_result); parm;
1737 parm = TREE_CHAIN (parm))
1738 DECL_CONTEXT (parm) = old_result;
1742 return olddecl;
1745 if (types_match)
1747 /* Automatically handles default parameters. */
1748 tree oldtype = TREE_TYPE (olddecl);
1749 tree newtype;
1751 /* Merge the data types specified in the two decls. */
1752 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1754 /* If merge_types produces a non-typedef type, just use the old type. */
1755 if (TREE_CODE (newdecl) == TYPE_DECL
1756 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1757 newtype = oldtype;
1759 if (TREE_CODE (newdecl) == VAR_DECL)
1761 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1762 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1763 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1764 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1765 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1766 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1768 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1769 if (DECL_LANG_SPECIFIC (olddecl)
1770 && CP_DECL_THREADPRIVATE_P (olddecl))
1772 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1773 if (!DECL_LANG_SPECIFIC (newdecl))
1774 retrofit_lang_decl (newdecl);
1776 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1777 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1781 /* Do this after calling `merge_types' so that default
1782 parameters don't confuse us. */
1783 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1784 check_redeclaration_exception_specification (newdecl, olddecl);
1785 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1787 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1788 check_default_args (newdecl);
1790 /* Lay the type out, unless already done. */
1791 if (! same_type_p (newtype, oldtype)
1792 && TREE_TYPE (newdecl) != error_mark_node
1793 && !(processing_template_decl && uses_template_parms (newdecl)))
1794 layout_type (TREE_TYPE (newdecl));
1796 if ((TREE_CODE (newdecl) == VAR_DECL
1797 || TREE_CODE (newdecl) == PARM_DECL
1798 || TREE_CODE (newdecl) == RESULT_DECL
1799 || TREE_CODE (newdecl) == FIELD_DECL
1800 || TREE_CODE (newdecl) == TYPE_DECL)
1801 && !(processing_template_decl && uses_template_parms (newdecl)))
1802 layout_decl (newdecl, 0);
1804 /* Merge the type qualifiers. */
1805 if (TREE_READONLY (newdecl))
1806 TREE_READONLY (olddecl) = 1;
1807 if (TREE_THIS_VOLATILE (newdecl))
1808 TREE_THIS_VOLATILE (olddecl) = 1;
1809 if (TREE_NOTHROW (newdecl))
1810 TREE_NOTHROW (olddecl) = 1;
1812 /* Merge deprecatedness. */
1813 if (TREE_DEPRECATED (newdecl))
1814 TREE_DEPRECATED (olddecl) = 1;
1816 /* Preserve function specific target and optimization options */
1817 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1819 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1820 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1821 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1822 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1824 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1825 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1826 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1827 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1830 /* Merge the initialization information. */
1831 if (DECL_INITIAL (newdecl) == NULL_TREE
1832 && DECL_INITIAL (olddecl) != NULL_TREE)
1834 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1835 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1836 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1838 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1839 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1843 /* Merge the section attribute.
1844 We want to issue an error if the sections conflict but that must be
1845 done later in decl_attributes since we are called before attributes
1846 are assigned. */
1847 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1848 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1850 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1853 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1854 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1855 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1856 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1857 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1858 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1859 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1860 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1861 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1862 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1863 /* Keep the old RTL. */
1864 COPY_DECL_RTL (olddecl, newdecl);
1866 else if (TREE_CODE (newdecl) == VAR_DECL
1867 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1869 /* Keep the old RTL. We cannot keep the old RTL if the old
1870 declaration was for an incomplete object and the new
1871 declaration is not since many attributes of the RTL will
1872 change. */
1873 COPY_DECL_RTL (olddecl, newdecl);
1876 /* If cannot merge, then use the new type and qualifiers,
1877 and don't preserve the old rtl. */
1878 else
1880 /* Clean out any memory we had of the old declaration. */
1881 tree oldstatic = value_member (olddecl, static_aggregates);
1882 if (oldstatic)
1883 TREE_VALUE (oldstatic) = error_mark_node;
1885 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1886 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1887 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1888 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1891 /* Merge the storage class information. */
1892 merge_weak (newdecl, olddecl);
1894 if (DECL_ONE_ONLY (olddecl))
1895 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1897 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1898 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1899 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1900 if (! DECL_EXTERNAL (olddecl))
1901 DECL_EXTERNAL (newdecl) = 0;
1903 new_template_info = NULL_TREE;
1904 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1906 bool new_redefines_gnu_inline = false;
1908 if (new_defines_function
1909 && ((DECL_INTERFACE_KNOWN (olddecl)
1910 && TREE_CODE (olddecl) == FUNCTION_DECL)
1911 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1912 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1913 == FUNCTION_DECL))))
1915 tree fn = olddecl;
1917 if (TREE_CODE (fn) == TEMPLATE_DECL)
1918 fn = DECL_TEMPLATE_RESULT (olddecl);
1920 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1923 if (!new_redefines_gnu_inline)
1925 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1926 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1927 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1929 DECL_TEMPLATE_INSTANTIATED (newdecl)
1930 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1931 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1933 /* If the OLDDECL is an instantiation and/or specialization,
1934 then the NEWDECL must be too. But, it may not yet be marked
1935 as such if the caller has created NEWDECL, but has not yet
1936 figured out that it is a redeclaration. */
1937 if (!DECL_USE_TEMPLATE (newdecl))
1938 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1940 /* Don't really know how much of the language-specific
1941 values we should copy from old to new. */
1942 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1943 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1944 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1945 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1947 if (LANG_DECL_HAS_MIN (newdecl))
1949 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1950 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1951 if (DECL_TEMPLATE_INFO (newdecl))
1952 new_template_info = DECL_TEMPLATE_INFO (newdecl);
1953 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1955 /* Only functions have these fields. */
1956 if (TREE_CODE (newdecl) == FUNCTION_DECL
1957 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1959 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1960 olddecl_friend = DECL_FRIEND_P (olddecl);
1961 hidden_friend = (DECL_ANTICIPATED (olddecl)
1962 && DECL_HIDDEN_FRIEND_P (olddecl)
1963 && newdecl_is_friend);
1964 DECL_BEFRIENDING_CLASSES (newdecl)
1965 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1966 DECL_BEFRIENDING_CLASSES (olddecl));
1967 /* DECL_THUNKS is only valid for virtual functions,
1968 otherwise it is a DECL_FRIEND_CONTEXT. */
1969 if (DECL_VIRTUAL_P (newdecl))
1970 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1972 /* Only variables have this field. */
1973 else if (TREE_CODE (newdecl) == VAR_DECL
1974 && VAR_HAD_UNKNOWN_BOUND (olddecl))
1975 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
1978 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1980 tree parm;
1982 /* Merge parameter attributes. */
1983 tree oldarg, newarg;
1984 for (oldarg = DECL_ARGUMENTS(olddecl),
1985 newarg = DECL_ARGUMENTS(newdecl);
1986 oldarg && newarg;
1987 oldarg = TREE_CHAIN(oldarg), newarg = TREE_CHAIN(newarg)) {
1988 DECL_ATTRIBUTES (newarg)
1989 = (*targetm.merge_decl_attributes) (oldarg, newarg);
1990 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
1993 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1994 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1996 /* If newdecl is not a specialization, then it is not a
1997 template-related function at all. And that means that we
1998 should have exited above, returning 0. */
1999 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2001 if (DECL_ODR_USED (olddecl))
2002 /* From [temp.expl.spec]:
2004 If a template, a member template or the member of a class
2005 template is explicitly specialized then that
2006 specialization shall be declared before the first use of
2007 that specialization that would cause an implicit
2008 instantiation to take place, in every translation unit in
2009 which such a use occurs. */
2010 error ("explicit specialization of %qD after first use",
2011 olddecl);
2013 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2015 /* Don't propagate visibility from the template to the
2016 specialization here. We'll do that in determine_visibility if
2017 appropriate. */
2018 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2020 /* [temp.expl.spec/14] We don't inline explicit specialization
2021 just because the primary template says so. */
2023 else if (new_defines_function && DECL_INITIAL (olddecl))
2025 /* Never inline re-defined extern inline functions.
2026 FIXME: this could be better handled by keeping both
2027 function as separate declarations. */
2028 DECL_UNINLINABLE (newdecl) = 1;
2030 else
2032 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2033 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2035 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2037 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2038 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2040 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2041 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2042 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2043 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2046 /* Preserve abstractness on cloned [cd]tors. */
2047 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2049 /* Update newdecl's parms to point at olddecl. */
2050 for (parm = DECL_ARGUMENTS (newdecl); parm;
2051 parm = TREE_CHAIN (parm))
2052 DECL_CONTEXT (parm) = olddecl;
2054 if (! types_match)
2056 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2057 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2058 COPY_DECL_RTL (newdecl, olddecl);
2060 if (! types_match || new_defines_function)
2062 /* These need to be copied so that the names are available.
2063 Note that if the types do match, we'll preserve inline
2064 info and other bits, but if not, we won't. */
2065 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2066 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2068 if (new_defines_function)
2069 /* If defining a function declared with other language
2070 linkage, use the previously declared language linkage. */
2071 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2072 else if (types_match)
2074 /* If redeclaring a builtin function, and not a definition,
2075 it stays built in. */
2076 if (DECL_BUILT_IN (olddecl))
2078 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2079 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2080 /* If we're keeping the built-in definition, keep the rtl,
2081 regardless of declaration matches. */
2082 COPY_DECL_RTL (olddecl, newdecl);
2085 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2086 /* Don't clear out the arguments if we're just redeclaring a
2087 function. */
2088 if (DECL_ARGUMENTS (olddecl))
2089 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2092 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2093 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2095 /* Now preserve various other info from the definition. */
2096 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2097 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2098 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2099 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2101 /* Warn about conflicting visibility specifications. */
2102 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2103 && DECL_VISIBILITY_SPECIFIED (newdecl)
2104 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2106 warning_at (input_location, OPT_Wattributes,
2107 "%q+D: visibility attribute ignored because it", newdecl);
2108 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2109 "conflicts with previous declaration here");
2111 /* Choose the declaration which specified visibility. */
2112 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2114 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2115 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2117 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2118 so keep this behavior. */
2119 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2121 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2122 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2125 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2126 with that from NEWDECL below. */
2127 if (DECL_LANG_SPECIFIC (olddecl))
2129 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2130 != DECL_LANG_SPECIFIC (newdecl));
2131 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2134 /* Merge the USED information. */
2135 if (TREE_USED (olddecl))
2136 TREE_USED (newdecl) = 1;
2137 else if (TREE_USED (newdecl))
2138 TREE_USED (olddecl) = 1;
2139 if (TREE_CODE (newdecl) == VAR_DECL)
2141 if (DECL_READ_P (olddecl))
2142 DECL_READ_P (newdecl) = 1;
2143 else if (DECL_READ_P (newdecl))
2144 DECL_READ_P (olddecl) = 1;
2146 if (DECL_PRESERVE_P (olddecl))
2147 DECL_PRESERVE_P (newdecl) = 1;
2148 else if (DECL_PRESERVE_P (newdecl))
2149 DECL_PRESERVE_P (olddecl) = 1;
2151 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2153 int function_size;
2155 function_size = sizeof (struct tree_decl_common);
2157 memcpy ((char *) olddecl + sizeof (struct tree_common),
2158 (char *) newdecl + sizeof (struct tree_common),
2159 function_size - sizeof (struct tree_common));
2161 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2162 (char *) newdecl + sizeof (struct tree_decl_common),
2163 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2164 if (new_template_info)
2165 /* If newdecl is a template instantiation, it is possible that
2166 the following sequence of events has occurred:
2168 o A friend function was declared in a class template. The
2169 class template was instantiated.
2171 o The instantiation of the friend declaration was
2172 recorded on the instantiation list, and is newdecl.
2174 o Later, however, instantiate_class_template called pushdecl
2175 on the newdecl to perform name injection. But, pushdecl in
2176 turn called duplicate_decls when it discovered that another
2177 declaration of a global function with the same name already
2178 existed.
2180 o Here, in duplicate_decls, we decided to clobber newdecl.
2182 If we're going to do that, we'd better make sure that
2183 olddecl, and not newdecl, is on the list of
2184 instantiations so that if we try to do the instantiation
2185 again we won't get the clobbered declaration. */
2186 reregister_specialization (newdecl,
2187 new_template_info,
2188 olddecl);
2190 else
2192 size_t size = tree_code_size (TREE_CODE (olddecl));
2193 memcpy ((char *) olddecl + sizeof (struct tree_common),
2194 (char *) newdecl + sizeof (struct tree_common),
2195 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2196 switch (TREE_CODE (olddecl))
2198 case LABEL_DECL:
2199 case VAR_DECL:
2200 case RESULT_DECL:
2201 case PARM_DECL:
2202 case FIELD_DECL:
2203 case TYPE_DECL:
2204 case CONST_DECL:
2206 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2207 (char *) newdecl + sizeof (struct tree_decl_common),
2208 size - sizeof (struct tree_decl_common)
2209 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2211 break;
2212 default:
2213 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2214 (char *) newdecl + sizeof (struct tree_decl_common),
2215 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2216 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2217 break;
2220 DECL_UID (olddecl) = olddecl_uid;
2221 if (olddecl_friend)
2222 DECL_FRIEND_P (olddecl) = 1;
2223 if (hidden_friend)
2225 DECL_ANTICIPATED (olddecl) = 1;
2226 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2229 /* NEWDECL contains the merged attribute lists.
2230 Update OLDDECL to be the same. */
2231 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2233 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2234 so that encode_section_info has a chance to look at the new decl
2235 flags and attributes. */
2236 if (DECL_RTL_SET_P (olddecl)
2237 && (TREE_CODE (olddecl) == FUNCTION_DECL
2238 || (TREE_CODE (olddecl) == VAR_DECL
2239 && TREE_STATIC (olddecl))))
2240 make_decl_rtl (olddecl);
2242 /* The NEWDECL will no longer be needed. Because every out-of-class
2243 declaration of a member results in a call to duplicate_decls,
2244 freeing these nodes represents in a significant savings. */
2245 ggc_free (newdecl);
2247 return olddecl;
2250 /* Return zero if the declaration NEWDECL is valid
2251 when the declaration OLDDECL (assumed to be for the same name)
2252 has already been seen.
2253 Otherwise return an error message format string with a %s
2254 where the identifier should go. */
2256 static const char *
2257 redeclaration_error_message (tree newdecl, tree olddecl)
2259 if (TREE_CODE (newdecl) == TYPE_DECL)
2261 /* Because C++ can put things into name space for free,
2262 constructs like "typedef struct foo { ... } foo"
2263 would look like an erroneous redeclaration. */
2264 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2265 return NULL;
2266 else
2267 return G_("redefinition of %q#D");
2269 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2271 /* If this is a pure function, its olddecl will actually be
2272 the original initialization to `0' (which we force to call
2273 abort()). Don't complain about redefinition in this case. */
2274 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2275 && DECL_INITIAL (olddecl) == NULL_TREE)
2276 return NULL;
2278 /* If both functions come from different namespaces, this is not
2279 a redeclaration - this is a conflict with a used function. */
2280 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2281 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2282 && ! decls_match (olddecl, newdecl))
2283 return G_("%qD conflicts with used function");
2285 /* We'll complain about linkage mismatches in
2286 warn_extern_redeclared_static. */
2288 /* Defining the same name twice is no good. */
2289 if (DECL_INITIAL (olddecl) != NULL_TREE
2290 && DECL_INITIAL (newdecl) != NULL_TREE)
2292 if (DECL_NAME (olddecl) == NULL_TREE)
2293 return G_("%q#D not declared in class");
2294 else if (!GNU_INLINE_P (olddecl)
2295 || GNU_INLINE_P (newdecl))
2296 return G_("redefinition of %q#D");
2299 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2301 bool olda = GNU_INLINE_P (olddecl);
2302 bool newa = GNU_INLINE_P (newdecl);
2304 if (olda != newa)
2306 if (newa)
2307 return G_("%q+D redeclared inline with "
2308 "%<gnu_inline%> attribute");
2309 else
2310 return G_("%q+D redeclared inline without "
2311 "%<gnu_inline%> attribute");
2315 return NULL;
2317 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2319 tree nt, ot;
2321 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2323 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2324 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2325 return G_("redefinition of %q#D");
2326 return NULL;
2329 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2330 || (DECL_TEMPLATE_RESULT (newdecl)
2331 == DECL_TEMPLATE_RESULT (olddecl)))
2332 return NULL;
2334 nt = DECL_TEMPLATE_RESULT (newdecl);
2335 if (DECL_TEMPLATE_INFO (nt))
2336 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2337 ot = DECL_TEMPLATE_RESULT (olddecl);
2338 if (DECL_TEMPLATE_INFO (ot))
2339 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2340 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2341 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2342 return G_("redefinition of %q#D");
2344 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2346 bool olda = GNU_INLINE_P (ot);
2347 bool newa = GNU_INLINE_P (nt);
2349 if (olda != newa)
2351 if (newa)
2352 return G_("%q+D redeclared inline with "
2353 "%<gnu_inline%> attribute");
2354 else
2355 return G_("%q+D redeclared inline without "
2356 "%<gnu_inline%> attribute");
2360 /* Core issue #226 (C++0x):
2362 If a friend function template declaration specifies a
2363 default template-argument, that declaration shall be a
2364 definition and shall be the only declaration of the
2365 function template in the translation unit. */
2366 if ((cxx_dialect != cxx98)
2367 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2368 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2369 /*is_primary=*/1, /*is_partial=*/0,
2370 /*is_friend_decl=*/2))
2371 return G_("redeclaration of friend %q#D "
2372 "may not have default template arguments");
2374 return NULL;
2376 else if (TREE_CODE (newdecl) == VAR_DECL
2377 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2378 && (! DECL_LANG_SPECIFIC (olddecl)
2379 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2380 || DECL_THREAD_LOCAL_P (newdecl)))
2382 /* Only variables can be thread-local, and all declarations must
2383 agree on this property. */
2384 if (DECL_THREAD_LOCAL_P (newdecl))
2385 return G_("thread-local declaration of %q#D follows "
2386 "non-thread-local declaration");
2387 else
2388 return G_("non-thread-local declaration of %q#D follows "
2389 "thread-local declaration");
2391 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2393 /* The objects have been declared at namespace scope. If either
2394 is a member of an anonymous union, then this is an invalid
2395 redeclaration. For example:
2397 int i;
2398 union { int i; };
2400 is invalid. */
2401 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2402 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2403 return G_("redeclaration of %q#D");
2404 /* If at least one declaration is a reference, there is no
2405 conflict. For example:
2407 int i = 3;
2408 extern int i;
2410 is valid. */
2411 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2412 return NULL;
2413 /* Reject two definitions. */
2414 return G_("redefinition of %q#D");
2416 else
2418 /* Objects declared with block scope: */
2419 /* Reject two definitions, and reject a definition
2420 together with an external reference. */
2421 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2422 return G_("redeclaration of %q#D");
2423 return NULL;
2427 /* Hash and equality functions for the named_label table. */
2429 static hashval_t
2430 named_label_entry_hash (const void *data)
2432 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2433 return DECL_UID (ent->label_decl);
2436 static int
2437 named_label_entry_eq (const void *a, const void *b)
2439 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2440 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2441 return ent_a->label_decl == ent_b->label_decl;
2444 /* Create a new label, named ID. */
2446 static tree
2447 make_label_decl (tree id, int local_p)
2449 struct named_label_entry *ent;
2450 void **slot;
2451 tree decl;
2453 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2455 DECL_CONTEXT (decl) = current_function_decl;
2456 DECL_MODE (decl) = VOIDmode;
2457 C_DECLARED_LABEL_FLAG (decl) = local_p;
2459 /* Say where one reference is to the label, for the sake of the
2460 error if it is not defined. */
2461 DECL_SOURCE_LOCATION (decl) = input_location;
2463 /* Record the fact that this identifier is bound to this label. */
2464 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2466 /* Create the label htab for the function on demand. */
2467 if (!named_labels)
2468 named_labels = htab_create_ggc (13, named_label_entry_hash,
2469 named_label_entry_eq, NULL);
2471 /* Record this label on the list of labels used in this function.
2472 We do this before calling make_label_decl so that we get the
2473 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2474 ent = GGC_CNEW (struct named_label_entry);
2475 ent->label_decl = decl;
2477 slot = htab_find_slot (named_labels, ent, INSERT);
2478 gcc_assert (*slot == NULL);
2479 *slot = ent;
2481 return decl;
2484 /* Look for a label named ID in the current function. If one cannot
2485 be found, create one. (We keep track of used, but undefined,
2486 labels, and complain about them at the end of a function.) */
2488 tree
2489 lookup_label (tree id)
2491 tree decl;
2493 timevar_push (TV_NAME_LOOKUP);
2494 /* You can't use labels at global scope. */
2495 if (current_function_decl == NULL_TREE)
2497 error ("label %qE referenced outside of any function", id);
2498 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2501 /* See if we've already got this label. */
2502 decl = IDENTIFIER_LABEL_VALUE (id);
2503 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2504 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2506 decl = make_label_decl (id, /*local_p=*/0);
2507 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2510 /* Declare a local label named ID. */
2512 tree
2513 declare_local_label (tree id)
2515 tree decl, shadow;
2517 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2518 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2519 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2520 current_binding_level->shadowed_labels);
2521 current_binding_level->shadowed_labels = shadow;
2523 decl = make_label_decl (id, /*local_p=*/1);
2524 TREE_VALUE (shadow) = decl;
2526 return decl;
2529 /* Returns nonzero if it is ill-formed to jump past the declaration of
2530 DECL. Returns 2 if it's also a real problem. */
2532 static int
2533 decl_jump_unsafe (tree decl)
2535 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2536 with automatic storage duration is not in scope to a point where it is
2537 in scope is ill-formed unless the variable has scalar type, class type
2538 with a trivial default constructor and a trivial destructor, a
2539 cv-qualified version of one of these types, or an array of one of the
2540 preceding types and is declared without an initializer (8.5). */
2541 tree type = TREE_TYPE (decl);
2543 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2544 || type == error_mark_node)
2545 return 0;
2547 type = strip_array_types (type);
2549 if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2550 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2551 return 2;
2553 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2554 return 1;
2556 return 0;
2559 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2561 static void
2562 identify_goto (tree decl, const location_t *locus)
2564 if (decl)
2565 permerror (input_location, "jump to label %qD", decl);
2566 else
2567 permerror (input_location, "jump to case label");
2568 if (locus)
2569 permerror (*locus, " from here");
2572 /* Check that a single previously seen jump to a newly defined label
2573 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2574 the jump context; NAMES are the names in scope in LEVEL at the jump
2575 context; LOCUS is the source position of the jump or 0. Returns
2576 true if all is well. */
2578 static bool
2579 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2580 bool exited_omp, const location_t *locus)
2582 struct cp_binding_level *b;
2583 bool identified = false, saw_eh = false, saw_omp = false;
2585 if (exited_omp)
2587 identify_goto (decl, locus);
2588 error (" exits OpenMP structured block");
2589 identified = saw_omp = true;
2592 for (b = current_binding_level; b ; b = b->level_chain)
2594 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2596 for (new_decls = b->names; new_decls != old_decls;
2597 new_decls = TREE_CHAIN (new_decls))
2599 int problem = decl_jump_unsafe (new_decls);
2600 if (! problem)
2601 continue;
2603 if (!identified)
2605 identify_goto (decl, locus);
2606 identified = true;
2608 if (problem > 1)
2609 error (" crosses initialization of %q+#D", new_decls);
2610 else
2611 permerror (input_location, " enters scope of %q+#D which has "
2612 "non-trivial destructor", new_decls);
2615 if (b == level)
2616 break;
2617 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2619 if (!identified)
2621 identify_goto (decl, locus);
2622 identified = true;
2624 if (b->kind == sk_try)
2625 error (" enters try block");
2626 else
2627 error (" enters catch block");
2628 saw_eh = true;
2630 if (b->kind == sk_omp && !saw_omp)
2632 if (!identified)
2634 identify_goto (decl, locus);
2635 identified = true;
2637 error (" enters OpenMP structured block");
2638 saw_omp = true;
2642 return !identified;
2645 static void
2646 check_previous_goto (tree decl, struct named_label_use_entry *use)
2648 check_previous_goto_1 (decl, use->binding_level,
2649 use->names_in_scope, use->in_omp_scope,
2650 &use->o_goto_locus);
2653 static bool
2654 check_switch_goto (struct cp_binding_level* level)
2656 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2659 /* Check that a new jump to a label DECL is OK. Called by
2660 finish_goto_stmt. */
2662 void
2663 check_goto (tree decl)
2665 struct named_label_entry *ent, dummy;
2666 bool saw_catch = false, identified = false;
2667 tree bad;
2669 /* We can't know where a computed goto is jumping.
2670 So we assume that it's OK. */
2671 if (TREE_CODE (decl) != LABEL_DECL)
2672 return;
2674 /* We didn't record any information about this label when we created it,
2675 and there's not much point since it's trivial to analyze as a return. */
2676 if (decl == cdtor_label)
2677 return;
2679 dummy.label_decl = decl;
2680 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2681 gcc_assert (ent != NULL);
2683 /* If the label hasn't been defined yet, defer checking. */
2684 if (! DECL_INITIAL (decl))
2686 struct named_label_use_entry *new_use;
2688 /* Don't bother creating another use if the last goto had the
2689 same data, and will therefore create the same set of errors. */
2690 if (ent->uses
2691 && ent->uses->names_in_scope == current_binding_level->names)
2692 return;
2694 new_use = GGC_NEW (struct named_label_use_entry);
2695 new_use->binding_level = current_binding_level;
2696 new_use->names_in_scope = current_binding_level->names;
2697 new_use->o_goto_locus = input_location;
2698 new_use->in_omp_scope = false;
2700 new_use->next = ent->uses;
2701 ent->uses = new_use;
2702 return;
2705 if (ent->in_try_scope || ent->in_catch_scope
2706 || ent->in_omp_scope || ent->bad_decls)
2708 permerror (input_location, "jump to label %q+D", decl);
2709 permerror (input_location, " from here");
2710 identified = true;
2713 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2715 tree b = TREE_VALUE (bad);
2716 int u = decl_jump_unsafe (b);
2718 if (u > 1 && DECL_ARTIFICIAL (b))
2720 /* Can't skip init of __exception_info. */
2721 error_at (DECL_SOURCE_LOCATION (b), " enters catch block");
2722 saw_catch = true;
2724 else if (u > 1)
2725 error (" skips initialization of %q+#D", b);
2726 else
2727 permerror (input_location, " enters scope of %q+#D which has "
2728 "non-trivial destructor", b);
2731 if (ent->in_try_scope)
2732 error (" enters try block");
2733 else if (ent->in_catch_scope && !saw_catch)
2734 error (" enters catch block");
2736 if (ent->in_omp_scope)
2737 error (" enters OpenMP structured block");
2738 else if (flag_openmp)
2740 struct cp_binding_level *b;
2741 for (b = current_binding_level; b ; b = b->level_chain)
2743 if (b == ent->binding_level)
2744 break;
2745 if (b->kind == sk_omp)
2747 if (!identified)
2749 permerror (input_location, "jump to label %q+D", decl);
2750 permerror (input_location, " from here");
2751 identified = true;
2753 error (" exits OpenMP structured block");
2754 break;
2760 /* Check that a return is ok wrt OpenMP structured blocks.
2761 Called by finish_return_stmt. Returns true if all is well. */
2763 bool
2764 check_omp_return (void)
2766 struct cp_binding_level *b;
2767 for (b = current_binding_level; b ; b = b->level_chain)
2768 if (b->kind == sk_omp)
2770 error ("invalid exit from OpenMP structured block");
2771 return false;
2773 return true;
2776 /* Define a label, specifying the location in the source file.
2777 Return the LABEL_DECL node for the label. */
2779 tree
2780 define_label (location_t location, tree name)
2782 struct named_label_entry *ent, dummy;
2783 struct cp_binding_level *p;
2784 tree decl;
2786 timevar_push (TV_NAME_LOOKUP);
2788 decl = lookup_label (name);
2790 dummy.label_decl = decl;
2791 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2792 gcc_assert (ent != NULL);
2794 /* After labels, make any new cleanups in the function go into their
2795 own new (temporary) binding contour. */
2796 for (p = current_binding_level;
2797 p->kind != sk_function_parms;
2798 p = p->level_chain)
2799 p->more_cleanups_ok = 0;
2801 if (name == get_identifier ("wchar_t"))
2802 permerror (input_location, "label named wchar_t");
2804 if (DECL_INITIAL (decl) != NULL_TREE)
2806 error ("duplicate label %qD", decl);
2807 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2809 else
2811 struct named_label_use_entry *use;
2813 /* Mark label as having been defined. */
2814 DECL_INITIAL (decl) = error_mark_node;
2815 /* Say where in the source. */
2816 DECL_SOURCE_LOCATION (decl) = location;
2818 ent->binding_level = current_binding_level;
2819 ent->names_in_scope = current_binding_level->names;
2821 for (use = ent->uses; use ; use = use->next)
2822 check_previous_goto (decl, use);
2823 ent->uses = NULL;
2826 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2829 struct cp_switch
2831 struct cp_binding_level *level;
2832 struct cp_switch *next;
2833 /* The SWITCH_STMT being built. */
2834 tree switch_stmt;
2835 /* A splay-tree mapping the low element of a case range to the high
2836 element, or NULL_TREE if there is no high element. Used to
2837 determine whether or not a new case label duplicates an old case
2838 label. We need a tree, rather than simply a hash table, because
2839 of the GNU case range extension. */
2840 splay_tree cases;
2843 /* A stack of the currently active switch statements. The innermost
2844 switch statement is on the top of the stack. There is no need to
2845 mark the stack for garbage collection because it is only active
2846 during the processing of the body of a function, and we never
2847 collect at that point. */
2849 static struct cp_switch *switch_stack;
2851 /* Called right after a switch-statement condition is parsed.
2852 SWITCH_STMT is the switch statement being parsed. */
2854 void
2855 push_switch (tree switch_stmt)
2857 struct cp_switch *p = XNEW (struct cp_switch);
2858 p->level = current_binding_level;
2859 p->next = switch_stack;
2860 p->switch_stmt = switch_stmt;
2861 p->cases = splay_tree_new (case_compare, NULL, NULL);
2862 switch_stack = p;
2865 void
2866 pop_switch (void)
2868 struct cp_switch *cs = switch_stack;
2869 location_t switch_location;
2871 /* Emit warnings as needed. */
2872 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2873 switch_location = EXPR_LOCATION (cs->switch_stmt);
2874 else
2875 switch_location = input_location;
2876 if (!processing_template_decl)
2877 c_do_switch_warnings (cs->cases, switch_location,
2878 SWITCH_STMT_TYPE (cs->switch_stmt),
2879 SWITCH_STMT_COND (cs->switch_stmt));
2881 splay_tree_delete (cs->cases);
2882 switch_stack = switch_stack->next;
2883 free (cs);
2886 /* Note that we've seen a definition of a case label, and complain if this
2887 is a bad place for one. */
2889 tree
2890 finish_case_label (location_t loc, tree low_value, tree high_value)
2892 tree cond, r;
2893 struct cp_binding_level *p;
2895 if (processing_template_decl)
2897 tree label;
2899 /* For templates, just add the case label; we'll do semantic
2900 analysis at instantiation-time. */
2901 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2902 return add_stmt (build_case_label (loc, low_value, high_value, label));
2905 /* Find the condition on which this switch statement depends. */
2906 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2907 if (cond && TREE_CODE (cond) == TREE_LIST)
2908 cond = TREE_VALUE (cond);
2910 if (!check_switch_goto (switch_stack->level))
2911 return error_mark_node;
2913 r = c_add_case_label (loc, switch_stack->cases, cond,
2914 SWITCH_STMT_TYPE (switch_stack->switch_stmt),
2915 low_value, high_value);
2917 /* After labels, make any new cleanups in the function go into their
2918 own new (temporary) binding contour. */
2919 for (p = current_binding_level;
2920 p->kind != sk_function_parms;
2921 p = p->level_chain)
2922 p->more_cleanups_ok = 0;
2924 return r;
2927 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2929 static hashval_t
2930 typename_hash (const void* k)
2932 hashval_t hash;
2933 const_tree const t = (const_tree) k;
2935 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2936 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2938 return hash;
2941 typedef struct typename_info {
2942 tree scope;
2943 tree name;
2944 tree template_id;
2945 bool enum_p;
2946 bool class_p;
2947 } typename_info;
2949 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2950 really of type `typename_info*' */
2952 static int
2953 typename_compare (const void * k1, const void * k2)
2955 const_tree const t1 = (const_tree) k1;
2956 const typename_info *const t2 = (const typename_info *) k2;
2958 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2959 && TYPE_CONTEXT (t1) == t2->scope
2960 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2961 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2962 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2965 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2966 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2968 Returns the new TYPENAME_TYPE. */
2970 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2972 static tree
2973 build_typename_type (tree context, tree name, tree fullname,
2974 enum tag_types tag_type)
2976 tree t;
2977 tree d;
2978 typename_info ti;
2979 void **e;
2980 hashval_t hash;
2982 if (typename_htab == NULL)
2983 typename_htab = htab_create_ggc (61, &typename_hash,
2984 &typename_compare, NULL);
2986 ti.scope = FROB_CONTEXT (context);
2987 ti.name = name;
2988 ti.template_id = fullname;
2989 ti.enum_p = tag_type == enum_type;
2990 ti.class_p = (tag_type == class_type
2991 || tag_type == record_type
2992 || tag_type == union_type);
2993 hash = (htab_hash_pointer (ti.scope)
2994 ^ htab_hash_pointer (ti.name));
2996 /* See if we already have this type. */
2997 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2998 if (*e)
2999 t = (tree) *e;
3000 else
3002 /* Build the TYPENAME_TYPE. */
3003 t = cxx_make_type (TYPENAME_TYPE);
3004 TYPE_CONTEXT (t) = ti.scope;
3005 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3006 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3007 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3009 /* Build the corresponding TYPE_DECL. */
3010 d = build_decl (input_location, TYPE_DECL, name, t);
3011 TYPE_NAME (TREE_TYPE (d)) = d;
3012 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3013 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3014 DECL_ARTIFICIAL (d) = 1;
3016 /* Store it in the hash table. */
3017 *e = t;
3019 /* TYPENAME_TYPEs must always be compared structurally, because
3020 they may or may not resolve down to another type depending on
3021 the currently open classes. */
3022 SET_TYPE_STRUCTURAL_EQUALITY (t);
3025 return t;
3028 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3029 provided to name the type. Returns an appropriate type, unless an
3030 error occurs, in which case error_mark_node is returned. If we
3031 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3032 return that, rather than the _TYPE it corresponds to, in other
3033 cases we look through the type decl. If TF_ERROR is set, complain
3034 about errors, otherwise be quiet. */
3036 tree
3037 make_typename_type (tree context, tree name, enum tag_types tag_type,
3038 tsubst_flags_t complain)
3040 tree fullname;
3041 tree t;
3042 bool want_template;
3044 if (name == error_mark_node
3045 || context == NULL_TREE
3046 || context == error_mark_node)
3047 return error_mark_node;
3049 if (TYPE_P (name))
3051 if (!(TYPE_LANG_SPECIFIC (name)
3052 && (CLASSTYPE_IS_TEMPLATE (name)
3053 || CLASSTYPE_USE_TEMPLATE (name))))
3054 name = TYPE_IDENTIFIER (name);
3055 else
3056 /* Create a TEMPLATE_ID_EXPR for the type. */
3057 name = build_nt (TEMPLATE_ID_EXPR,
3058 CLASSTYPE_TI_TEMPLATE (name),
3059 CLASSTYPE_TI_ARGS (name));
3061 else if (TREE_CODE (name) == TYPE_DECL)
3062 name = DECL_NAME (name);
3064 fullname = name;
3066 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3068 name = TREE_OPERAND (name, 0);
3069 if (TREE_CODE (name) == TEMPLATE_DECL)
3070 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3071 else if (TREE_CODE (name) == OVERLOAD)
3073 error ("%qD is not a type", name);
3074 return error_mark_node;
3077 if (TREE_CODE (name) == TEMPLATE_DECL)
3079 error ("%qD used without template parameters", name);
3080 return error_mark_node;
3082 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3083 gcc_assert (TYPE_P (context));
3085 if (!MAYBE_CLASS_TYPE_P (context))
3087 if (complain & tf_error)
3088 error ("%q#T is not a class", context);
3089 return error_mark_node;
3092 /* When the CONTEXT is a dependent type, NAME could refer to a
3093 dependent base class of CONTEXT. But look inside it anyway
3094 if CONTEXT is a currently open scope, in case it refers to a
3095 member of the current instantiation or a non-dependent base;
3096 lookup will stop when we hit a dependent base. */
3097 if (!dependent_scope_p (context))
3098 /* We should only set WANT_TYPE when we're a nested typename type.
3099 Then we can give better diagnostics if we find a non-type. */
3100 t = lookup_field (context, name, 2, /*want_type=*/true);
3101 else
3102 t = NULL_TREE;
3104 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3105 return build_typename_type (context, name, fullname, tag_type);
3107 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3109 if (!t)
3111 if (complain & tf_error)
3112 error (want_template ? "no class template named %q#T in %q#T"
3113 : "no type named %q#T in %q#T", name, context);
3114 return error_mark_node;
3117 /* Pull out the template from an injected-class-name (or multiple). */
3118 if (want_template)
3119 t = maybe_get_template_decl_from_type_decl (t);
3121 if (TREE_CODE (t) == TREE_LIST)
3123 if (complain & tf_error)
3125 error ("lookup of %qT in %qT is ambiguous", name, context);
3126 print_candidates (t);
3128 return error_mark_node;
3131 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3133 if (complain & tf_error)
3134 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3135 context, name, t);
3136 return error_mark_node;
3138 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3140 if (complain & tf_error)
3141 error ("%<typename %T::%D%> names %q#T, which is not a type",
3142 context, name, t);
3143 return error_mark_node;
3146 if (complain & tf_error)
3147 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3149 /* If we are currently parsing a template and if T is a typedef accessed
3150 through CONTEXT then we need to remember and check access of T at
3151 template instantiation time. */
3152 add_typedef_to_current_template_for_access_check (t, context, input_location);
3154 if (want_template)
3155 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3156 NULL_TREE, context,
3157 /*entering_scope=*/0,
3158 tf_warning_or_error | tf_user);
3160 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3161 t = TREE_TYPE (t);
3163 return t;
3166 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3167 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3168 in which case error_mark_node is returned.
3170 If PARM_LIST is non-NULL, also make sure that the template parameter
3171 list of TEMPLATE_DECL matches.
3173 If COMPLAIN zero, don't complain about any errors that occur. */
3175 tree
3176 make_unbound_class_template (tree context, tree name, tree parm_list,
3177 tsubst_flags_t complain)
3179 tree t;
3180 tree d;
3182 if (TYPE_P (name))
3183 name = TYPE_IDENTIFIER (name);
3184 else if (DECL_P (name))
3185 name = DECL_NAME (name);
3186 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3188 if (!dependent_type_p (context)
3189 || currently_open_class (context))
3191 tree tmpl = NULL_TREE;
3193 if (MAYBE_CLASS_TYPE_P (context))
3194 tmpl = lookup_field (context, name, 0, false);
3196 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3198 if (complain & tf_error)
3199 error ("no class template named %q#T in %q#T", name, context);
3200 return error_mark_node;
3203 if (parm_list
3204 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3206 if (complain & tf_error)
3208 error ("template parameters do not match template");
3209 error ("%q+D declared here", tmpl);
3211 return error_mark_node;
3214 if (complain & tf_error)
3215 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3217 return tmpl;
3220 /* Build the UNBOUND_CLASS_TEMPLATE. */
3221 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3222 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3223 TREE_TYPE (t) = NULL_TREE;
3224 SET_TYPE_STRUCTURAL_EQUALITY (t);
3226 /* Build the corresponding TEMPLATE_DECL. */
3227 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3228 TYPE_NAME (TREE_TYPE (d)) = d;
3229 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3230 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3231 DECL_ARTIFICIAL (d) = 1;
3232 DECL_TEMPLATE_PARMS (d) = parm_list;
3234 return t;
3239 /* Push the declarations of builtin types into the namespace.
3240 RID_INDEX is the index of the builtin type in the array
3241 RID_POINTERS. NAME is the name used when looking up the builtin
3242 type. TYPE is the _TYPE node for the builtin type. */
3244 void
3245 record_builtin_type (enum rid rid_index,
3246 const char* name,
3247 tree type)
3249 tree rname = NULL_TREE, tname = NULL_TREE;
3250 tree tdecl = NULL_TREE;
3252 if ((int) rid_index < (int) RID_MAX)
3253 rname = ridpointers[(int) rid_index];
3254 if (name)
3255 tname = get_identifier (name);
3257 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3258 eliminated. Built-in types should not be looked up name; their
3259 names are keywords that the parser can recognize. However, there
3260 is code in c-common.c that uses identifier_global_value to look
3261 up built-in types by name. */
3262 if (tname)
3264 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3265 DECL_ARTIFICIAL (tdecl) = 1;
3266 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3268 if (rname)
3270 if (!tdecl)
3272 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3273 DECL_ARTIFICIAL (tdecl) = 1;
3275 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3278 if (!TYPE_NAME (type))
3279 TYPE_NAME (type) = tdecl;
3281 if (tdecl)
3282 debug_hooks->type_decl (tdecl, 0);
3285 /* Record one of the standard Java types.
3286 * Declare it as having the given NAME.
3287 * If SIZE > 0, it is the size of one of the integral types;
3288 * otherwise it is the negative of the size of one of the other types. */
3290 static tree
3291 record_builtin_java_type (const char* name, int size)
3293 tree type, decl;
3294 if (size > 0)
3295 type = build_nonstandard_integer_type (size, 0);
3296 else if (size > -32)
3298 tree stype;
3299 /* "__java_char" or ""__java_boolean". */
3300 type = build_nonstandard_integer_type (-size, 1);
3301 /* Get the signed type cached and attached to the unsigned type,
3302 so it doesn't get garbage-collected at "random" times,
3303 causing potential codegen differences out of different UIDs
3304 and different alias set numbers. */
3305 stype = build_nonstandard_integer_type (-size, 0);
3306 TREE_CHAIN (type) = stype;
3307 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3309 else
3310 { /* "__java_float" or ""__java_double". */
3311 type = make_node (REAL_TYPE);
3312 TYPE_PRECISION (type) = - size;
3313 layout_type (type);
3315 record_builtin_type (RID_MAX, name, type);
3316 decl = TYPE_NAME (type);
3318 /* Suppress generate debug symbol entries for these types,
3319 since for normal C++ they are just clutter.
3320 However, push_lang_context undoes this if extern "Java" is seen. */
3321 DECL_IGNORED_P (decl) = 1;
3323 TYPE_FOR_JAVA (type) = 1;
3324 return type;
3327 /* Push a type into the namespace so that the back ends ignore it. */
3329 static void
3330 record_unknown_type (tree type, const char* name)
3332 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3333 TYPE_DECL, get_identifier (name), type));
3334 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3335 DECL_IGNORED_P (decl) = 1;
3336 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3337 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3338 TYPE_ALIGN (type) = 1;
3339 TYPE_USER_ALIGN (type) = 0;
3340 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3343 /* A string for which we should create an IDENTIFIER_NODE at
3344 startup. */
3346 typedef struct predefined_identifier
3348 /* The name of the identifier. */
3349 const char *const name;
3350 /* The place where the IDENTIFIER_NODE should be stored. */
3351 tree *const node;
3352 /* Nonzero if this is the name of a constructor or destructor. */
3353 const int ctor_or_dtor_p;
3354 } predefined_identifier;
3356 /* Create all the predefined identifiers. */
3358 static void
3359 initialize_predefined_identifiers (void)
3361 const predefined_identifier *pid;
3363 /* A table of identifiers to create at startup. */
3364 static const predefined_identifier predefined_identifiers[] = {
3365 { "C++", &lang_name_cplusplus, 0 },
3366 { "C", &lang_name_c, 0 },
3367 { "Java", &lang_name_java, 0 },
3368 /* Some of these names have a trailing space so that it is
3369 impossible for them to conflict with names written by users. */
3370 { "__ct ", &ctor_identifier, 1 },
3371 { "__base_ctor ", &base_ctor_identifier, 1 },
3372 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3373 { "__dt ", &dtor_identifier, 1 },
3374 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3375 { "__base_dtor ", &base_dtor_identifier, 1 },
3376 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3377 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3378 { "nelts", &nelts_identifier, 0 },
3379 { THIS_NAME, &this_identifier, 0 },
3380 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3381 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3382 { "_vptr", &vptr_identifier, 0 },
3383 { "__vtt_parm", &vtt_parm_identifier, 0 },
3384 { "::", &global_scope_name, 0 },
3385 { "std", &std_identifier, 0 },
3386 { NULL, NULL, 0 }
3389 for (pid = predefined_identifiers; pid->name; ++pid)
3391 *pid->node = get_identifier (pid->name);
3392 if (pid->ctor_or_dtor_p)
3393 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3397 /* Create the predefined scalar types of C,
3398 and some nodes representing standard constants (0, 1, (void *)0).
3399 Initialize the global binding level.
3400 Make definitions for built-in primitive functions. */
3402 void
3403 cxx_init_decl_processing (void)
3405 tree void_ftype;
3406 tree void_ftype_ptr;
3408 build_common_tree_nodes (flag_signed_char);
3410 /* Create all the identifiers we need. */
3411 initialize_predefined_identifiers ();
3413 /* Create the global variables. */
3414 push_to_top_level ();
3416 current_function_decl = NULL_TREE;
3417 current_binding_level = NULL;
3418 /* Enter the global namespace. */
3419 gcc_assert (global_namespace == NULL_TREE);
3420 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3421 void_type_node);
3422 TREE_PUBLIC (global_namespace) = 1;
3423 begin_scope (sk_namespace, global_namespace);
3425 current_lang_name = NULL_TREE;
3427 if (flag_visibility_ms_compat)
3428 default_visibility = VISIBILITY_HIDDEN;
3430 /* Initially, C. */
3431 current_lang_name = lang_name_c;
3433 /* Create the `std' namespace. */
3434 push_namespace (std_identifier);
3435 std_node = current_namespace;
3436 pop_namespace ();
3438 c_common_nodes_and_builtins ();
3440 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3441 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3442 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3443 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3444 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3445 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3446 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3447 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3449 integer_two_node = build_int_cst (NULL_TREE, 2);
3450 integer_three_node = build_int_cst (NULL_TREE, 3);
3452 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3453 truthvalue_type_node = boolean_type_node;
3454 truthvalue_false_node = boolean_false_node;
3455 truthvalue_true_node = boolean_true_node;
3457 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3459 #if 0
3460 record_builtin_type (RID_MAX, NULL, string_type_node);
3461 #endif
3463 delta_type_node = ptrdiff_type_node;
3464 vtable_index_type = ptrdiff_type_node;
3466 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3467 void_ftype = build_function_type (void_type_node, void_list_node);
3468 void_ftype_ptr = build_function_type (void_type_node,
3469 tree_cons (NULL_TREE,
3470 ptr_type_node,
3471 void_list_node));
3472 void_ftype_ptr
3473 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3475 /* C++ extensions */
3477 unknown_type_node = make_node (UNKNOWN_TYPE);
3478 record_unknown_type (unknown_type_node, "unknown type");
3480 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3481 TREE_TYPE (unknown_type_node) = unknown_type_node;
3483 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3484 result. */
3485 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3486 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3488 init_list_type_node = make_node (UNKNOWN_TYPE);
3489 record_unknown_type (init_list_type_node, "init list");
3492 /* Make sure we get a unique function type, so we can give
3493 its pointer type a name. (This wins for gdb.) */
3494 tree vfunc_type = make_node (FUNCTION_TYPE);
3495 TREE_TYPE (vfunc_type) = integer_type_node;
3496 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3497 layout_type (vfunc_type);
3499 vtable_entry_type = build_pointer_type (vfunc_type);
3501 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3503 vtbl_type_node
3504 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3505 layout_type (vtbl_type_node);
3506 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3507 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3508 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3509 layout_type (vtbl_ptr_type_node);
3510 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3512 push_namespace (get_identifier ("__cxxabiv1"));
3513 abi_node = current_namespace;
3514 pop_namespace ();
3516 global_type_node = make_node (LANG_TYPE);
3517 record_unknown_type (global_type_node, "global type");
3519 /* Now, C++. */
3520 current_lang_name = lang_name_cplusplus;
3523 tree bad_alloc_id;
3524 tree bad_alloc_type_node;
3525 tree bad_alloc_decl;
3526 tree newtype, deltype;
3527 tree ptr_ftype_sizetype;
3529 push_namespace (std_identifier);
3530 bad_alloc_id = get_identifier ("bad_alloc");
3531 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3532 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3533 bad_alloc_decl
3534 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3535 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3536 pop_namespace ();
3538 ptr_ftype_sizetype
3539 = build_function_type (ptr_type_node,
3540 tree_cons (NULL_TREE,
3541 size_type_node,
3542 void_list_node));
3543 newtype = build_exception_variant
3544 (ptr_ftype_sizetype, add_exception_specifier
3545 (NULL_TREE, bad_alloc_type_node, -1));
3546 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3547 push_cp_library_fn (NEW_EXPR, newtype);
3548 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3549 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3550 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3553 tree nullptr_type_node = make_node (NULLPTR_TYPE);
3554 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3555 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3556 TYPE_UNSIGNED (nullptr_type_node) = 1;
3557 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3558 SET_TYPE_MODE (nullptr_type_node, Pmode);
3559 nullptr_node = make_node (INTEGER_CST);
3560 TREE_TYPE (nullptr_node) = nullptr_type_node;
3564 abort_fndecl
3565 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3567 /* Perform other language dependent initializations. */
3568 init_class_processing ();
3569 init_rtti_processing ();
3570 init_template_processing ();
3572 if (flag_exceptions)
3573 init_exception_processing ();
3575 if (! supports_one_only ())
3576 flag_weak = 0;
3578 make_fname_decl = cp_make_fname_decl;
3579 start_fname_decls ();
3581 /* Show we use EH for cleanups. */
3582 if (flag_exceptions)
3583 using_eh_for_cleanups ();
3586 /* Generate an initializer for a function naming variable from
3587 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3588 filled in with the type of the init. */
3590 tree
3591 cp_fname_init (const char* name, tree *type_p)
3593 tree domain = NULL_TREE;
3594 tree type;
3595 tree init = NULL_TREE;
3596 size_t length = 0;
3598 if (name)
3600 length = strlen (name);
3601 domain = build_index_type (size_int (length));
3602 init = build_string (length + 1, name);
3605 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3606 type = build_cplus_array_type (type, domain);
3608 *type_p = type;
3610 if (init)
3611 TREE_TYPE (init) = type;
3612 else
3613 init = error_mark_node;
3615 return init;
3618 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3619 the decl, LOC is the location to give the decl, NAME is the
3620 initialization string and TYPE_DEP indicates whether NAME depended
3621 on the type of the function. We make use of that to detect
3622 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3623 at the point of first use, so we mustn't push the decl now. */
3625 static tree
3626 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3628 const char *const name = (type_dep && processing_template_decl
3629 ? NULL : fname_as_string (type_dep));
3630 tree type;
3631 tree init = cp_fname_init (name, &type);
3632 tree decl = build_decl (loc, VAR_DECL, id, type);
3634 if (name)
3635 free (CONST_CAST (char *, name));
3637 /* As we're using pushdecl_with_scope, we must set the context. */
3638 DECL_CONTEXT (decl) = current_function_decl;
3639 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3641 TREE_STATIC (decl) = 1;
3642 TREE_READONLY (decl) = 1;
3643 DECL_ARTIFICIAL (decl) = 1;
3645 TREE_USED (decl) = 1;
3647 if (current_function_decl)
3649 struct cp_binding_level *b = current_binding_level;
3650 while (b->level_chain->kind != sk_function_parms)
3651 b = b->level_chain;
3652 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3653 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3654 LOOKUP_ONLYCONVERTING);
3656 else
3657 pushdecl_top_level_and_finish (decl, init);
3659 return decl;
3662 static tree
3663 builtin_function_1 (tree decl, tree context, bool is_global)
3665 tree id = DECL_NAME (decl);
3666 const char *name = IDENTIFIER_POINTER (id);
3668 retrofit_lang_decl (decl);
3670 DECL_ARTIFICIAL (decl) = 1;
3671 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3672 SET_DECL_LANGUAGE (decl, lang_c);
3673 /* Runtime library routines are, by definition, available in an
3674 external shared object. */
3675 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3676 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3678 DECL_CONTEXT (decl) = context;
3680 if (is_global)
3681 pushdecl_top_level (decl);
3682 else
3683 pushdecl (decl);
3685 /* A function in the user's namespace should have an explicit
3686 declaration before it is used. Mark the built-in function as
3687 anticipated but not actually declared. */
3688 if (name[0] != '_' || name[1] != '_')
3689 DECL_ANTICIPATED (decl) = 1;
3690 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3692 size_t len = strlen (name);
3694 /* Treat __*_chk fortification functions as anticipated as well,
3695 unless they are __builtin_*. */
3696 if (len > strlen ("___chk")
3697 && memcmp (name + len - strlen ("_chk"),
3698 "_chk", strlen ("_chk") + 1) == 0)
3699 DECL_ANTICIPATED (decl) = 1;
3702 return decl;
3705 tree
3706 cxx_builtin_function (tree decl)
3708 tree id = DECL_NAME (decl);
3709 const char *name = IDENTIFIER_POINTER (id);
3710 /* All builtins that don't begin with an '_' should additionally
3711 go in the 'std' namespace. */
3712 if (name[0] != '_')
3714 tree decl2 = copy_node(decl);
3715 push_namespace (std_identifier);
3716 builtin_function_1 (decl2, std_node, false);
3717 pop_namespace ();
3720 return builtin_function_1 (decl, NULL_TREE, false);
3723 /* Like cxx_builtin_function, but guarantee the function is added to the global
3724 scope. This is to allow function specific options to add new machine
3725 dependent builtins when the target ISA changes via attribute((target(...)))
3726 which saves space on program startup if the program does not use non-generic
3727 ISAs. */
3729 tree
3730 cxx_builtin_function_ext_scope (tree decl)
3733 tree id = DECL_NAME (decl);
3734 const char *name = IDENTIFIER_POINTER (id);
3735 /* All builtins that don't begin with an '_' should additionally
3736 go in the 'std' namespace. */
3737 if (name[0] != '_')
3739 tree decl2 = copy_node(decl);
3740 push_namespace (std_identifier);
3741 builtin_function_1 (decl2, std_node, true);
3742 pop_namespace ();
3745 return builtin_function_1 (decl, NULL_TREE, true);
3748 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3749 function. Not called directly. */
3751 static tree
3752 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3754 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3755 DECL_EXTERNAL (fn) = 1;
3756 TREE_PUBLIC (fn) = 1;
3757 DECL_ARTIFICIAL (fn) = 1;
3758 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3759 SET_DECL_LANGUAGE (fn, lang_c);
3760 /* Runtime library routines are, by definition, available in an
3761 external shared object. */
3762 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3763 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3764 return fn;
3767 /* Returns the _DECL for a library function with C linkage.
3768 We assume that such functions never throw; if this is incorrect,
3769 callers should unset TREE_NOTHROW. */
3771 static tree
3772 build_library_fn (tree name, tree type)
3774 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3775 TREE_NOTHROW (fn) = 1;
3776 return fn;
3779 /* Returns the _DECL for a library function with C++ linkage. */
3781 static tree
3782 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3784 tree fn = build_library_fn_1 (name, operator_code, type);
3785 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3786 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3787 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3788 return fn;
3791 /* Like build_library_fn, but takes a C string instead of an
3792 IDENTIFIER_NODE. */
3794 tree
3795 build_library_fn_ptr (const char* name, tree type)
3797 return build_library_fn (get_identifier (name), type);
3800 /* Like build_cp_library_fn, but takes a C string instead of an
3801 IDENTIFIER_NODE. */
3803 tree
3804 build_cp_library_fn_ptr (const char* name, tree type)
3806 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3809 /* Like build_library_fn, but also pushes the function so that we will
3810 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3811 may throw exceptions listed in RAISES. */
3813 tree
3814 push_library_fn (tree name, tree type, tree raises)
3816 tree fn;
3818 if (raises)
3819 type = build_exception_variant (type, raises);
3821 fn = build_library_fn (name, type);
3822 pushdecl_top_level (fn);
3823 return fn;
3826 /* Like build_cp_library_fn, but also pushes the function so that it
3827 will be found by normal lookup. */
3829 static tree
3830 push_cp_library_fn (enum tree_code operator_code, tree type)
3832 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3833 operator_code,
3834 type);
3835 pushdecl (fn);
3836 return fn;
3839 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3840 a FUNCTION_TYPE. */
3842 tree
3843 push_void_library_fn (tree name, tree parmtypes)
3845 tree type = build_function_type (void_type_node, parmtypes);
3846 return push_library_fn (name, type, NULL_TREE);
3849 /* Like push_library_fn, but also note that this function throws
3850 and does not return. Used for __throw_foo and the like. */
3852 tree
3853 push_throw_library_fn (tree name, tree type)
3855 tree fn = push_library_fn (name, type, NULL_TREE);
3856 TREE_THIS_VOLATILE (fn) = 1;
3857 TREE_NOTHROW (fn) = 0;
3858 return fn;
3861 /* When we call finish_struct for an anonymous union, we create
3862 default copy constructors and such. But, an anonymous union
3863 shouldn't have such things; this function undoes the damage to the
3864 anonymous union type T.
3866 (The reason that we create the synthesized methods is that we don't
3867 distinguish `union { int i; }' from `typedef union { int i; } U'.
3868 The first is an anonymous union; the second is just an ordinary
3869 union type.) */
3871 void
3872 fixup_anonymous_aggr (tree t)
3874 tree *q;
3876 /* Wipe out memory of synthesized methods. */
3877 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3878 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3879 TYPE_HAS_INIT_REF (t) = 0;
3880 TYPE_HAS_CONST_INIT_REF (t) = 0;
3881 TYPE_HAS_ASSIGN_REF (t) = 0;
3882 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3884 /* Splice the implicitly generated functions out of the TYPE_METHODS
3885 list. */
3886 q = &TYPE_METHODS (t);
3887 while (*q)
3889 if (DECL_ARTIFICIAL (*q))
3890 *q = TREE_CHAIN (*q);
3891 else
3892 q = &TREE_CHAIN (*q);
3895 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3896 if (TYPE_METHODS (t))
3898 tree decl = TYPE_MAIN_DECL (t);
3900 if (TREE_CODE (t) != UNION_TYPE)
3901 error_at (DECL_SOURCE_LOCATION (decl),
3902 "an anonymous struct cannot have function members");
3903 else
3904 error_at (DECL_SOURCE_LOCATION (decl),
3905 "an anonymous union cannot have function members");
3908 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3909 assignment operators (because they cannot have these methods themselves).
3910 For anonymous unions this is already checked because they are not allowed
3911 in any union, otherwise we have to check it. */
3912 if (TREE_CODE (t) != UNION_TYPE)
3914 tree field, type;
3916 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3917 if (TREE_CODE (field) == FIELD_DECL)
3919 type = TREE_TYPE (field);
3920 if (CLASS_TYPE_P (type))
3922 if (TYPE_NEEDS_CONSTRUCTING (type))
3923 error ("member %q+#D with constructor not allowed "
3924 "in anonymous aggregate", field);
3925 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3926 error ("member %q+#D with destructor not allowed "
3927 "in anonymous aggregate", field);
3928 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3929 error ("member %q+#D with copy assignment operator "
3930 "not allowed in anonymous aggregate", field);
3936 /* Make sure that a declaration with no declarator is well-formed, i.e.
3937 just declares a tagged type or anonymous union.
3939 Returns the type declared; or NULL_TREE if none. */
3941 tree
3942 check_tag_decl (cp_decl_specifier_seq *declspecs)
3944 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3945 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3946 /* If a class, struct, or enum type is declared by the DECLSPECS
3947 (i.e, if a class-specifier, enum-specifier, or non-typename
3948 elaborated-type-specifier appears in the DECLSPECS),
3949 DECLARED_TYPE is set to the corresponding type. */
3950 tree declared_type = NULL_TREE;
3951 bool error_p = false;
3953 if (declspecs->multiple_types_p)
3954 error ("multiple types in one declaration");
3955 else if (declspecs->redefined_builtin_type)
3957 if (!in_system_header)
3958 permerror (input_location, "redeclaration of C++ built-in type %qT",
3959 declspecs->redefined_builtin_type);
3960 return NULL_TREE;
3963 if (declspecs->type
3964 && TYPE_P (declspecs->type)
3965 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3966 && MAYBE_CLASS_TYPE_P (declspecs->type))
3967 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3968 declared_type = declspecs->type;
3969 else if (declspecs->type == error_mark_node)
3970 error_p = true;
3971 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3972 permerror (input_location, "declaration does not declare anything");
3973 /* Check for an anonymous union. */
3974 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3975 && TYPE_ANONYMOUS_P (declared_type))
3977 /* 7/3 In a simple-declaration, the optional init-declarator-list
3978 can be omitted only when declaring a class (clause 9) or
3979 enumeration (7.2), that is, when the decl-specifier-seq contains
3980 either a class-specifier, an elaborated-type-specifier with
3981 a class-key (9.1), or an enum-specifier. In these cases and
3982 whenever a class-specifier or enum-specifier is present in the
3983 decl-specifier-seq, the identifiers in these specifiers are among
3984 the names being declared by the declaration (as class-name,
3985 enum-names, or enumerators, depending on the syntax). In such
3986 cases, and except for the declaration of an unnamed bit-field (9.6),
3987 the decl-specifier-seq shall introduce one or more names into the
3988 program, or shall redeclare a name introduced by a previous
3989 declaration. [Example:
3990 enum { }; // ill-formed
3991 typedef class { }; // ill-formed
3992 --end example] */
3993 if (saw_typedef)
3995 error ("missing type-name in typedef-declaration");
3996 return NULL_TREE;
3998 /* Anonymous unions are objects, so they can have specifiers. */;
3999 SET_ANON_AGGR_TYPE_P (declared_type);
4001 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4002 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4005 else
4007 if (declspecs->specs[(int)ds_inline]
4008 || declspecs->specs[(int)ds_virtual])
4009 error ("%qs can only be specified for functions",
4010 declspecs->specs[(int)ds_inline]
4011 ? "inline" : "virtual");
4012 else if (saw_friend
4013 && (!current_class_type
4014 || current_scope () != current_class_type))
4015 error ("%<friend%> can only be specified inside a class");
4016 else if (declspecs->specs[(int)ds_explicit])
4017 error ("%<explicit%> can only be specified for constructors");
4018 else if (declspecs->storage_class)
4019 error ("a storage class can only be specified for objects "
4020 "and functions");
4021 else if (declspecs->specs[(int)ds_const]
4022 || declspecs->specs[(int)ds_volatile]
4023 || declspecs->specs[(int)ds_restrict]
4024 || declspecs->specs[(int)ds_thread])
4025 error ("qualifiers can only be specified for objects "
4026 "and functions");
4027 else if (saw_typedef)
4028 warning (0, "%<typedef%> was ignored in this declaration");
4029 else if (declspecs->specs[(int) ds_constexpr])
4030 error ("%<constexpr> cannot be used for type declarations");
4033 return declared_type;
4036 /* Called when a declaration is seen that contains no names to declare.
4037 If its type is a reference to a structure, union or enum inherited
4038 from a containing scope, shadow that tag name for the current scope
4039 with a forward reference.
4040 If its type defines a new named structure or union
4041 or defines an enum, it is valid but we need not do anything here.
4042 Otherwise, it is an error.
4044 C++: may have to grok the declspecs to learn about static,
4045 complain for anonymous unions.
4047 Returns the TYPE declared -- or NULL_TREE if none. */
4049 tree
4050 shadow_tag (cp_decl_specifier_seq *declspecs)
4052 tree t = check_tag_decl (declspecs);
4054 if (!t)
4055 return NULL_TREE;
4057 if (declspecs->attributes)
4059 warning (0, "attribute ignored in declaration of %q+#T", t);
4060 warning (0, "attribute for %q+#T must follow the %qs keyword",
4061 t, class_key_or_enum_as_string (t));
4065 if (maybe_process_partial_specialization (t) == error_mark_node)
4066 return NULL_TREE;
4068 /* This is where the variables in an anonymous union are
4069 declared. An anonymous union declaration looks like:
4070 union { ... } ;
4071 because there is no declarator after the union, the parser
4072 sends that declaration here. */
4073 if (ANON_AGGR_TYPE_P (t))
4075 fixup_anonymous_aggr (t);
4077 if (TYPE_FIELDS (t))
4079 tree decl = grokdeclarator (/*declarator=*/NULL,
4080 declspecs, NORMAL, 0, NULL);
4081 finish_anon_union (decl);
4085 return t;
4088 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4090 tree
4091 groktypename (cp_decl_specifier_seq *type_specifiers,
4092 const cp_declarator *declarator,
4093 bool is_template_arg)
4095 tree attrs;
4096 tree type;
4097 enum decl_context context
4098 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4099 attrs = type_specifiers->attributes;
4100 type_specifiers->attributes = NULL_TREE;
4101 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4102 if (attrs && type != error_mark_node)
4104 if (CLASS_TYPE_P (type))
4105 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4106 "outside of definition", type);
4107 else if (MAYBE_CLASS_TYPE_P (type))
4108 /* A template type parameter or other dependent type. */
4109 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4110 "type %qT without an associated declaration", type);
4111 else
4112 cplus_decl_attributes (&type, attrs, 0);
4114 return type;
4117 /* Process a DECLARATOR for a function-scope variable declaration,
4118 namespace-scope variable declaration, or function declaration.
4119 (Function definitions go through start_function; class member
4120 declarations appearing in the body of the class go through
4121 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4122 If an error occurs, the error_mark_node is returned instead.
4124 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4125 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4126 for an explicitly defaulted function, or SD_DELETED for an explicitly
4127 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4128 implicitly initialized via a default constructor. ATTRIBUTES and
4129 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4130 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4131 set, the caller is responsible for calling pop_scope. */
4133 tree
4134 start_decl (const cp_declarator *declarator,
4135 cp_decl_specifier_seq *declspecs,
4136 int initialized,
4137 tree attributes,
4138 tree prefix_attributes,
4139 tree *pushed_scope_p)
4141 tree decl;
4142 tree context;
4143 bool was_public;
4144 int flags;
4146 *pushed_scope_p = NULL_TREE;
4148 /* An object declared as __attribute__((deprecated)) suppresses
4149 warnings of uses of other deprecated items. */
4150 if (lookup_attribute ("deprecated", attributes))
4151 deprecated_state = DEPRECATED_SUPPRESS;
4153 attributes = chainon (attributes, prefix_attributes);
4155 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4156 &attributes);
4158 deprecated_state = DEPRECATED_NORMAL;
4160 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4161 || decl == error_mark_node)
4162 return error_mark_node;
4164 context = DECL_CONTEXT (decl);
4166 if (context)
4168 *pushed_scope_p = push_scope (context);
4170 /* We are only interested in class contexts, later. */
4171 if (TREE_CODE (context) == NAMESPACE_DECL)
4172 context = NULL_TREE;
4175 if (initialized)
4176 /* Is it valid for this decl to have an initializer at all?
4177 If not, set INITIALIZED to zero, which will indirectly
4178 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4179 switch (TREE_CODE (decl))
4181 case TYPE_DECL:
4182 error ("typedef %qD is initialized (use decltype instead)", decl);
4183 return error_mark_node;
4185 case FUNCTION_DECL:
4186 if (initialized == SD_DELETED)
4187 /* We'll handle the rest of the semantics later, but we need to
4188 set this now so it's visible to duplicate_decls. */
4189 DECL_DELETED_FN (decl) = 1;
4190 break;
4192 default:
4193 break;
4196 if (initialized)
4198 if (! toplevel_bindings_p ()
4199 && DECL_EXTERNAL (decl))
4200 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4201 decl);
4202 DECL_EXTERNAL (decl) = 0;
4203 if (toplevel_bindings_p ())
4204 TREE_STATIC (decl) = 1;
4207 /* If this is a typedef that names the class for linkage purposes
4208 (7.1.3p8), apply any attributes directly to the type. */
4209 if (TREE_CODE (decl) == TYPE_DECL
4210 && TAGGED_TYPE_P (TREE_TYPE (decl))
4211 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4212 flags = ATTR_FLAG_TYPE_IN_PLACE;
4213 else
4214 flags = 0;
4216 /* Set attributes here so if duplicate decl, will have proper attributes. */
4217 cplus_decl_attributes (&decl, attributes, flags);
4219 /* Dllimported symbols cannot be defined. Static data members (which
4220 can be initialized in-class and dllimported) go through grokfield,
4221 not here, so we don't need to exclude those decls when checking for
4222 a definition. */
4223 if (initialized && DECL_DLLIMPORT_P (decl))
4225 error ("definition of %q#D is marked %<dllimport%>", decl);
4226 DECL_DLLIMPORT_P (decl) = 0;
4229 /* If #pragma weak was used, mark the decl weak now. */
4230 maybe_apply_pragma_weak (decl);
4232 if (TREE_CODE (decl) == FUNCTION_DECL
4233 && DECL_DECLARED_INLINE_P (decl)
4234 && DECL_UNINLINABLE (decl)
4235 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4236 warning (0, "inline function %q+D given attribute noinline", decl);
4238 if (context && COMPLETE_TYPE_P (complete_type (context)))
4240 if (TREE_CODE (decl) == VAR_DECL)
4242 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4243 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4244 error ("%q#D is not a static member of %q#T", decl, context);
4245 else
4247 if (DECL_CONTEXT (field) != context)
4249 if (!same_type_p (DECL_CONTEXT (field), context))
4250 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4251 "to be defined as %<%T::%D%>",
4252 DECL_CONTEXT (field), DECL_NAME (decl),
4253 context, DECL_NAME (decl));
4254 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4256 if (processing_specialization
4257 && template_class_depth (context) == 0
4258 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4259 error ("template header not allowed in member definition "
4260 "of explicitly specialized class");
4261 /* Static data member are tricky; an in-class initialization
4262 still doesn't provide a definition, so the in-class
4263 declaration will have DECL_EXTERNAL set, but will have an
4264 initialization. Thus, duplicate_decls won't warn
4265 about this situation, and so we check here. */
4266 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4267 error ("duplicate initialization of %qD", decl);
4268 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4269 decl = field;
4270 if (declspecs->specs[(int) ds_constexpr]
4271 && !DECL_DECLARED_CONSTEXPR_P (field))
4272 error ("%qD declared %<constexpr%> outside its class", field);
4275 else
4277 tree field = check_classfn (context, decl,
4278 (processing_template_decl
4279 > template_class_depth (context))
4280 ? current_template_parms
4281 : NULL_TREE);
4282 if (field && field != error_mark_node
4283 && duplicate_decls (decl, field,
4284 /*newdecl_is_friend=*/false))
4285 decl = field;
4288 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4289 DECL_IN_AGGR_P (decl) = 0;
4290 /* Do not mark DECL as an explicit specialization if it was not
4291 already marked as an instantiation; a declaration should
4292 never be marked as a specialization unless we know what
4293 template is being specialized. */
4294 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4296 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4298 /* [temp.expl.spec] An explicit specialization of a static data
4299 member of a template is a definition if the declaration
4300 includes an initializer; otherwise, it is a declaration.
4302 We check for processing_specialization so this only applies
4303 to the new specialization syntax. */
4304 if (!initialized && processing_specialization)
4305 DECL_EXTERNAL (decl) = 1;
4308 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
4309 permerror (input_location, "declaration of %q#D outside of class is not definition",
4310 decl);
4312 if (!ensure_literal_type_for_constexpr_object (decl))
4313 return error_mark_node;
4316 was_public = TREE_PUBLIC (decl);
4318 /* Enter this declaration into the symbol table. */
4319 decl = maybe_push_decl (decl);
4321 if (processing_template_decl)
4322 decl = push_template_decl (decl);
4323 if (decl == error_mark_node)
4324 return error_mark_node;
4326 /* Tell the back end to use or not use .common as appropriate. If we say
4327 -fconserve-space, we want this to save .data space, at the expense of
4328 wrong semantics. If we say -fno-conserve-space, we want this to
4329 produce errors about redefs; to do this we force variables into the
4330 data segment. */
4331 if (flag_conserve_space
4332 && TREE_CODE (decl) == VAR_DECL
4333 && TREE_PUBLIC (decl)
4334 && !DECL_THREAD_LOCAL_P (decl)
4335 && !have_global_bss_p ())
4336 DECL_COMMON (decl) = 1;
4338 if (TREE_CODE (decl) == VAR_DECL
4339 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4340 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4342 /* This is a const variable with implicit 'static'. Set
4343 DECL_THIS_STATIC so we can tell it from variables that are
4344 !TREE_PUBLIC because of the anonymous namespace. */
4345 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4346 DECL_THIS_STATIC (decl) = 1;
4349 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4350 start_decl_1 (decl, initialized);
4352 return decl;
4355 /* Process the declaration of a variable DECL. INITIALIZED is true
4356 iff DECL is explicitly initialized. (INITIALIZED is false if the
4357 variable is initialized via an implicitly-called constructor.)
4358 This function must be called for ordinary variables (including, for
4359 example, implicit instantiations of templates), but must not be
4360 called for template declarations. */
4362 void
4363 start_decl_1 (tree decl, bool initialized)
4365 tree type;
4366 bool complete_p;
4367 bool aggregate_definition_p;
4369 gcc_assert (!processing_template_decl);
4371 if (error_operand_p (decl))
4372 return;
4374 gcc_assert (TREE_CODE (decl) == VAR_DECL);
4376 type = TREE_TYPE (decl);
4377 complete_p = COMPLETE_TYPE_P (type);
4378 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4380 /* If an explicit initializer is present, or if this is a definition
4381 of an aggregate, then we need a complete type at this point.
4382 (Scalars are always complete types, so there is nothing to
4383 check.) This code just sets COMPLETE_P; errors (if necessary)
4384 are issued below. */
4385 if ((initialized || aggregate_definition_p)
4386 && !complete_p
4387 && COMPLETE_TYPE_P (complete_type (type)))
4389 complete_p = true;
4390 /* We will not yet have set TREE_READONLY on DECL if the type
4391 was "const", but incomplete, before this point. But, now, we
4392 have a complete type, so we can try again. */
4393 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4396 if (initialized)
4397 /* Is it valid for this decl to have an initializer at all? */
4399 /* Don't allow initializations for incomplete types except for
4400 arrays which might be completed by the initialization. */
4401 if (complete_p)
4402 ; /* A complete type is ok. */
4403 else if (type_uses_auto (type))
4404 ; /* An auto type is ok. */
4405 else if (TREE_CODE (type) != ARRAY_TYPE)
4407 error ("variable %q#D has initializer but incomplete type", decl);
4408 type = TREE_TYPE (decl) = error_mark_node;
4410 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4412 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4413 error ("elements of array %q#D have incomplete type", decl);
4414 /* else we already gave an error in start_decl. */
4417 else if (aggregate_definition_p && !complete_p)
4419 if (type_uses_auto (type))
4420 error ("declaration of %q#D has no initializer", decl);
4421 else
4422 error ("aggregate %q#D has incomplete type and cannot be defined",
4423 decl);
4424 /* Change the type so that assemble_variable will give
4425 DECL an rtl we can live with: (mem (const_int 0)). */
4426 type = TREE_TYPE (decl) = error_mark_node;
4429 /* Create a new scope to hold this declaration if necessary.
4430 Whether or not a new scope is necessary cannot be determined
4431 until after the type has been completed; if the type is a
4432 specialization of a class template it is not until after
4433 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4434 will be set correctly. */
4435 maybe_push_cleanup_level (type);
4438 /* Handle initialization of references. DECL, TYPE, and INIT have the
4439 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4440 but will be set to a new CLEANUP_STMT if a temporary is created
4441 that must be destroyed subsequently.
4443 Returns an initializer expression to use to initialize DECL, or
4444 NULL if the initialization can be performed statically.
4446 Quotes on semantics can be found in ARM 8.4.3. */
4448 static tree
4449 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4451 tree tmp;
4453 if (init == NULL_TREE)
4455 if ((DECL_LANG_SPECIFIC (decl) == 0
4456 || DECL_IN_AGGR_P (decl) == 0)
4457 && ! DECL_THIS_EXTERN (decl))
4458 error ("%qD declared as reference but not initialized", decl);
4459 return NULL_TREE;
4462 if (TREE_CODE (init) == TREE_LIST)
4463 init = build_x_compound_expr_from_list (init, "initializer");
4465 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4466 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4467 /* Note: default conversion is only called in very special cases. */
4468 init = decay_conversion (init);
4470 /* Convert INIT to the reference type TYPE. This may involve the
4471 creation of a temporary, whose lifetime must be the same as that
4472 of the reference. If so, a DECL_EXPR for the temporary will be
4473 added just after the DECL_EXPR for DECL. That's why we don't set
4474 DECL_INITIAL for local references (instead assigning to them
4475 explicitly); we need to allow the temporary to be initialized
4476 first. */
4477 tmp = initialize_reference (type, init, decl, cleanup, tf_warning_or_error);
4479 if (tmp == error_mark_node)
4480 return NULL_TREE;
4481 else if (tmp == NULL_TREE)
4483 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4484 return NULL_TREE;
4487 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4488 return tmp;
4490 DECL_INITIAL (decl) = tmp;
4492 return NULL_TREE;
4495 /* Subroutine of check_initializer. We're initializing a DECL of
4496 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4497 extend the lifetime of the underlying array to match that of the decl,
4498 just like for reference initialization. CLEANUP is as for
4499 grok_reference_init. */
4501 static tree
4502 build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4504 tree aggr_init, array, arrtype;
4505 init = perform_implicit_conversion (type, init, tf_warning_or_error);
4506 if (error_operand_p (init))
4507 return error_mark_node;
4509 aggr_init = TARGET_EXPR_INITIAL (init);
4510 init = build2 (INIT_EXPR, type, decl, init);
4512 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4513 arrtype = TREE_TYPE (array);
4514 STRIP_NOPS (array);
4515 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4516 array = TREE_OPERAND (array, 0);
4517 /* If the array is constant, finish_compound_literal already made it a
4518 static variable and we don't need to do anything here. */
4519 if (decl && TREE_CODE (array) == TARGET_EXPR)
4521 tree subinit;
4522 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4523 var = build_address (var);
4524 var = convert (arrtype, var);
4525 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4526 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4528 return init;
4531 /* Designated initializers in arrays are not supported in GNU C++.
4532 The parser cannot detect this error since it does not know whether
4533 a given brace-enclosed initializer is for a class type or for an
4534 array. This function checks that CE does not use a designated
4535 initializer. If it does, an error is issued. Returns true if CE
4536 is valid, i.e., does not have a designated initializer. */
4538 static bool
4539 check_array_designated_initializer (const constructor_elt *ce)
4541 /* Designated initializers for array elements are not supported. */
4542 if (ce->index)
4544 /* The parser only allows identifiers as designated
4545 initializers. */
4546 if (ce->index == error_mark_node)
4547 error ("name used in a GNU-style designated "
4548 "initializer for an array");
4549 else
4551 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4552 error ("name %qD used in a GNU-style designated "
4553 "initializer for an array", ce->index);
4555 return false;
4558 return true;
4561 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4562 array until we finish parsing the initializer. If that's the
4563 situation we're in, update DECL accordingly. */
4565 static void
4566 maybe_deduce_size_from_array_init (tree decl, tree init)
4568 tree type = TREE_TYPE (decl);
4570 if (TREE_CODE (type) == ARRAY_TYPE
4571 && TYPE_DOMAIN (type) == NULL_TREE
4572 && TREE_CODE (decl) != TYPE_DECL)
4574 /* do_default is really a C-ism to deal with tentative definitions.
4575 But let's leave it here to ease the eventual merge. */
4576 int do_default = !DECL_EXTERNAL (decl);
4577 tree initializer = init ? init : DECL_INITIAL (decl);
4578 int failure = 0;
4580 /* Check that there are no designated initializers in INIT, as
4581 those are not supported in GNU C++, and as the middle-end
4582 will crash if presented with a non-numeric designated
4583 initializer. */
4584 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4586 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4587 constructor_elt *ce;
4588 HOST_WIDE_INT i;
4589 for (i = 0;
4590 VEC_iterate (constructor_elt, v, i, ce);
4591 ++i)
4592 if (!check_array_designated_initializer (ce))
4593 failure = 1;
4596 if (!failure)
4598 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4599 do_default);
4600 if (failure == 1)
4602 error ("initializer fails to determine size of %qD", decl);
4603 TREE_TYPE (decl) = error_mark_node;
4605 else if (failure == 2)
4607 if (do_default)
4609 error ("array size missing in %qD", decl);
4610 TREE_TYPE (decl) = error_mark_node;
4612 /* If a `static' var's size isn't known, make it extern as
4613 well as static, so it does not get allocated. If it's not
4614 `static', then don't mark it extern; finish_incomplete_decl
4615 will give it a default size and it will get allocated. */
4616 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4617 DECL_EXTERNAL (decl) = 1;
4619 else if (failure == 3)
4621 error ("zero-size array %qD", decl);
4622 TREE_TYPE (decl) = error_mark_node;
4626 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4628 relayout_decl (decl);
4632 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4633 any appropriate error messages regarding the layout. */
4635 static void
4636 layout_var_decl (tree decl)
4638 tree type;
4640 type = TREE_TYPE (decl);
4641 if (type == error_mark_node)
4642 return;
4644 /* If we haven't already layed out this declaration, do so now.
4645 Note that we must not call complete type for an external object
4646 because it's type might involve templates that we are not
4647 supposed to instantiate yet. (And it's perfectly valid to say
4648 `extern X x' for some incomplete type `X'.) */
4649 if (!DECL_EXTERNAL (decl))
4650 complete_type (type);
4651 if (!DECL_SIZE (decl)
4652 && TREE_TYPE (decl) != error_mark_node
4653 && (COMPLETE_TYPE_P (type)
4654 || (TREE_CODE (type) == ARRAY_TYPE
4655 && !TYPE_DOMAIN (type)
4656 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4657 layout_decl (decl, 0);
4659 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4661 /* An automatic variable with an incomplete type: that is an error.
4662 Don't talk about array types here, since we took care of that
4663 message in grokdeclarator. */
4664 error ("storage size of %qD isn't known", decl);
4665 TREE_TYPE (decl) = error_mark_node;
4667 #if 0
4668 /* Keep this code around in case we later want to control debug info
4669 based on whether a type is "used". (jason 1999-11-11) */
4671 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4672 /* Let debugger know it should output info for this type. */
4673 note_debug_info_needed (ttype);
4675 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4676 note_debug_info_needed (DECL_CONTEXT (decl));
4677 #endif
4679 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4680 && DECL_SIZE (decl) != NULL_TREE
4681 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4683 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4684 constant_expression_warning (DECL_SIZE (decl));
4685 else
4687 error ("storage size of %qD isn't constant", decl);
4688 TREE_TYPE (decl) = error_mark_node;
4693 /* If a local static variable is declared in an inline function, or if
4694 we have a weak definition, we must endeavor to create only one
4695 instance of the variable at link-time. */
4697 void
4698 maybe_commonize_var (tree decl)
4700 /* Static data in a function with comdat linkage also has comdat
4701 linkage. */
4702 if (TREE_STATIC (decl)
4703 /* Don't mess with __FUNCTION__. */
4704 && ! DECL_ARTIFICIAL (decl)
4705 && DECL_FUNCTION_SCOPE_P (decl)
4706 && vague_linkage_p (DECL_CONTEXT (decl)))
4708 if (flag_weak)
4710 /* With weak symbols, we simply make the variable COMDAT;
4711 that will cause copies in multiple translations units to
4712 be merged. */
4713 comdat_linkage (decl);
4715 else
4717 if (DECL_INITIAL (decl) == NULL_TREE
4718 || DECL_INITIAL (decl) == error_mark_node)
4720 /* Without weak symbols, we can use COMMON to merge
4721 uninitialized variables. */
4722 TREE_PUBLIC (decl) = 1;
4723 DECL_COMMON (decl) = 1;
4725 else
4727 /* While for initialized variables, we must use internal
4728 linkage -- which means that multiple copies will not
4729 be merged. */
4730 TREE_PUBLIC (decl) = 0;
4731 DECL_COMMON (decl) = 0;
4732 warning_at (input_location, 0,
4733 "sorry: semantics of inline function static "
4734 "data %q+#D are wrong (you'll wind up "
4735 "with multiple copies)", decl);
4736 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4737 " you can work around this by removing "
4738 "the initializer");
4742 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4743 /* Set it up again; we might have set DECL_INITIAL since the last
4744 time. */
4745 comdat_linkage (decl);
4748 /* Issue an error message if DECL is an uninitialized const variable. */
4750 static void
4751 check_for_uninitialized_const_var (tree decl)
4753 tree type = strip_array_types (TREE_TYPE (decl));
4755 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
4756 && DECL_INITIAL (decl) == NULL)
4757 error ("missing initializer for constexpr %qD", decl);
4759 /* ``Unless explicitly declared extern, a const object does not have
4760 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4761 7.1.6 */
4762 else if (TREE_CODE (decl) == VAR_DECL
4763 && TREE_CODE (type) != REFERENCE_TYPE
4764 && CP_TYPE_CONST_P (type)
4765 && (!TYPE_NEEDS_CONSTRUCTING (type)
4766 || !type_has_user_provided_default_constructor (type))
4767 && !DECL_INITIAL (decl))
4769 permerror (DECL_SOURCE_LOCATION (decl),
4770 "uninitialized const %qD", decl);
4772 if (CLASS_TYPE_P (type)
4773 && !type_has_user_provided_default_constructor (type))
4775 tree defaulted_ctor;
4777 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4778 "%q#T has no user-provided default constructor", type);
4779 defaulted_ctor = in_class_defaulted_default_constructor (type);
4780 if (defaulted_ctor)
4781 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4782 "constructor is not user-provided because it is "
4783 "explicitly defaulted in the class body");
4788 /* Structure holding the current initializer being processed by reshape_init.
4789 CUR is a pointer to the current element being processed, END is a pointer
4790 after the last element present in the initializer. */
4791 typedef struct reshape_iterator_t
4793 constructor_elt *cur;
4794 constructor_elt *end;
4795 } reshape_iter;
4797 static tree reshape_init_r (tree, reshape_iter *, bool);
4799 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4800 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4801 initialized. If there are no more such fields, the return value
4802 will be NULL. */
4804 tree
4805 next_initializable_field (tree field)
4807 while (field
4808 && (TREE_CODE (field) != FIELD_DECL
4809 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4810 || DECL_ARTIFICIAL (field)))
4811 field = TREE_CHAIN (field);
4813 return field;
4816 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4817 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4818 INTEGER_CST representing the size of the array minus one (the maximum index),
4819 or NULL_TREE if the array was declared without specifying the size. D is
4820 the iterator within the constructor. */
4822 static tree
4823 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4825 tree new_init;
4826 bool sized_array_p = (max_index != NULL_TREE);
4827 unsigned HOST_WIDE_INT max_index_cst = 0;
4828 unsigned HOST_WIDE_INT index;
4830 /* The initializer for an array is always a CONSTRUCTOR. */
4831 new_init = build_constructor (init_list_type_node, NULL);
4833 if (sized_array_p)
4835 /* Minus 1 is used for zero sized arrays. */
4836 if (integer_all_onesp (max_index))
4837 return new_init;
4839 if (host_integerp (max_index, 1))
4840 max_index_cst = tree_low_cst (max_index, 1);
4841 /* sizetype is sign extended, not zero extended. */
4842 else
4843 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4847 /* Loop until there are no more initializers. */
4848 for (index = 0;
4849 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4850 ++index)
4852 tree elt_init;
4854 check_array_designated_initializer (d->cur);
4855 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4856 if (elt_init == error_mark_node)
4857 return error_mark_node;
4858 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4861 return new_init;
4864 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4865 Parameters are the same of reshape_init_r. */
4867 static tree
4868 reshape_init_array (tree type, reshape_iter *d)
4870 tree max_index = NULL_TREE;
4872 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4874 if (TYPE_DOMAIN (type))
4875 max_index = array_type_nelts (type);
4877 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4880 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4881 Parameters are the same of reshape_init_r. */
4883 static tree
4884 reshape_init_vector (tree type, reshape_iter *d)
4886 tree max_index = NULL_TREE;
4887 tree rtype;
4889 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4891 if (COMPOUND_LITERAL_P (d->cur->value))
4893 tree value = d->cur->value;
4894 if (!same_type_p (TREE_TYPE (value), type))
4896 error ("invalid type %qT as initializer for a vector of type %qT",
4897 TREE_TYPE (d->cur->value), type);
4898 value = error_mark_node;
4900 ++d->cur;
4901 return value;
4904 /* For a vector, the representation type is a struct
4905 containing a single member which is an array of the
4906 appropriate size. */
4907 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4908 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4909 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4911 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4914 /* Subroutine of reshape_init_r, processes the initializers for classes
4915 or union. Parameters are the same of reshape_init_r. */
4917 static tree
4918 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4920 tree field;
4921 tree new_init;
4923 gcc_assert (CLASS_TYPE_P (type));
4925 /* The initializer for a class is always a CONSTRUCTOR. */
4926 new_init = build_constructor (init_list_type_node, NULL);
4927 field = next_initializable_field (TYPE_FIELDS (type));
4929 if (!field)
4931 /* [dcl.init.aggr]
4933 An initializer for an aggregate member that is an
4934 empty class shall have the form of an empty
4935 initializer-list {}. */
4936 if (!first_initializer_p)
4938 error ("initializer for %qT must be brace-enclosed", type);
4939 return error_mark_node;
4941 return new_init;
4944 /* Loop through the initializable fields, gathering initializers. */
4945 while (d->cur != d->end)
4947 tree field_init;
4949 /* Handle designated initializers, as an extension. */
4950 if (d->cur->index)
4952 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4954 if (!field || TREE_CODE (field) != FIELD_DECL)
4956 error ("%qT has no non-static data member named %qD", type,
4957 d->cur->index);
4958 return error_mark_node;
4962 /* If we processed all the member of the class, we are done. */
4963 if (!field)
4964 break;
4966 field_init = reshape_init_r (TREE_TYPE (field), d,
4967 /*first_initializer_p=*/false);
4968 if (field_init == error_mark_node)
4969 return error_mark_node;
4971 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4973 /* [dcl.init.aggr]
4975 When a union is initialized with a brace-enclosed
4976 initializer, the braces shall only contain an
4977 initializer for the first member of the union. */
4978 if (TREE_CODE (type) == UNION_TYPE)
4979 break;
4981 field = next_initializable_field (TREE_CHAIN (field));
4984 return new_init;
4987 /* Subroutine of reshape_init, which processes a single initializer (part of
4988 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4989 iterator within the CONSTRUCTOR which points to the initializer to process.
4990 FIRST_INITIALIZER_P is true if this is the first initializer of the
4991 outermost CONSTRUCTOR node. */
4993 static tree
4994 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4996 tree init = d->cur->value;
4998 if (error_operand_p (init))
4999 return error_mark_node;
5001 /* A non-aggregate type is always initialized with a single
5002 initializer. */
5003 if (!CP_AGGREGATE_TYPE_P (type))
5005 /* It is invalid to initialize a non-aggregate type with a
5006 brace-enclosed initializer before C++0x.
5007 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5008 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5009 a CONSTRUCTOR (with a record type). */
5010 if (TREE_CODE (init) == CONSTRUCTOR
5011 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5013 if (SCALAR_TYPE_P (type))
5015 error ("braces around scalar initializer for type %qT", type);
5016 init = error_mark_node;
5018 else
5019 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5022 d->cur++;
5023 return init;
5026 /* [dcl.init.aggr]
5028 All implicit type conversions (clause _conv_) are considered when
5029 initializing the aggregate member with an initializer from an
5030 initializer-list. If the initializer can initialize a member,
5031 the member is initialized. Otherwise, if the member is itself a
5032 non-empty subaggregate, brace elision is assumed and the
5033 initializer is considered for the initialization of the first
5034 member of the subaggregate. */
5035 if (TREE_CODE (init) != CONSTRUCTOR
5036 /* But don't try this for the first initializer, since that would be
5037 looking through the outermost braces; A a2 = { a1 }; is not a
5038 valid aggregate initialization. */
5039 && !first_initializer_p
5040 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5041 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5043 d->cur++;
5044 return init;
5047 /* [dcl.init.string]
5049 A char array (whether plain char, signed char, or unsigned char)
5050 can be initialized by a string-literal (optionally enclosed in
5051 braces); a wchar_t array can be initialized by a wide
5052 string-literal (optionally enclosed in braces). */
5053 if (TREE_CODE (type) == ARRAY_TYPE
5054 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5056 tree str_init = init;
5058 /* Strip one level of braces if and only if they enclose a single
5059 element (as allowed by [dcl.init.string]). */
5060 if (!first_initializer_p
5061 && TREE_CODE (str_init) == CONSTRUCTOR
5062 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5064 str_init = VEC_index (constructor_elt,
5065 CONSTRUCTOR_ELTS (str_init), 0)->value;
5068 /* If it's a string literal, then it's the initializer for the array
5069 as a whole. Otherwise, continue with normal initialization for
5070 array types (one value per array element). */
5071 if (TREE_CODE (str_init) == STRING_CST)
5073 d->cur++;
5074 return str_init;
5078 /* The following cases are about aggregates. If we are not within a full
5079 initializer already, and there is not a CONSTRUCTOR, it means that there
5080 is a missing set of braces (that is, we are processing the case for
5081 which reshape_init exists). */
5082 if (!first_initializer_p)
5084 if (TREE_CODE (init) == CONSTRUCTOR)
5086 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5087 /* There is no need to reshape pointer-to-member function
5088 initializers, as they are always constructed correctly
5089 by the front end. */
5091 else if (COMPOUND_LITERAL_P (init))
5092 /* For a nested compound literal, there is no need to reshape since
5093 brace elision is not allowed. Even if we decided to allow it,
5094 we should add a call to reshape_init in finish_compound_literal,
5095 before calling digest_init, so changing this code would still
5096 not be necessary. */
5097 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5098 else
5100 ++d->cur;
5101 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5102 return reshape_init (type, init);
5106 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5107 type);
5110 /* Dispatch to specialized routines. */
5111 if (CLASS_TYPE_P (type))
5112 return reshape_init_class (type, d, first_initializer_p);
5113 else if (TREE_CODE (type) == ARRAY_TYPE)
5114 return reshape_init_array (type, d);
5115 else if (TREE_CODE (type) == VECTOR_TYPE)
5116 return reshape_init_vector (type, d);
5117 else
5118 gcc_unreachable();
5121 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5122 brace-enclosed aggregate initializer.
5124 INIT is the CONSTRUCTOR containing the list of initializers describing
5125 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5126 It may not presently match the shape of the TYPE; for example:
5128 struct S { int a; int b; };
5129 struct S a[] = { 1, 2, 3, 4 };
5131 Here INIT will hold a VEC of four elements, rather than a
5132 VEC of two elements, each itself a VEC of two elements. This
5133 routine transforms INIT from the former form into the latter. The
5134 revised CONSTRUCTOR node is returned. */
5136 tree
5137 reshape_init (tree type, tree init)
5139 VEC(constructor_elt, gc) *v;
5140 reshape_iter d;
5141 tree new_init;
5143 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5145 v = CONSTRUCTOR_ELTS (init);
5147 /* An empty constructor does not need reshaping, and it is always a valid
5148 initializer. */
5149 if (VEC_empty (constructor_elt, v))
5150 return init;
5152 /* Recurse on this CONSTRUCTOR. */
5153 d.cur = VEC_index (constructor_elt, v, 0);
5154 d.end = d.cur + VEC_length (constructor_elt, v);
5156 new_init = reshape_init_r (type, &d, true);
5157 if (new_init == error_mark_node)
5158 return error_mark_node;
5160 /* Make sure all the element of the constructor were used. Otherwise,
5161 issue an error about exceeding initializers. */
5162 if (d.cur != d.end)
5163 error ("too many initializers for %qT", type);
5165 return new_init;
5168 /* Verify array initializer. Returns true if errors have been reported. */
5170 bool
5171 check_array_initializer (tree decl, tree type, tree init)
5173 tree element_type = TREE_TYPE (type);
5175 /* The array type itself need not be complete, because the
5176 initializer may tell us how many elements are in the array.
5177 But, the elements of the array must be complete. */
5178 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5180 if (decl)
5181 error ("elements of array %q#D have incomplete type", decl);
5182 else
5183 error ("elements of array %q#T have incomplete type", type);
5184 return true;
5186 /* It is not valid to initialize a VLA. */
5187 if (init
5188 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5189 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5191 if (decl)
5192 error ("variable-sized object %qD may not be initialized", decl);
5193 else
5194 error ("variable-sized compound literal");
5195 return true;
5197 return false;
5200 /* Subroutine of check_initializer; args are passed down from that function.
5201 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5203 static tree
5204 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5207 int saved_stmts_are_full_exprs_p = 0;
5208 if (building_stmt_tree ())
5210 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5211 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5213 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5214 if (building_stmt_tree ())
5215 current_stmt_tree ()->stmts_are_full_exprs_p =
5216 saved_stmts_are_full_exprs_p;
5217 return init;
5220 /* Verify INIT (the initializer for DECL), and record the
5221 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5222 grok_reference_init.
5224 If the return value is non-NULL, it is an expression that must be
5225 evaluated dynamically to initialize DECL. */
5227 static tree
5228 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5230 tree type = TREE_TYPE (decl);
5231 tree init_code = NULL;
5233 /* Things that are going to be initialized need to have complete
5234 type. */
5235 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5237 if (type == error_mark_node)
5238 /* We will have already complained. */
5239 return NULL_TREE;
5241 if (TREE_CODE (type) == ARRAY_TYPE)
5243 if (check_array_initializer (decl, type, init))
5244 return NULL_TREE;
5246 else if (!COMPLETE_TYPE_P (type))
5248 error ("%qD has incomplete type", decl);
5249 TREE_TYPE (decl) = error_mark_node;
5250 return NULL_TREE;
5252 else
5253 /* There is no way to make a variable-sized class type in GNU C++. */
5254 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5256 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5258 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5259 if (SCALAR_TYPE_P (type))
5261 if (init_len == 0)
5263 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5264 init = build_zero_init (type, NULL_TREE, false);
5266 else if (init_len != 1)
5268 error ("scalar object %qD requires one element in initializer",
5269 decl);
5270 TREE_TYPE (decl) = error_mark_node;
5271 return NULL_TREE;
5276 if (TREE_CODE (decl) == CONST_DECL)
5278 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5280 DECL_INITIAL (decl) = init;
5282 gcc_assert (init != NULL_TREE);
5283 init = NULL_TREE;
5285 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
5286 init = grok_reference_init (decl, type, init, cleanup);
5287 else if (init)
5289 /* Do not reshape constructors of vectors (they don't need to be
5290 reshaped. */
5291 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5293 if (is_std_init_list (type))
5294 return build_init_list_var_init (decl, type, init, cleanup);
5295 else if (TYPE_NON_AGGREGATE_CLASS (type))
5297 /* Don't reshape if the class has constructors. */
5298 if (cxx_dialect == cxx98)
5299 error ("in C++98 %qD must be initialized by constructor, "
5300 "not by %<{...}%>",
5301 decl);
5302 init = build_tree_list (NULL_TREE, init);
5304 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5306 error ("opaque vector types cannot be initialized");
5307 init = error_mark_node;
5309 else
5310 init = reshape_init (type, init);
5313 /* If DECL has an array type without a specific bound, deduce the
5314 array size from the initializer. */
5315 maybe_deduce_size_from_array_init (decl, init);
5316 type = TREE_TYPE (decl);
5317 if (type == error_mark_node)
5318 return NULL_TREE;
5320 if (TYPE_NEEDS_CONSTRUCTING (type)
5321 || (CLASS_TYPE_P (type)
5322 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5323 return build_aggr_init_full_exprs (decl, init, flags);
5324 else if (TREE_CODE (init) != TREE_VEC)
5326 init_code = store_init_value (decl, init, flags);
5327 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5328 && DECL_INITIAL (decl)
5329 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5330 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5331 warning (0, "array %qD initialized by parenthesized string literal %qE",
5332 decl, DECL_INITIAL (decl));
5333 init = NULL;
5336 else if (DECL_EXTERNAL (decl))
5338 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5340 check_for_uninitialized_const_var (decl);
5341 return build_aggr_init_full_exprs (decl, init, flags);
5343 else if (MAYBE_CLASS_TYPE_P (type))
5345 tree core_type = strip_array_types (type);
5347 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5348 error ("structure %qD with uninitialized const members", decl);
5349 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5350 error ("structure %qD with uninitialized reference members", decl);
5352 check_for_uninitialized_const_var (decl);
5354 else
5355 check_for_uninitialized_const_var (decl);
5357 if (init && init != error_mark_node)
5358 init_code = build2 (INIT_EXPR, type, decl, init);
5360 return init_code;
5363 /* If DECL is not a local variable, give it RTL. */
5365 static void
5366 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5368 int toplev = toplevel_bindings_p ();
5369 int defer_p;
5370 const char *filename;
5372 /* Set the DECL_ASSEMBLER_NAME for the object. */
5373 if (asmspec)
5375 /* The `register' keyword, when used together with an
5376 asm-specification, indicates that the variable should be
5377 placed in a particular register. */
5378 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5380 set_user_assembler_name (decl, asmspec);
5381 DECL_HARD_REGISTER (decl) = 1;
5383 else
5385 if (TREE_CODE (decl) == FUNCTION_DECL
5386 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5387 set_builtin_user_assembler_name (decl, asmspec);
5388 set_user_assembler_name (decl, asmspec);
5392 /* Handle non-variables up front. */
5393 if (TREE_CODE (decl) != VAR_DECL)
5395 rest_of_decl_compilation (decl, toplev, at_eof);
5396 return;
5399 /* If we see a class member here, it should be a static data
5400 member. */
5401 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5403 gcc_assert (TREE_STATIC (decl));
5404 /* An in-class declaration of a static data member should be
5405 external; it is only a declaration, and not a definition. */
5406 if (init == NULL_TREE)
5407 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5410 /* We don't create any RTL for local variables. */
5411 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5412 return;
5414 /* We defer emission of local statics until the corresponding
5415 DECL_EXPR is expanded. */
5416 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5418 /* We try to defer namespace-scope static constants so that they are
5419 not emitted into the object file unnecessarily. */
5420 filename = input_filename;
5421 if (!DECL_VIRTUAL_P (decl)
5422 && TREE_READONLY (decl)
5423 && DECL_INITIAL (decl) != NULL_TREE
5424 && DECL_INITIAL (decl) != error_mark_node
5425 && filename != NULL
5426 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5427 && toplev
5428 && !TREE_PUBLIC (decl))
5430 /* Fool with the linkage of static consts according to #pragma
5431 interface. */
5432 struct c_fileinfo *finfo = get_fileinfo (filename);
5433 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5435 TREE_PUBLIC (decl) = 1;
5436 DECL_EXTERNAL (decl) = finfo->interface_only;
5439 defer_p = 1;
5441 /* Likewise for template instantiations. */
5442 else if (DECL_LANG_SPECIFIC (decl)
5443 && DECL_IMPLICIT_INSTANTIATION (decl))
5444 defer_p = 1;
5446 /* If we're not deferring, go ahead and assemble the variable. */
5447 if (!defer_p)
5448 rest_of_decl_compilation (decl, toplev, at_eof);
5451 /* walk_tree helper for wrap_temporary_cleanups, below. */
5453 static tree
5454 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5456 if (TYPE_P (*stmt_p))
5458 *walk_subtrees = 0;
5459 return NULL_TREE;
5462 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5464 tree guard = (tree)data;
5465 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5467 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5468 /* Tell honor_protect_cleanup_actions to handle this as a separate
5469 cleanup. */
5470 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5472 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5475 return NULL_TREE;
5478 /* We're initializing a local variable which has a cleanup GUARD. If there
5479 are any temporaries used in the initializer INIT of this variable, we
5480 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5481 variable will be cleaned up properly if one of them throws.
5483 Unfortunately, there's no way to express this properly in terms of
5484 nesting, as the regions for the temporaries overlap the region for the
5485 variable itself; if there are two temporaries, the variable needs to be
5486 the first thing destroyed if either of them throws. However, we only
5487 want to run the variable's cleanup if it actually got constructed. So
5488 we need to guard the temporary cleanups with the variable's cleanup if
5489 they are run on the normal path, but not if they are run on the
5490 exceptional path. We implement this by telling
5491 honor_protect_cleanup_actions to strip the variable cleanup from the
5492 exceptional path. */
5494 static void
5495 wrap_temporary_cleanups (tree init, tree guard)
5497 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5500 /* Generate code to initialize DECL (a local variable). */
5502 static void
5503 initialize_local_var (tree decl, tree init)
5505 tree type = TREE_TYPE (decl);
5506 tree cleanup;
5507 int already_used;
5509 gcc_assert (TREE_CODE (decl) == VAR_DECL
5510 || TREE_CODE (decl) == RESULT_DECL);
5511 gcc_assert (!TREE_STATIC (decl));
5513 if (DECL_SIZE (decl) == NULL_TREE)
5515 /* If we used it already as memory, it must stay in memory. */
5516 DECL_INITIAL (decl) = NULL_TREE;
5517 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5518 return;
5521 if (type == error_mark_node)
5522 return;
5524 /* Compute and store the initial value. */
5525 already_used = TREE_USED (decl) || TREE_USED (type);
5527 /* Generate a cleanup, if necessary. */
5528 cleanup = cxx_maybe_build_cleanup (decl);
5530 /* Perform the initialization. */
5531 if (init)
5533 int saved_stmts_are_full_exprs_p;
5535 /* If we're only initializing a single object, guard the destructors
5536 of any temporaries used in its initializer with its destructor.
5537 This isn't right for arrays because each element initialization is
5538 a full-expression. */
5539 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5540 wrap_temporary_cleanups (init, cleanup);
5542 gcc_assert (building_stmt_tree ());
5543 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5544 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5545 finish_expr_stmt (init);
5546 current_stmt_tree ()->stmts_are_full_exprs_p =
5547 saved_stmts_are_full_exprs_p;
5550 /* Set this to 0 so we can tell whether an aggregate which was
5551 initialized was ever used. Don't do this if it has a
5552 destructor, so we don't complain about the 'resource
5553 allocation is initialization' idiom. Now set
5554 attribute((unused)) on types so decls of that type will be
5555 marked used. (see TREE_USED, above.) */
5556 if (TYPE_NEEDS_CONSTRUCTING (type)
5557 && ! already_used
5558 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5559 && DECL_NAME (decl))
5560 TREE_USED (decl) = 0;
5561 else if (already_used)
5562 TREE_USED (decl) = 1;
5564 if (cleanup)
5565 finish_decl_cleanup (decl, cleanup);
5568 /* DECL is a VAR_DECL for a compiler-generated variable with static
5569 storage duration (like a virtual table) whose initializer is a
5570 compile-time constant. INIT must be either a TREE_LIST of values,
5571 or a CONSTRUCTOR. Initialize the variable and provide it to the
5572 back end. */
5574 void
5575 initialize_artificial_var (tree decl, tree init)
5577 gcc_assert (DECL_ARTIFICIAL (decl));
5578 if (TREE_CODE (init) == TREE_LIST)
5579 init = build_constructor_from_list (TREE_TYPE (decl), init);
5580 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5581 DECL_INITIAL (decl) = init;
5582 DECL_INITIALIZED_P (decl) = 1;
5583 determine_visibility (decl);
5584 layout_var_decl (decl);
5585 maybe_commonize_var (decl);
5586 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5589 /* INIT is the initializer for a variable, as represented by the
5590 parser. Returns true iff INIT is value-dependent. */
5592 static bool
5593 value_dependent_init_p (tree init)
5595 if (TREE_CODE (init) == TREE_LIST)
5596 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5597 return any_value_dependent_elements_p (init);
5598 else if (TREE_CODE (init) == CONSTRUCTOR)
5599 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5601 VEC(constructor_elt, gc) *elts;
5602 size_t nelts;
5603 size_t i;
5605 elts = CONSTRUCTOR_ELTS (init);
5606 nelts = VEC_length (constructor_elt, elts);
5607 for (i = 0; i < nelts; ++i)
5608 if (value_dependent_init_p (VEC_index (constructor_elt,
5609 elts, i)->value))
5610 return true;
5612 else
5613 /* It must be a simple expression, e.g., int i = 3; */
5614 return value_dependent_expression_p (init);
5616 return false;
5619 /* Finish processing of a declaration;
5620 install its line number and initial value.
5621 If the length of an array type is not known before,
5622 it must be determined now, from the initial value, or it is an error.
5624 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5625 true, then INIT is an integral constant expression.
5627 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5628 if the (init) syntax was used. */
5630 void
5631 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5632 tree asmspec_tree, int flags)
5634 tree type;
5635 tree cleanup;
5636 const char *asmspec = NULL;
5637 int was_readonly = 0;
5638 bool var_definition_p = false;
5639 int saved_processing_template_decl;
5640 tree auto_node;
5642 if (decl == error_mark_node)
5643 return;
5644 else if (! decl)
5646 if (init)
5647 error ("assignment (not initialization) in declaration");
5648 return;
5651 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5652 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5653 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5655 type = TREE_TYPE (decl);
5656 if (type == error_mark_node)
5657 return;
5659 /* Assume no cleanup is required. */
5660 cleanup = NULL_TREE;
5661 saved_processing_template_decl = processing_template_decl;
5663 /* If a name was specified, get the string. */
5664 if (global_scope_p (current_binding_level))
5665 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5666 if (asmspec_tree && asmspec_tree != error_mark_node)
5667 asmspec = TREE_STRING_POINTER (asmspec_tree);
5669 if (current_class_type
5670 && CP_DECL_CONTEXT (decl) == current_class_type
5671 && TYPE_BEING_DEFINED (current_class_type)
5672 && (DECL_INITIAL (decl) || init))
5673 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5675 auto_node = type_uses_auto (type);
5676 if (auto_node)
5678 if (init == NULL_TREE)
5680 error ("declaration of %q#D has no initializer", decl);
5681 TREE_TYPE (decl) = error_mark_node;
5682 return;
5684 if (TREE_CODE (init) == TREE_LIST)
5685 init = build_x_compound_expr_from_list (init, "initializer");
5686 if (describable_type (init))
5688 type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5689 if (type == error_mark_node)
5690 return;
5694 if (FUNCTION_DECL_P (decl))
5695 validate_constexpr_fundecl (decl);
5697 if (init && TREE_CODE (decl) == FUNCTION_DECL)
5699 tree clone;
5700 if (init == ridpointers[(int)RID_DELETE])
5702 /* FIXME check this is 1st decl. */
5703 DECL_DELETED_FN (decl) = 1;
5704 DECL_DECLARED_INLINE_P (decl) = 1;
5705 DECL_INITIAL (decl) = error_mark_node;
5706 FOR_EACH_CLONE (clone, decl)
5708 DECL_DELETED_FN (clone) = 1;
5709 DECL_DECLARED_INLINE_P (clone) = 1;
5710 DECL_INITIAL (clone) = error_mark_node;
5712 init = NULL_TREE;
5714 else if (init == ridpointers[(int)RID_DEFAULT])
5716 if (defaultable_fn_check (decl))
5717 DECL_DEFAULTED_FN (decl) = 1;
5718 else
5719 DECL_INITIAL (decl) = NULL_TREE;
5723 if (processing_template_decl)
5725 bool type_dependent_p;
5727 /* Add this declaration to the statement-tree. */
5728 if (at_function_scope_p ())
5729 add_decl_expr (decl);
5731 type_dependent_p = dependent_type_p (type);
5733 if (check_for_bare_parameter_packs (init))
5735 init = NULL_TREE;
5736 DECL_INITIAL (decl) = NULL_TREE;
5739 if (init
5740 && (init_const_expr_p || DECL_DECLARED_CONSTEXPR_P (decl))
5741 && VAR_DECL_P (decl))
5743 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5744 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5745 TREE_CONSTANT (decl) = 1;
5748 /* Generally, initializers in templates are expanded when the
5749 template is instantiated. But, if DECL is an integral
5750 constant static data member, then it can be used in future
5751 integral constant expressions, and its value must be
5752 available. */
5753 if (!(init
5754 && DECL_CLASS_SCOPE_P (decl)
5755 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5756 && !type_dependent_p
5757 && !value_dependent_init_p (init)))
5759 if (init)
5760 DECL_INITIAL (decl) = init;
5761 if (TREE_CODE (decl) == VAR_DECL
5762 && !DECL_PRETTY_FUNCTION_P (decl)
5763 && !type_dependent_p)
5764 maybe_deduce_size_from_array_init (decl, init);
5765 goto finish_end;
5768 if (TREE_CODE (init) == TREE_LIST)
5770 /* If the parenthesized-initializer form was used (e.g.,
5771 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5772 arguments. (There is generally only one.) We convert them
5773 individually. */
5774 tree list = init;
5775 for (; list; list = TREE_CHAIN (list))
5777 tree elt = TREE_VALUE (list);
5778 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5781 else
5782 init = fold_non_dependent_expr (init);
5783 processing_template_decl = 0;
5786 /* Take care of TYPE_DECLs up front. */
5787 if (TREE_CODE (decl) == TYPE_DECL)
5789 if (type != error_mark_node
5790 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5792 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5793 warning (0, "shadowing previous type declaration of %q#D", decl);
5794 set_identifier_type_value (DECL_NAME (decl), decl);
5797 /* If we have installed this as the canonical typedef for this
5798 type, and that type has not been defined yet, delay emitting
5799 the debug information for it, as we will emit it later. */
5800 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5801 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5802 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5804 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5805 at_eof);
5806 goto finish_end;
5809 /* A reference will be modified here, as it is initialized. */
5810 if (! DECL_EXTERNAL (decl)
5811 && TREE_READONLY (decl)
5812 && TREE_CODE (type) == REFERENCE_TYPE)
5814 was_readonly = 1;
5815 TREE_READONLY (decl) = 0;
5818 if (TREE_CODE (decl) == VAR_DECL)
5820 /* Only variables with trivial initialization and destruction can
5821 have thread-local storage. */
5822 if (DECL_THREAD_LOCAL_P (decl)
5823 && (type_has_nontrivial_default_init (TREE_TYPE (decl))
5824 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
5825 error ("%qD cannot be thread-local because it has non-trivial "
5826 "type %qT", decl, TREE_TYPE (decl));
5827 /* If this is a local variable that will need a mangled name,
5828 register it now. We must do this before processing the
5829 initializer for the variable, since the initialization might
5830 require a guard variable, and since the mangled name of the
5831 guard variable will depend on the mangled name of this
5832 variable. */
5833 if (DECL_FUNCTION_SCOPE_P (decl)
5834 && TREE_STATIC (decl)
5835 && !DECL_ARTIFICIAL (decl))
5837 push_local_name (decl);
5838 if (DECL_CONSTRUCTOR_P (current_function_decl)
5839 || DECL_DESTRUCTOR_P (current_function_decl))
5840 /* Normally local_decls is populated during GIMPLE lowering,
5841 but [cd]tors are never actually compiled directly. We need
5842 to put statics on the list so we can deal with the label
5843 address extension. */
5844 cfun->local_decls = tree_cons (NULL_TREE, decl,
5845 cfun->local_decls);
5848 /* Convert the initializer to the type of DECL, if we have not
5849 already initialized DECL. */
5850 if (!DECL_INITIALIZED_P (decl)
5851 /* If !DECL_EXTERNAL then DECL is being defined. In the
5852 case of a static data member initialized inside the
5853 class-specifier, there can be an initializer even if DECL
5854 is *not* defined. */
5855 && (!DECL_EXTERNAL (decl) || init))
5857 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5859 tree jclass
5860 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5861 /* Allow libjava/prims.cc define primitive classes. */
5862 if (init != NULL_TREE
5863 || jclass == NULL_TREE
5864 || TREE_CODE (jclass) != TYPE_DECL
5865 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5866 || !same_type_ignoring_top_level_qualifiers_p
5867 (type, TREE_TYPE (TREE_TYPE (jclass))))
5868 error ("Java object %qD not allocated with %<new%>", decl);
5869 init = NULL_TREE;
5871 if (init)
5873 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5874 if (init_const_expr_p || DECL_DECLARED_CONSTEXPR_P (decl))
5876 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5877 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5878 TREE_CONSTANT (decl) = 1;
5881 init = check_initializer (decl, init, flags, &cleanup);
5882 /* Thread-local storage cannot be dynamically initialized. */
5883 if (DECL_THREAD_LOCAL_P (decl) && init)
5885 error ("%qD is thread-local and so cannot be dynamically "
5886 "initialized", decl);
5887 init = NULL_TREE;
5890 /* Check that the initializer for a static data member was a
5891 constant. Although we check in the parser that the
5892 initializer is an integral constant expression, we do not
5893 simplify division-by-zero at the point at which it
5894 occurs. Therefore, in:
5896 struct S { static const int i = 7 / 0; };
5898 we issue an error at this point. It would
5899 probably be better to forbid division by zero in
5900 integral constant expressions. */
5901 if (DECL_EXTERNAL (decl) && init)
5903 error ("%qD cannot be initialized by a non-constant expression"
5904 " when being declared", decl);
5905 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5906 init = NULL_TREE;
5909 /* Handle:
5911 [dcl.init]
5913 The memory occupied by any object of static storage
5914 duration is zero-initialized at program startup before
5915 any other initialization takes place.
5917 We cannot create an appropriate initializer until after
5918 the type of DECL is finalized. If DECL_INITIAL is set,
5919 then the DECL is statically initialized, and any
5920 necessary zero-initialization has already been performed. */
5921 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5922 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5923 /*nelts=*/NULL_TREE,
5924 /*static_storage_p=*/true);
5925 /* Remember that the initialization for this variable has
5926 taken place. */
5927 DECL_INITIALIZED_P (decl) = 1;
5928 /* This declaration is the definition of this variable,
5929 unless we are initializing a static data member within
5930 the class specifier. */
5931 if (!DECL_EXTERNAL (decl))
5932 var_definition_p = true;
5934 /* If the variable has an array type, lay out the type, even if
5935 there is no initializer. It is valid to index through the
5936 array, and we must get TYPE_ALIGN set correctly on the array
5937 type. */
5938 else if (TREE_CODE (type) == ARRAY_TYPE)
5939 layout_type (type);
5941 if (!processing_template_decl
5942 && TREE_STATIC (decl)
5943 && !at_function_scope_p ()
5944 && current_function_decl == NULL)
5945 /* So decl is a global variable or a static member of a
5946 non local class. Record the types it uses
5947 so that we can decide later to emit debug info for them. */
5948 record_types_used_by_current_var_decl (decl);
5950 else if (TREE_CODE (decl) == FIELD_DECL
5951 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5952 error ("non-static data member %qD has Java class type", decl);
5954 /* Add this declaration to the statement-tree. This needs to happen
5955 after the call to check_initializer so that the DECL_EXPR for a
5956 reference temp is added before the DECL_EXPR for the reference itself. */
5957 if (at_function_scope_p ())
5958 add_decl_expr (decl);
5960 /* Let the middle end know about variables and functions -- but not
5961 static data members in uninstantiated class templates. */
5962 if (!saved_processing_template_decl
5963 && (TREE_CODE (decl) == VAR_DECL
5964 || TREE_CODE (decl) == FUNCTION_DECL))
5966 if (TREE_CODE (decl) == VAR_DECL)
5968 layout_var_decl (decl);
5969 maybe_commonize_var (decl);
5972 /* This needs to happen after the linkage is set. */
5973 determine_visibility (decl);
5975 if (var_definition_p && TREE_STATIC (decl))
5977 /* If a TREE_READONLY variable needs initialization
5978 at runtime, it is no longer readonly and we need to
5979 avoid MEM_READONLY_P being set on RTL created for it. */
5980 if (init)
5982 if (TREE_READONLY (decl))
5983 TREE_READONLY (decl) = 0;
5984 was_readonly = 0;
5986 else if (was_readonly)
5987 TREE_READONLY (decl) = 1;
5990 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5992 /* Check for abstractness of the type. Notice that there is no
5993 need to strip array types here since the check for those types
5994 is already done within create_array_type_for_decl. */
5995 if (TREE_CODE (type) == FUNCTION_TYPE
5996 || TREE_CODE (type) == METHOD_TYPE)
5997 abstract_virtuals_error (decl, TREE_TYPE (type));
5998 else
5999 abstract_virtuals_error (decl, type);
6001 if (TREE_TYPE (decl) == error_mark_node)
6002 /* No initialization required. */
6004 else if (TREE_CODE (decl) == FUNCTION_DECL)
6006 if (init)
6008 if (init == ridpointers[(int)RID_DEFAULT])
6010 /* An out-of-class default definition is defined at
6011 the point where it is explicitly defaulted. */
6012 if (DECL_INITIAL (decl) == error_mark_node)
6013 synthesize_method (decl);
6015 else
6016 error ("function %q#D is initialized like a variable", decl);
6018 /* else no initialization required. */
6020 else if (DECL_EXTERNAL (decl)
6021 && ! (DECL_LANG_SPECIFIC (decl)
6022 && DECL_NOT_REALLY_EXTERN (decl)))
6024 if (init)
6025 DECL_INITIAL (decl) = init;
6027 /* A variable definition. */
6028 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6029 /* Initialize the local variable. */
6030 initialize_local_var (decl, init);
6032 /* If a variable is defined, and then a subsequent
6033 definition with external linkage is encountered, we will
6034 get here twice for the same variable. We want to avoid
6035 calling expand_static_init more than once. For variables
6036 that are not static data members, we can call
6037 expand_static_init only when we actually process the
6038 initializer. It is not legal to redeclare a static data
6039 member, so this issue does not arise in that case. */
6040 else if (var_definition_p && TREE_STATIC (decl))
6041 expand_static_init (decl, init);
6044 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6045 reference, insert it in the statement-tree now. */
6046 if (cleanup)
6047 push_cleanup (decl, cleanup, false);
6049 finish_end:
6050 processing_template_decl = saved_processing_template_decl;
6052 if (was_readonly)
6053 TREE_READONLY (decl) = 1;
6055 /* If this was marked 'used', be sure it will be output. */
6056 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
6057 mark_decl_referenced (decl);
6060 /* Returns a declaration for a VAR_DECL as if:
6062 extern "C" TYPE NAME;
6064 had been seen. Used to create compiler-generated global
6065 variables. */
6067 static tree
6068 declare_global_var (tree name, tree type)
6070 tree decl;
6072 push_to_top_level ();
6073 decl = build_decl (input_location, VAR_DECL, name, type);
6074 TREE_PUBLIC (decl) = 1;
6075 DECL_EXTERNAL (decl) = 1;
6076 DECL_ARTIFICIAL (decl) = 1;
6077 /* If the user has explicitly declared this variable (perhaps
6078 because the code we are compiling is part of a low-level runtime
6079 library), then it is possible that our declaration will be merged
6080 with theirs by pushdecl. */
6081 decl = pushdecl (decl);
6082 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6083 pop_from_top_level ();
6085 return decl;
6088 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6089 if "__cxa_atexit" is not being used) corresponding to the function
6090 to be called when the program exits. */
6092 static tree
6093 get_atexit_fn_ptr_type (void)
6095 tree arg_types;
6096 tree fn_type;
6098 if (!atexit_fn_ptr_type_node)
6100 if (flag_use_cxa_atexit
6101 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6102 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6103 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6104 else
6105 /* The parameter to "atexit" is "void (*)(void)". */
6106 arg_types = void_list_node;
6108 fn_type = build_function_type (void_type_node, arg_types);
6109 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6112 return atexit_fn_ptr_type_node;
6115 /* Returns a pointer to the `atexit' function. Note that if
6116 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6117 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6119 static tree
6120 get_atexit_node (void)
6122 tree atexit_fndecl;
6123 tree arg_types;
6124 tree fn_type;
6125 tree fn_ptr_type;
6126 const char *name;
6127 bool use_aeabi_atexit;
6129 if (atexit_node)
6130 return atexit_node;
6132 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6134 /* The declaration for `__cxa_atexit' is:
6136 int __cxa_atexit (void (*)(void *), void *, void *)
6138 We build up the argument types and then then function type
6139 itself. */
6141 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6142 /* First, build the pointer-to-function type for the first
6143 argument. */
6144 fn_ptr_type = get_atexit_fn_ptr_type ();
6145 /* Then, build the rest of the argument types. */
6146 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6147 if (use_aeabi_atexit)
6149 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6150 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6152 else
6154 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6155 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6157 /* And the final __cxa_atexit type. */
6158 fn_type = build_function_type (integer_type_node, arg_types);
6159 fn_ptr_type = build_pointer_type (fn_type);
6160 if (use_aeabi_atexit)
6161 name = "__aeabi_atexit";
6162 else
6163 name = "__cxa_atexit";
6165 else
6167 /* The declaration for `atexit' is:
6169 int atexit (void (*)());
6171 We build up the argument types and then then function type
6172 itself. */
6173 fn_ptr_type = get_atexit_fn_ptr_type ();
6174 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6175 /* Build the final atexit type. */
6176 fn_type = build_function_type (integer_type_node, arg_types);
6177 name = "atexit";
6180 /* Now, build the function declaration. */
6181 push_lang_context (lang_name_c);
6182 atexit_fndecl = build_library_fn_ptr (name, fn_type);
6183 mark_used (atexit_fndecl);
6184 pop_lang_context ();
6185 atexit_node = decay_conversion (atexit_fndecl);
6187 return atexit_node;
6190 /* Returns the __dso_handle VAR_DECL. */
6192 static tree
6193 get_dso_handle_node (void)
6195 if (dso_handle_node)
6196 return dso_handle_node;
6198 /* Declare the variable. */
6199 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6200 ptr_type_node);
6202 return dso_handle_node;
6205 /* Begin a new function with internal linkage whose job will be simply
6206 to destroy some particular variable. */
6208 static GTY(()) int start_cleanup_cnt;
6210 static tree
6211 start_cleanup_fn (void)
6213 char name[32];
6214 tree fntype;
6215 tree fndecl;
6216 bool use_cxa_atexit = flag_use_cxa_atexit
6217 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6219 push_to_top_level ();
6221 /* No need to mangle this. */
6222 push_lang_context (lang_name_c);
6224 /* Build the name of the function. */
6225 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6226 /* Build the function declaration. */
6227 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6228 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6229 /* It's a function with internal linkage, generated by the
6230 compiler. */
6231 TREE_PUBLIC (fndecl) = 0;
6232 DECL_ARTIFICIAL (fndecl) = 1;
6233 /* Make the function `inline' so that it is only emitted if it is
6234 actually needed. It is unlikely that it will be inlined, since
6235 it is only called via a function pointer, but we avoid unnecessary
6236 emissions this way. */
6237 DECL_DECLARED_INLINE_P (fndecl) = 1;
6238 DECL_INTERFACE_KNOWN (fndecl) = 1;
6239 /* Build the parameter. */
6240 if (use_cxa_atexit)
6242 tree parmdecl;
6244 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6245 DECL_CONTEXT (parmdecl) = fndecl;
6246 TREE_USED (parmdecl) = 1;
6247 DECL_READ_P (parmdecl) = 1;
6248 DECL_ARGUMENTS (fndecl) = parmdecl;
6251 pushdecl (fndecl);
6252 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6254 pop_lang_context ();
6256 return current_function_decl;
6259 /* Finish the cleanup function begun by start_cleanup_fn. */
6261 static void
6262 end_cleanup_fn (void)
6264 expand_or_defer_fn (finish_function (0));
6266 pop_from_top_level ();
6269 /* Generate code to handle the destruction of DECL, an object with
6270 static storage duration. */
6272 tree
6273 register_dtor_fn (tree decl)
6275 tree cleanup;
6276 tree compound_stmt;
6277 tree args;
6278 tree fcall;
6279 tree type;
6280 bool use_dtor;
6282 type = TREE_TYPE (decl);
6283 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6284 return void_zero_node;
6286 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6287 a class object, we can just pass the destructor to
6288 "__cxa_atexit"; we don't have to build a temporary function to do
6289 the cleanup. */
6290 use_dtor = (flag_use_cxa_atexit
6291 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6292 && CLASS_TYPE_P (type));
6293 if (use_dtor)
6295 int idx;
6297 /* Find the destructor. */
6298 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6299 gcc_assert (idx >= 0);
6300 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6301 /* Make sure it is accessible. */
6302 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6304 else
6306 /* Call build_cleanup before we enter the anonymous function so
6307 that any access checks will be done relative to the current
6308 scope, rather than the scope of the anonymous function. */
6309 build_cleanup (decl);
6311 /* Now start the function. */
6312 cleanup = start_cleanup_fn ();
6314 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6315 to the original function, rather than the anonymous one. That
6316 will make the back end think that nested functions are in use,
6317 which causes confusion. */
6318 push_deferring_access_checks (dk_no_check);
6319 fcall = build_cleanup (decl);
6320 pop_deferring_access_checks ();
6322 /* Create the body of the anonymous function. */
6323 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6324 finish_expr_stmt (fcall);
6325 finish_compound_stmt (compound_stmt);
6326 end_cleanup_fn ();
6329 /* Call atexit with the cleanup function. */
6330 mark_used (cleanup);
6331 cleanup = build_address (cleanup);
6332 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6334 tree addr;
6336 if (use_dtor)
6338 /* We must convert CLEANUP to the type that "__cxa_atexit"
6339 expects. */
6340 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6341 /* "__cxa_atexit" will pass the address of DECL to the
6342 cleanup function. */
6343 mark_used (decl);
6344 addr = build_address (decl);
6345 /* The declared type of the parameter to "__cxa_atexit" is
6346 "void *". For plain "T*", we could just let the
6347 machinery in cp_build_function_call convert it -- but if the
6348 type is "cv-qualified T *", then we need to convert it
6349 before passing it in, to avoid spurious errors. */
6350 addr = build_nop (ptr_type_node, addr);
6352 else
6353 /* Since the cleanup functions we build ignore the address
6354 they're given, there's no reason to pass the actual address
6355 in, and, in general, it's cheaper to pass NULL than any
6356 other value. */
6357 addr = null_pointer_node;
6358 args = tree_cons (NULL_TREE,
6359 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6360 tf_warning_or_error),
6361 NULL_TREE);
6362 if (targetm.cxx.use_aeabi_atexit ())
6364 args = tree_cons (NULL_TREE, cleanup, args);
6365 args = tree_cons (NULL_TREE, addr, args);
6367 else
6369 args = tree_cons (NULL_TREE, addr, args);
6370 args = tree_cons (NULL_TREE, cleanup, args);
6373 else
6374 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6375 return cp_build_function_call (get_atexit_node (), args,
6376 tf_warning_or_error);
6379 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6380 is its initializer. Generate code to handle the construction
6381 and destruction of DECL. */
6383 static void
6384 expand_static_init (tree decl, tree init)
6386 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6387 gcc_assert (TREE_STATIC (decl));
6389 /* Some variables require no initialization. */
6390 if (!init
6391 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6392 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6393 return;
6395 if (DECL_FUNCTION_SCOPE_P (decl))
6397 /* Emit code to perform this initialization but once. */
6398 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6399 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6400 tree guard, guard_addr;
6401 tree acquire_fn, release_fn, abort_fn;
6402 tree flag, begin;
6404 /* Emit code to perform this initialization but once. This code
6405 looks like:
6407 static <type> guard;
6408 if (!guard.first_byte) {
6409 if (__cxa_guard_acquire (&guard)) {
6410 bool flag = false;
6411 try {
6412 // Do initialization.
6413 flag = true; __cxa_guard_release (&guard);
6414 // Register variable for destruction at end of program.
6415 } catch {
6416 if (!flag) __cxa_guard_abort (&guard);
6420 Note that the `flag' variable is only set to 1 *after* the
6421 initialization is complete. This ensures that an exception,
6422 thrown during the construction, will cause the variable to
6423 reinitialized when we pass through this code again, as per:
6425 [stmt.dcl]
6427 If the initialization exits by throwing an exception, the
6428 initialization is not complete, so it will be tried again
6429 the next time control enters the declaration.
6431 This process should be thread-safe, too; multiple threads
6432 should not be able to initialize the variable more than
6433 once. */
6435 /* Create the guard variable. */
6436 guard = get_guard (decl);
6438 /* This optimization isn't safe on targets with relaxed memory
6439 consistency. On such targets we force synchronization in
6440 __cxa_guard_acquire. */
6441 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6443 /* Begin the conditional initialization. */
6444 if_stmt = begin_if_stmt ();
6445 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6446 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6449 if (flag_threadsafe_statics)
6451 guard_addr = build_address (guard);
6453 acquire_fn = get_identifier ("__cxa_guard_acquire");
6454 release_fn = get_identifier ("__cxa_guard_release");
6455 abort_fn = get_identifier ("__cxa_guard_abort");
6456 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6458 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6459 void_list_node);
6460 tree vfntype = build_function_type (void_type_node, argtypes);
6461 acquire_fn = push_library_fn
6462 (acquire_fn, build_function_type (integer_type_node, argtypes),
6463 NULL_TREE);
6464 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6465 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6467 else
6469 release_fn = identifier_global_value (release_fn);
6470 abort_fn = identifier_global_value (abort_fn);
6473 inner_if_stmt = begin_if_stmt ();
6474 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6475 inner_if_stmt);
6477 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6478 begin = get_target_expr (boolean_false_node);
6479 flag = TARGET_EXPR_SLOT (begin);
6481 TARGET_EXPR_CLEANUP (begin)
6482 = build3 (COND_EXPR, void_type_node, flag,
6483 void_zero_node,
6484 build_call_n (abort_fn, 1, guard_addr));
6485 CLEANUP_EH_ONLY (begin) = 1;
6487 /* Do the initialization itself. */
6488 init = add_stmt_to_compound (begin, init);
6489 init = add_stmt_to_compound
6490 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6491 init = add_stmt_to_compound
6492 (init, build_call_n (release_fn, 1, guard_addr));
6494 else
6495 init = add_stmt_to_compound (init, set_guard (guard));
6497 /* Use atexit to register a function for destroying this static
6498 variable. */
6499 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6501 finish_expr_stmt (init);
6503 if (flag_threadsafe_statics)
6505 finish_compound_stmt (inner_then_clause);
6506 finish_then_clause (inner_if_stmt);
6507 finish_if_stmt (inner_if_stmt);
6510 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6512 finish_compound_stmt (then_clause);
6513 finish_then_clause (if_stmt);
6514 finish_if_stmt (if_stmt);
6517 else
6518 static_aggregates = tree_cons (init, decl, static_aggregates);
6522 /* Make TYPE a complete type based on INITIAL_VALUE.
6523 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6524 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6525 3 if the initializer list is empty (in pedantic mode). */
6528 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6530 int failure;
6531 tree type, elt_type;
6533 if (initial_value)
6535 unsigned HOST_WIDE_INT i;
6536 tree value;
6538 /* An array of character type can be initialized from a
6539 brace-enclosed string constant.
6541 FIXME: this code is duplicated from reshape_init. Probably
6542 we should just call reshape_init here? */
6543 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6544 && TREE_CODE (initial_value) == CONSTRUCTOR
6545 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6547 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6548 tree value = VEC_index (constructor_elt, v, 0)->value;
6550 if (TREE_CODE (value) == STRING_CST
6551 && VEC_length (constructor_elt, v) == 1)
6552 initial_value = value;
6555 /* If any of the elements are parameter packs, we can't actually
6556 complete this type now because the array size is dependent. */
6557 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6559 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6560 i, value)
6562 if (PACK_EXPANSION_P (value))
6563 return 0;
6568 failure = complete_array_type (ptype, initial_value, do_default);
6570 /* We can create the array before the element type is complete, which
6571 means that we didn't have these two bits set in the original type
6572 either. In completing the type, we are expected to propagate these
6573 bits. See also complete_type which does the same thing for arrays
6574 of fixed size. */
6575 type = *ptype;
6576 if (TYPE_DOMAIN (type))
6578 elt_type = TREE_TYPE (type);
6579 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6580 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6581 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6584 return failure;
6587 /* Return zero if something is declared to be a member of type
6588 CTYPE when in the context of CUR_TYPE. STRING is the error
6589 message to print in that case. Otherwise, quietly return 1. */
6591 static int
6592 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6594 if (ctype && ctype != cur_type)
6596 if (flags == DTOR_FLAG)
6597 error ("destructor for alien class %qT cannot be a member", ctype);
6598 else
6599 error ("constructor for alien class %qT cannot be a member", ctype);
6600 return 0;
6602 return 1;
6605 /* Subroutine of `grokdeclarator'. */
6607 /* Generate errors possibly applicable for a given set of specifiers.
6608 This is for ARM $7.1.2. */
6610 static void
6611 bad_specifiers (tree object,
6612 const char* type,
6613 int virtualp,
6614 int quals,
6615 int inlinep,
6616 int friendp,
6617 int raises)
6619 if (virtualp)
6620 error ("%qD declared as a %<virtual%> %s", object, type);
6621 if (inlinep)
6622 error ("%qD declared as an %<inline%> %s", object, type);
6623 if (quals)
6624 error ("%<const%> and %<volatile%> function specifiers on "
6625 "%qD invalid in %s declaration",
6626 object, type);
6627 if (friendp)
6628 error ("%q+D declared as a friend", object);
6629 if (raises
6630 && (TREE_CODE (object) == TYPE_DECL
6631 || (!TYPE_PTRFN_P (TREE_TYPE (object))
6632 && !TYPE_REFFN_P (TREE_TYPE (object))
6633 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6634 error ("%q+D declared with an exception specification", object);
6637 /* DECL is a member function or static data member and is presently
6638 being defined. Check that the definition is taking place in a
6639 valid namespace. */
6641 static void
6642 check_class_member_definition_namespace (tree decl)
6644 /* These checks only apply to member functions and static data
6645 members. */
6646 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6647 || TREE_CODE (decl) == VAR_DECL);
6648 /* We check for problems with specializations in pt.c in
6649 check_specialization_namespace, where we can issue better
6650 diagnostics. */
6651 if (processing_specialization)
6652 return;
6653 /* There are no restrictions on the placement of
6654 explicit instantiations. */
6655 if (processing_explicit_instantiation)
6656 return;
6657 /* [class.mfct]
6659 A member function definition that appears outside of the
6660 class definition shall appear in a namespace scope enclosing
6661 the class definition.
6663 [class.static.data]
6665 The definition for a static data member shall appear in a
6666 namespace scope enclosing the member's class definition. */
6667 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6668 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6669 decl, DECL_CONTEXT (decl));
6672 /* Build a PARM_DECL for the "this" parameter. TYPE is the
6673 METHOD_TYPE for a non-static member function; QUALS are the
6674 cv-qualifiers that apply to the function. */
6676 tree
6677 build_this_parm (tree type, cp_cv_quals quals)
6679 tree this_type;
6680 tree qual_type;
6681 tree parm;
6682 cp_cv_quals this_quals;
6684 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6685 /* The `this' parameter is implicitly `const'; it cannot be
6686 assigned to. */
6687 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6688 qual_type = cp_build_qualified_type (this_type, this_quals);
6689 parm = build_artificial_parm (this_identifier, qual_type);
6690 cp_apply_type_quals_to_decl (this_quals, parm);
6691 return parm;
6694 /* CTYPE is class type, or null if non-class.
6695 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6696 or METHOD_TYPE.
6697 DECLARATOR is the function's name.
6698 PARMS is a chain of PARM_DECLs for the function.
6699 VIRTUALP is truthvalue of whether the function is virtual or not.
6700 FLAGS are to be passed through to `grokclassfn'.
6701 QUALS are qualifiers indicating whether the function is `const'
6702 or `volatile'.
6703 RAISES is a list of exceptions that this function can raise.
6704 CHECK is 1 if we must find this method in CTYPE, 0 if we should
6705 not look, and -1 if we should not call `grokclassfn' at all.
6707 SFK is the kind of special function (if any) for the new function.
6709 Returns `NULL_TREE' if something goes wrong, after issuing
6710 applicable error messages. */
6712 static tree
6713 grokfndecl (tree ctype,
6714 tree type,
6715 tree declarator,
6716 tree parms,
6717 tree orig_declarator,
6718 int virtualp,
6719 enum overload_flags flags,
6720 cp_cv_quals quals,
6721 tree raises,
6722 int check,
6723 int friendp,
6724 int publicp,
6725 int inlinep,
6726 special_function_kind sfk,
6727 bool funcdef_flag,
6728 int template_count,
6729 tree in_namespace,
6730 tree* attrlist,
6731 location_t location)
6733 tree decl;
6734 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6735 tree t;
6737 if (raises)
6738 type = build_exception_variant (type, raises);
6740 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6742 /* If we have an explicit location, use it, otherwise use whatever
6743 build_lang_decl used (probably input_location). */
6744 if (location != UNKNOWN_LOCATION)
6745 DECL_SOURCE_LOCATION (decl) = location;
6747 if (TREE_CODE (type) == METHOD_TYPE)
6749 tree parm;
6750 parm = build_this_parm (type, quals);
6751 TREE_CHAIN (parm) = parms;
6752 parms = parm;
6754 DECL_ARGUMENTS (decl) = parms;
6755 for (t = parms; t; t = TREE_CHAIN (t))
6756 DECL_CONTEXT (t) = decl;
6757 /* Propagate volatile out from type to decl. */
6758 if (TYPE_VOLATILE (type))
6759 TREE_THIS_VOLATILE (decl) = 1;
6761 /* Setup decl according to sfk. */
6762 switch (sfk)
6764 case sfk_constructor:
6765 case sfk_copy_constructor:
6766 case sfk_move_constructor:
6767 DECL_CONSTRUCTOR_P (decl) = 1;
6768 break;
6769 case sfk_destructor:
6770 DECL_DESTRUCTOR_P (decl) = 1;
6771 break;
6772 default:
6773 break;
6776 /* If pointers to member functions use the least significant bit to
6777 indicate whether a function is virtual, ensure a pointer
6778 to this function will have that bit clear. */
6779 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6780 && TREE_CODE (type) == METHOD_TYPE
6781 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6782 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6784 if (friendp
6785 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6787 if (funcdef_flag)
6788 error
6789 ("defining explicit specialization %qD in friend declaration",
6790 orig_declarator);
6791 else
6793 tree fns = TREE_OPERAND (orig_declarator, 0);
6794 tree args = TREE_OPERAND (orig_declarator, 1);
6796 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6798 /* Something like `template <class T> friend void f<T>()'. */
6799 error ("invalid use of template-id %qD in declaration "
6800 "of primary template",
6801 orig_declarator);
6802 return NULL_TREE;
6806 /* A friend declaration of the form friend void f<>(). Record
6807 the information in the TEMPLATE_ID_EXPR. */
6808 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6810 if (TREE_CODE (fns) == COMPONENT_REF)
6812 /* Due to bison parser ickiness, we will have already looked
6813 up an operator_name or PFUNCNAME within the current class
6814 (see template_id in parse.y). If the current class contains
6815 such a name, we'll get a COMPONENT_REF here. Undo that. */
6817 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6818 == current_class_type);
6819 fns = TREE_OPERAND (fns, 1);
6821 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6822 || TREE_CODE (fns) == OVERLOAD);
6823 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
6825 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6826 if (TREE_PURPOSE (t)
6827 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6829 error ("default arguments are not allowed in declaration "
6830 "of friend template specialization %qD",
6831 decl);
6832 return NULL_TREE;
6835 if (inlinep)
6837 error ("%<inline%> is not allowed in declaration of friend "
6838 "template specialization %qD",
6839 decl);
6840 return NULL_TREE;
6845 /* If this decl has namespace scope, set that up. */
6846 if (in_namespace)
6847 set_decl_namespace (decl, in_namespace, friendp);
6848 else if (!ctype)
6849 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
6851 /* `main' and builtins have implicit 'C' linkage. */
6852 if ((MAIN_NAME_P (declarator)
6853 || (IDENTIFIER_LENGTH (declarator) > 10
6854 && IDENTIFIER_POINTER (declarator)[0] == '_'
6855 && IDENTIFIER_POINTER (declarator)[1] == '_'
6856 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6857 && current_lang_name == lang_name_cplusplus
6858 && ctype == NULL_TREE
6859 /* NULL_TREE means global namespace. */
6860 && DECL_CONTEXT (decl) == NULL_TREE)
6861 SET_DECL_LANGUAGE (decl, lang_c);
6863 /* Should probably propagate const out from type to decl I bet (mrs). */
6864 if (staticp)
6866 DECL_STATIC_FUNCTION_P (decl) = 1;
6867 DECL_CONTEXT (decl) = ctype;
6870 if (ctype)
6872 DECL_CONTEXT (decl) = ctype;
6873 if (funcdef_flag)
6874 check_class_member_definition_namespace (decl);
6877 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6879 if (processing_template_decl)
6880 error ("cannot declare %<::main%> to be a template");
6881 if (inlinep)
6882 error ("cannot declare %<::main%> to be inline");
6883 if (!publicp)
6884 error ("cannot declare %<::main%> to be static");
6885 inlinep = 0;
6886 publicp = 1;
6889 /* Members of anonymous types and local classes have no linkage; make
6890 them internal. If a typedef is made later, this will be changed. */
6891 if (ctype && (TYPE_ANONYMOUS_P (ctype)
6892 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6893 publicp = 0;
6895 if (publicp && cxx_dialect == cxx98)
6897 /* [basic.link]: A name with no linkage (notably, the name of a class
6898 or enumeration declared in a local scope) shall not be used to
6899 declare an entity with linkage.
6901 DR 757 relaxes this restriction for C++0x. */
6902 t = no_linkage_check (TREE_TYPE (decl),
6903 /*relaxed_p=*/false);
6904 if (t)
6906 if (TYPE_ANONYMOUS_P (t))
6908 if (DECL_EXTERN_C_P (decl))
6909 /* Allow this; it's pretty common in C. */;
6910 else
6912 permerror (input_location, "anonymous type with no linkage "
6913 "used to declare function %q#D with linkage",
6914 decl);
6915 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6916 permerror (input_location, "%q+#D does not refer to the unqualified "
6917 "type, so it is not used for linkage",
6918 TYPE_NAME (t));
6921 else
6922 permerror (input_location, "type %qT with no linkage used to "
6923 "declare function %q#D with linkage", t, decl);
6927 TREE_PUBLIC (decl) = publicp;
6928 if (! publicp)
6930 DECL_INTERFACE_KNOWN (decl) = 1;
6931 DECL_NOT_REALLY_EXTERN (decl) = 1;
6934 /* If the declaration was declared inline, mark it as such. */
6935 if (inlinep)
6936 DECL_DECLARED_INLINE_P (decl) = 1;
6937 if (inlinep & 2)
6938 DECL_DECLARED_CONSTEXPR_P (decl) = true;
6940 DECL_EXTERNAL (decl) = 1;
6941 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6943 error (ctype
6944 ? G_("static member function %qD cannot have cv-qualifier")
6945 : G_("non-member function %qD cannot have cv-qualifier"),
6946 decl);
6947 quals = TYPE_UNQUALIFIED;
6950 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6951 && !grok_op_properties (decl, /*complain=*/true))
6952 return NULL_TREE;
6954 if (funcdef_flag)
6955 /* Make the init_value nonzero so pushdecl knows this is not
6956 tentative. error_mark_node is replaced later with the BLOCK. */
6957 DECL_INITIAL (decl) = error_mark_node;
6959 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6960 TREE_NOTHROW (decl) = 1;
6962 /* Caller will do the rest of this. */
6963 if (check < 0)
6964 return decl;
6966 if (ctype != NULL_TREE)
6967 grokclassfn (ctype, decl, flags);
6969 decl = check_explicit_specialization (orig_declarator, decl,
6970 template_count,
6971 2 * funcdef_flag +
6972 4 * (friendp != 0));
6973 if (decl == error_mark_node)
6974 return NULL_TREE;
6976 if (attrlist)
6978 cplus_decl_attributes (&decl, *attrlist, 0);
6979 *attrlist = NULL_TREE;
6982 /* Check main's type after attributes have been applied. */
6983 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6985 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6986 integer_type_node))
6988 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6989 tree newtype;
6990 error ("%<::main%> must return %<int%>");
6991 newtype = build_function_type (integer_type_node, oldtypeargs);
6992 TREE_TYPE (decl) = newtype;
6994 if (warn_main)
6995 check_main_parameter_types (decl);
6998 if (ctype != NULL_TREE
6999 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7000 && check)
7002 tree old_decl = check_classfn (ctype, decl,
7003 (processing_template_decl
7004 > template_class_depth (ctype))
7005 ? current_template_parms
7006 : NULL_TREE);
7008 if (old_decl == error_mark_node)
7009 return NULL_TREE;
7011 if (old_decl)
7013 tree ok;
7014 tree pushed_scope;
7016 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7017 /* Because grokfndecl is always supposed to return a
7018 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7019 here. We depend on our callers to figure out that its
7020 really a template that's being returned. */
7021 old_decl = DECL_TEMPLATE_RESULT (old_decl);
7023 if (DECL_STATIC_FUNCTION_P (old_decl)
7024 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7025 /* Remove the `this' parm added by grokclassfn.
7026 XXX Isn't this done in start_function, too? */
7027 revert_static_member_fn (decl);
7028 if (DECL_ARTIFICIAL (old_decl))
7030 error ("definition of implicitly-declared %qD", old_decl);
7031 return NULL_TREE;
7034 /* Since we've smashed OLD_DECL to its
7035 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
7036 if (TREE_CODE (decl) == TEMPLATE_DECL)
7037 decl = DECL_TEMPLATE_RESULT (decl);
7039 /* Attempt to merge the declarations. This can fail, in
7040 the case of some invalid specialization declarations. */
7041 pushed_scope = push_scope (ctype);
7042 ok = duplicate_decls (decl, old_decl, friendp);
7043 if (pushed_scope)
7044 pop_scope (pushed_scope);
7045 if (!ok)
7047 error ("no %q#D member function declared in class %qT",
7048 decl, ctype);
7049 return NULL_TREE;
7051 return old_decl;
7055 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7056 return NULL_TREE;
7058 if (ctype == NULL_TREE || check)
7059 return decl;
7061 if (virtualp)
7062 DECL_VIRTUAL_P (decl) = 1;
7064 return decl;
7067 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
7068 the linkage that DECL will receive in the object file. */
7070 static void
7071 set_linkage_for_static_data_member (tree decl)
7073 /* A static data member always has static storage duration and
7074 external linkage. Note that static data members are forbidden in
7075 local classes -- the only situation in which a class has
7076 non-external linkage. */
7077 TREE_PUBLIC (decl) = 1;
7078 TREE_STATIC (decl) = 1;
7079 /* For non-template classes, static data members are always put
7080 out in exactly those files where they are defined, just as
7081 with ordinary namespace-scope variables. */
7082 if (!processing_template_decl)
7083 DECL_INTERFACE_KNOWN (decl) = 1;
7086 /* Create a VAR_DECL named NAME with the indicated TYPE.
7088 If SCOPE is non-NULL, it is the class type or namespace containing
7089 the variable. If SCOPE is NULL, the variable should is created in
7090 the innermost enclosings scope. */
7092 static tree
7093 grokvardecl (tree type,
7094 tree name,
7095 const cp_decl_specifier_seq *declspecs,
7096 int initialized,
7097 int constp,
7098 tree scope)
7100 tree decl;
7101 tree explicit_scope;
7103 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7105 /* Compute the scope in which to place the variable, but remember
7106 whether or not that scope was explicitly specified by the user. */
7107 explicit_scope = scope;
7108 if (!scope)
7110 /* An explicit "extern" specifier indicates a namespace-scope
7111 variable. */
7112 if (declspecs->storage_class == sc_extern)
7113 scope = current_decl_namespace ();
7114 else if (!at_function_scope_p ())
7115 scope = current_scope ();
7118 if (scope
7119 && (/* If the variable is a namespace-scope variable declared in a
7120 template, we need DECL_LANG_SPECIFIC. */
7121 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7122 /* Similarly for namespace-scope variables with language linkage
7123 other than C++. */
7124 || (TREE_CODE (scope) == NAMESPACE_DECL
7125 && current_lang_name != lang_name_cplusplus)
7126 /* Similarly for static data members. */
7127 || TYPE_P (scope)))
7128 decl = build_lang_decl (VAR_DECL, name, type);
7129 else
7130 decl = build_decl (input_location, VAR_DECL, name, type);
7132 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7133 set_decl_namespace (decl, explicit_scope, 0);
7134 else
7135 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7137 if (declspecs->storage_class == sc_extern)
7139 DECL_THIS_EXTERN (decl) = 1;
7140 DECL_EXTERNAL (decl) = !initialized;
7143 if (DECL_CLASS_SCOPE_P (decl))
7145 set_linkage_for_static_data_member (decl);
7146 /* This function is only called with out-of-class definitions. */
7147 DECL_EXTERNAL (decl) = 0;
7148 check_class_member_definition_namespace (decl);
7150 /* At top level, either `static' or no s.c. makes a definition
7151 (perhaps tentative), and absence of `static' makes it public. */
7152 else if (toplevel_bindings_p ())
7154 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7155 && (DECL_THIS_EXTERN (decl) || ! constp));
7156 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7158 /* Not at top level, only `static' makes a static definition. */
7159 else
7161 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7162 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7165 if (declspecs->specs[(int)ds_thread])
7166 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7168 /* If the type of the decl has no linkage, make sure that we'll
7169 notice that in mark_used. */
7170 if (cxx_dialect > cxx98
7171 && decl_linkage (decl) != lk_none
7172 && DECL_LANG_SPECIFIC (decl) == NULL
7173 && !DECL_EXTERN_C_P (decl)
7174 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7175 retrofit_lang_decl (decl);
7177 if (TREE_PUBLIC (decl))
7179 /* [basic.link]: A name with no linkage (notably, the name of a class
7180 or enumeration declared in a local scope) shall not be used to
7181 declare an entity with linkage.
7183 DR 757 relaxes this restriction for C++0x. */
7184 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7185 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7186 if (t)
7188 if (TYPE_ANONYMOUS_P (t))
7190 if (DECL_EXTERN_C_P (decl))
7191 /* Allow this; it's pretty common in C. */
7193 else
7195 /* DRs 132, 319 and 389 seem to indicate types with
7196 no linkage can only be used to declare extern "C"
7197 entities. Since it's not always an error in the
7198 ISO C++ 90 Standard, we only issue a warning. */
7199 warning (0, "anonymous type with no linkage used to declare "
7200 "variable %q#D with linkage", decl);
7201 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7202 warning (0, "%q+#D does not refer to the unqualified "
7203 "type, so it is not used for linkage",
7204 TYPE_NAME (t));
7207 else
7208 warning (0, "type %qT with no linkage used to declare variable "
7209 "%q#D with linkage", t, decl);
7212 else
7213 DECL_INTERFACE_KNOWN (decl) = 1;
7215 return decl;
7218 /* Create and return a canonical pointer to member function type, for
7219 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
7221 tree
7222 build_ptrmemfunc_type (tree type)
7224 tree field, fields;
7225 tree t;
7226 tree unqualified_variant = NULL_TREE;
7228 if (type == error_mark_node)
7229 return type;
7231 /* If a canonical type already exists for this type, use it. We use
7232 this method instead of type_hash_canon, because it only does a
7233 simple equality check on the list of field members. */
7235 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7236 return t;
7238 /* Make sure that we always have the unqualified pointer-to-member
7239 type first. */
7240 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7241 unqualified_variant
7242 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7244 t = make_class_type (RECORD_TYPE);
7245 xref_basetypes (t, NULL_TREE);
7247 /* Let the front end know this is a pointer to member function... */
7248 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7249 /* ... and not really a class type. */
7250 SET_CLASS_TYPE_P (t, 0);
7252 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7253 fields = field;
7255 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7256 delta_type_node);
7257 TREE_CHAIN (field) = fields;
7258 fields = field;
7260 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7262 /* Zap out the name so that the back end will give us the debugging
7263 information for this anonymous RECORD_TYPE. */
7264 TYPE_NAME (t) = NULL_TREE;
7266 /* If this is not the unqualified form of this pointer-to-member
7267 type, set the TYPE_MAIN_VARIANT for this type to be the
7268 unqualified type. Since they are actually RECORD_TYPEs that are
7269 not variants of each other, we must do this manually.
7270 As we just built a new type there is no need to do yet another copy. */
7271 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7273 int type_quals = cp_type_quals (type);
7274 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7275 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7276 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7277 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7278 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7279 TYPE_NEXT_VARIANT (unqualified_variant) = t;
7280 TREE_TYPE (TYPE_BINFO (t)) = t;
7283 /* Cache this pointer-to-member type so that we can find it again
7284 later. */
7285 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7287 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7288 SET_TYPE_STRUCTURAL_EQUALITY (t);
7289 else if (TYPE_CANONICAL (type) != type)
7290 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7292 return t;
7295 /* Create and return a pointer to data member type. */
7297 tree
7298 build_ptrmem_type (tree class_type, tree member_type)
7300 if (TREE_CODE (member_type) == METHOD_TYPE)
7302 tree arg_types = TYPE_ARG_TYPES (member_type);
7303 cp_cv_quals quals = cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)));
7304 member_type = build_memfn_type (member_type, class_type, quals);
7305 return build_ptrmemfunc_type (build_pointer_type (member_type));
7307 else
7309 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7310 return build_offset_type (class_type, member_type);
7314 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7315 Check to see that the definition is valid. Issue appropriate error
7316 messages. Return 1 if the definition is particularly bad, or 0
7317 otherwise. */
7320 check_static_variable_definition (tree decl, tree type)
7322 /* Motion 10 at San Diego: If a static const integral data member is
7323 initialized with an integral constant expression, the initializer
7324 may appear either in the declaration (within the class), or in
7325 the definition, but not both. If it appears in the class, the
7326 member is a member constant. The file-scope definition is always
7327 required. */
7328 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7330 error ("invalid in-class initialization of static data member "
7331 "of non-integral type %qT",
7332 type);
7333 /* If we just return the declaration, crashes will sometimes
7334 occur. We therefore return void_type_node, as if this were a
7335 friend declaration, to cause callers to completely ignore
7336 this declaration. */
7337 return 1;
7339 else if (!CP_TYPE_CONST_P (type))
7340 error ("ISO C++ forbids in-class initialization of non-const "
7341 "static member %qD",
7342 decl);
7343 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7344 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7345 "%qD of non-integral type %qT", decl, type);
7347 return 0;
7350 /* Given the SIZE (i.e., number of elements) in an array, compute an
7351 appropriate index type for the array. If non-NULL, NAME is the
7352 name of the thing being declared. */
7354 tree
7355 compute_array_index_type (tree name, tree size)
7357 tree type;
7358 tree itype;
7359 tree abi_1_itype = NULL_TREE;
7361 if (error_operand_p (size))
7362 return error_mark_node;
7364 type = TREE_TYPE (size);
7365 /* The array bound must be an integer type. */
7366 if (!dependent_type_p (type) && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7368 if (name)
7369 error ("size of array %qD has non-integral type %qT", name, type);
7370 else
7371 error ("size of array has non-integral type %qT", type);
7372 size = integer_one_node;
7373 type = TREE_TYPE (size);
7376 /* We can only call value_dependent_expression_p on integral constant
7377 expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7378 set if this isn't one. */
7379 if (processing_template_decl
7380 && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7382 /* We cannot do any checking for a SIZE that isn't known to be
7383 constant. Just build the index type and mark that it requires
7384 structural equality checks. */
7385 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7386 size, integer_one_node));
7387 TYPE_DEPENDENT_P (itype) = 1;
7388 TYPE_DEPENDENT_P_VALID (itype) = 1;
7389 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7390 return itype;
7393 if (!abi_version_at_least (2) && processing_template_decl)
7394 /* For abi-1, we handled all instances in templates the same way,
7395 even when they were non-dependent. This affects the manglings
7396 produced. So, we do the normal checking for non-dependent
7397 sizes, but at the end we'll return the same type that abi-1
7398 would have, but with TYPE_CANONICAL set to the "right"
7399 value that the current ABI would provide. */
7400 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7401 size, integer_one_node));
7403 /* The size might be the result of a cast. */
7404 STRIP_TYPE_NOPS (size);
7406 /* It might be a const variable or enumeration constant. */
7407 size = integral_constant_value (size);
7408 if (error_operand_p (size))
7409 return error_mark_node;
7411 /* Normally, the array-bound will be a constant. */
7412 if (TREE_CODE (size) == INTEGER_CST)
7414 /* Check to see if the array bound overflowed. Make that an
7415 error, no matter how generous we're being. */
7416 constant_expression_error (size);
7418 /* An array must have a positive number of elements. */
7419 if (INT_CST_LT (size, integer_zero_node))
7421 if (name)
7422 error ("size of array %qD is negative", name);
7423 else
7424 error ("size of array is negative");
7425 size = integer_one_node;
7427 /* As an extension we allow zero-sized arrays. We always allow
7428 them in system headers because glibc uses them. */
7429 else if (integer_zerop (size) && !in_system_header)
7431 if (name)
7432 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7433 else
7434 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7437 else if (TREE_CONSTANT (size))
7439 /* `(int) &fn' is not a valid array bound. */
7440 if (name)
7441 error ("size of array %qD is not an integral constant-expression",
7442 name);
7443 else
7444 error ("size of array is not an integral constant-expression");
7445 size = integer_one_node;
7447 else if (pedantic && warn_vla != 0)
7449 if (name)
7450 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7451 else
7452 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7454 else if (warn_vla > 0)
7456 if (name)
7457 warning (OPT_Wvla,
7458 "variable length array %qD is used", name);
7459 else
7460 warning (OPT_Wvla,
7461 "variable length array is used");
7464 if (processing_template_decl && !TREE_CONSTANT (size))
7465 /* A variable sized array. */
7466 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7467 else
7469 HOST_WIDE_INT saved_processing_template_decl;
7471 /* Compute the index of the largest element in the array. It is
7472 one less than the number of elements in the array. We save
7473 and restore PROCESSING_TEMPLATE_DECL so that computations in
7474 cp_build_binary_op will be appropriately folded. */
7475 saved_processing_template_decl = processing_template_decl;
7476 processing_template_decl = 0;
7477 itype = cp_build_binary_op (input_location,
7478 MINUS_EXPR,
7479 cp_convert (ssizetype, size),
7480 cp_convert (ssizetype, integer_one_node),
7481 tf_warning_or_error);
7482 itype = fold (itype);
7483 processing_template_decl = saved_processing_template_decl;
7485 if (!TREE_CONSTANT (itype))
7486 /* A variable sized array. */
7487 itype = variable_size (itype);
7488 /* Make sure that there was no overflow when creating to a signed
7489 index type. (For example, on a 32-bit machine, an array with
7490 size 2^32 - 1 is too big.) */
7491 else if (TREE_CODE (itype) == INTEGER_CST
7492 && TREE_OVERFLOW (itype))
7494 error ("overflow in array dimension");
7495 TREE_OVERFLOW (itype) = 0;
7499 /* Create and return the appropriate index type. */
7500 if (abi_1_itype)
7502 tree t = build_index_type (itype);
7503 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7504 return abi_1_itype;
7506 else
7507 return build_index_type (itype);
7510 /* Returns the scope (if any) in which the entity declared by
7511 DECLARATOR will be located. If the entity was declared with an
7512 unqualified name, NULL_TREE is returned. */
7514 tree
7515 get_scope_of_declarator (const cp_declarator *declarator)
7517 while (declarator && declarator->kind != cdk_id)
7518 declarator = declarator->declarator;
7520 /* If the declarator-id is a SCOPE_REF, the scope in which the
7521 declaration occurs is the first operand. */
7522 if (declarator
7523 && declarator->u.id.qualifying_scope)
7524 return declarator->u.id.qualifying_scope;
7526 /* Otherwise, the declarator is not a qualified name; the entity will
7527 be declared in the current scope. */
7528 return NULL_TREE;
7531 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7532 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7533 with this type. */
7535 static tree
7536 create_array_type_for_decl (tree name, tree type, tree size)
7538 tree itype = NULL_TREE;
7540 /* If things have already gone awry, bail now. */
7541 if (type == error_mark_node || size == error_mark_node)
7542 return error_mark_node;
7544 /* If there are some types which cannot be array elements,
7545 issue an error-message and return. */
7546 switch (TREE_CODE (type))
7548 case VOID_TYPE:
7549 if (name)
7550 error ("declaration of %qD as array of void", name);
7551 else
7552 error ("creating array of void");
7553 return error_mark_node;
7555 case FUNCTION_TYPE:
7556 if (name)
7557 error ("declaration of %qD as array of functions", name);
7558 else
7559 error ("creating array of functions");
7560 return error_mark_node;
7562 case REFERENCE_TYPE:
7563 if (name)
7564 error ("declaration of %qD as array of references", name);
7565 else
7566 error ("creating array of references");
7567 return error_mark_node;
7569 case METHOD_TYPE:
7570 if (name)
7571 error ("declaration of %qD as array of function members", name);
7572 else
7573 error ("creating array of function members");
7574 return error_mark_node;
7576 default:
7577 break;
7580 /* [dcl.array]
7582 The constant expressions that specify the bounds of the arrays
7583 can be omitted only for the first member of the sequence. */
7584 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7586 if (name)
7587 error ("declaration of %qD as multidimensional array must "
7588 "have bounds for all dimensions except the first",
7589 name);
7590 else
7591 error ("multidimensional array must have bounds for all "
7592 "dimensions except the first");
7594 return error_mark_node;
7597 /* Figure out the index type for the array. */
7598 if (size)
7599 itype = compute_array_index_type (name, size);
7601 /* [dcl.array]
7602 T is called the array element type; this type shall not be [...] an
7603 abstract class type. */
7604 abstract_virtuals_error (name, type);
7606 return build_cplus_array_type (type, itype);
7609 /* Check that it's OK to declare a function with the indicated TYPE.
7610 SFK indicates the kind of special function (if any) that this
7611 function is. OPTYPE is the type given in a conversion operator
7612 declaration, or the class type for a constructor/destructor.
7613 Returns the actual return type of the function; that
7614 may be different than TYPE if an error occurs, or for certain
7615 special functions. */
7617 static tree
7618 check_special_function_return_type (special_function_kind sfk,
7619 tree type,
7620 tree optype)
7622 switch (sfk)
7624 case sfk_constructor:
7625 if (type)
7626 error ("return type specification for constructor invalid");
7628 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7629 type = build_pointer_type (optype);
7630 else
7631 type = void_type_node;
7632 break;
7634 case sfk_destructor:
7635 if (type)
7636 error ("return type specification for destructor invalid");
7637 /* We can't use the proper return type here because we run into
7638 problems with ambiguous bases and covariant returns.
7639 Java classes are left unchanged because (void *) isn't a valid
7640 Java type, and we don't want to change the Java ABI. */
7641 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7642 type = build_pointer_type (void_type_node);
7643 else
7644 type = void_type_node;
7645 break;
7647 case sfk_conversion:
7648 if (type)
7649 error ("return type specified for %<operator %T%>", optype);
7650 type = optype;
7651 break;
7653 default:
7654 gcc_unreachable ();
7657 return type;
7660 /* A variable or data member (whose unqualified name is IDENTIFIER)
7661 has been declared with the indicated TYPE. If the TYPE is not
7662 acceptable, issue an error message and return a type to use for
7663 error-recovery purposes. */
7665 tree
7666 check_var_type (tree identifier, tree type)
7668 if (VOID_TYPE_P (type))
7670 if (!identifier)
7671 error ("unnamed variable or field declared void");
7672 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7674 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7675 error ("variable or field %qE declared void", identifier);
7677 else
7678 error ("variable or field declared void");
7679 type = error_mark_node;
7682 return type;
7685 /* Given declspecs and a declarator (abstract or otherwise), determine
7686 the name and type of the object declared and construct a DECL node
7687 for it.
7689 DECLSPECS points to the representation of declaration-specifier
7690 sequence that precedes declarator.
7692 DECL_CONTEXT says which syntactic context this declaration is in:
7693 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7694 FUNCDEF for a function definition. Like NORMAL but a few different
7695 error messages in each case. Return value may be zero meaning
7696 this definition is too screwy to try to parse.
7697 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7698 handle member functions (which have FIELD context).
7699 Return value may be zero meaning this definition is too screwy to
7700 try to parse.
7701 PARM for a parameter declaration (either within a function prototype
7702 or before a function body). Make a PARM_DECL, or return void_type_node.
7703 TPARM for a template parameter declaration.
7704 CATCHPARM for a parameter declaration before a catch clause.
7705 TYPENAME if for a typename (in a cast or sizeof).
7706 Don't make a DECL node; just return the ..._TYPE node.
7707 FIELD for a struct or union field; make a FIELD_DECL.
7708 BITFIELD for a field with specified width.
7710 INITIALIZED is as for start_decl.
7712 ATTRLIST is a pointer to the list of attributes, which may be NULL
7713 if there are none; *ATTRLIST may be modified if attributes from inside
7714 the declarator should be applied to the declaration.
7716 When this function is called, scoping variables (such as
7717 CURRENT_CLASS_TYPE) should reflect the scope in which the
7718 declaration occurs, not the scope in which the new declaration will
7719 be placed. For example, on:
7721 void S::f() { ... }
7723 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7724 should not be `S'.
7726 Returns a DECL (if a declarator is present), a TYPE (if there is no
7727 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7728 error occurs. */
7730 tree
7731 grokdeclarator (const cp_declarator *declarator,
7732 const cp_decl_specifier_seq *declspecs,
7733 enum decl_context decl_context,
7734 int initialized,
7735 tree* attrlist)
7737 tree type = NULL_TREE;
7738 int longlong = 0;
7739 int virtualp, explicitp, friendp, inlinep, staticp;
7740 int explicit_int = 0;
7741 int explicit_char = 0;
7742 int defaulted_int = 0;
7743 tree dependent_name = NULL_TREE;
7745 tree typedef_decl = NULL_TREE;
7746 const char *name = NULL;
7747 tree typedef_type = NULL_TREE;
7748 /* True if this declarator is a function definition. */
7749 bool funcdef_flag = false;
7750 cp_declarator_kind innermost_code = cdk_error;
7751 int bitfield = 0;
7752 #if 0
7753 /* See the code below that used this. */
7754 tree decl_attr = NULL_TREE;
7755 #endif
7757 /* Keep track of what sort of function is being processed
7758 so that we can warn about default return values, or explicit
7759 return values which do not match prescribed defaults. */
7760 special_function_kind sfk = sfk_none;
7762 tree dname = NULL_TREE;
7763 tree ctor_return_type = NULL_TREE;
7764 enum overload_flags flags = NO_SPECIAL;
7765 /* cv-qualifiers that apply to the declarator, for a declaration of
7766 a member function. */
7767 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7768 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7769 int type_quals;
7770 tree raises = NULL_TREE;
7771 int template_count = 0;
7772 tree returned_attrs = NULL_TREE;
7773 tree parms = NULL_TREE;
7774 const cp_declarator *id_declarator;
7775 /* The unqualified name of the declarator; either an
7776 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7777 tree unqualified_id;
7778 /* The class type, if any, in which this entity is located,
7779 or NULL_TREE if none. Note that this value may be different from
7780 the current class type; for example if an attempt is made to declare
7781 "A::f" inside "B", this value will be "A". */
7782 tree ctype = current_class_type;
7783 /* The NAMESPACE_DECL for the namespace in which this entity is
7784 located. If an unqualified name is used to declare the entity,
7785 this value will be NULL_TREE, even if the entity is located at
7786 namespace scope. */
7787 tree in_namespace = NULL_TREE;
7788 cp_storage_class storage_class;
7789 bool unsigned_p, signed_p, short_p, long_p, thread_p;
7790 bool type_was_error_mark_node = false;
7791 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7792 bool template_type_arg = false;
7793 bool template_parm_flag = false;
7794 bool constexpr_p = declspecs->specs[(int) ds_constexpr];
7795 const char *errmsg;
7797 signed_p = declspecs->specs[(int)ds_signed];
7798 unsigned_p = declspecs->specs[(int)ds_unsigned];
7799 short_p = declspecs->specs[(int)ds_short];
7800 long_p = declspecs->specs[(int)ds_long];
7801 longlong = declspecs->specs[(int)ds_long] >= 2;
7802 thread_p = declspecs->specs[(int)ds_thread];
7804 if (decl_context == FUNCDEF)
7805 funcdef_flag = true, decl_context = NORMAL;
7806 else if (decl_context == MEMFUNCDEF)
7807 funcdef_flag = true, decl_context = FIELD;
7808 else if (decl_context == BITFIELD)
7809 bitfield = 1, decl_context = FIELD;
7810 else if (decl_context == TEMPLATE_TYPE_ARG)
7811 template_type_arg = true, decl_context = TYPENAME;
7812 else if (decl_context == TPARM)
7813 template_parm_flag = true, decl_context = PARM;
7815 if (initialized > 1)
7816 funcdef_flag = true;
7818 /* Look inside a declarator for the name being declared
7819 and get it as a string, for an error message. */
7820 for (id_declarator = declarator;
7821 id_declarator;
7822 id_declarator = id_declarator->declarator)
7824 if (id_declarator->kind != cdk_id)
7825 innermost_code = id_declarator->kind;
7827 switch (id_declarator->kind)
7829 case cdk_function:
7830 if (id_declarator->declarator
7831 && id_declarator->declarator->kind == cdk_id)
7833 sfk = id_declarator->declarator->u.id.sfk;
7834 if (sfk == sfk_destructor)
7835 flags = DTOR_FLAG;
7837 break;
7839 case cdk_id:
7841 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7842 tree decl = id_declarator->u.id.unqualified_name;
7843 if (!decl)
7844 break;
7845 if (qualifying_scope)
7847 if (at_function_scope_p ())
7849 /* [dcl.meaning]
7851 A declarator-id shall not be qualified except
7852 for ...
7854 None of the cases are permitted in block
7855 scope. */
7856 if (qualifying_scope == global_namespace)
7857 error ("invalid use of qualified-name %<::%D%>",
7858 decl);
7859 else if (TYPE_P (qualifying_scope))
7860 error ("invalid use of qualified-name %<%T::%D%>",
7861 qualifying_scope, decl);
7862 else
7863 error ("invalid use of qualified-name %<%D::%D%>",
7864 qualifying_scope, decl);
7865 return error_mark_node;
7867 else if (TYPE_P (qualifying_scope))
7869 ctype = qualifying_scope;
7870 if (innermost_code != cdk_function
7871 && current_class_type
7872 && !UNIQUELY_DERIVED_FROM_P (ctype,
7873 current_class_type))
7875 error ("type %qT is not derived from type %qT",
7876 ctype, current_class_type);
7877 return error_mark_node;
7880 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7881 in_namespace = qualifying_scope;
7883 switch (TREE_CODE (decl))
7885 case BIT_NOT_EXPR:
7887 tree type;
7889 if (innermost_code != cdk_function)
7891 error ("declaration of %qD as non-function", decl);
7892 return error_mark_node;
7894 else if (!qualifying_scope
7895 && !(current_class_type && at_class_scope_p ()))
7897 error ("declaration of %qD as non-member", decl);
7898 return error_mark_node;
7901 type = TREE_OPERAND (decl, 0);
7902 if (TYPE_P (type))
7903 type = constructor_name (type);
7904 name = identifier_to_locale (IDENTIFIER_POINTER (type));
7905 dname = decl;
7907 break;
7909 case TEMPLATE_ID_EXPR:
7911 tree fns = TREE_OPERAND (decl, 0);
7913 dname = fns;
7914 if (TREE_CODE (dname) != IDENTIFIER_NODE)
7916 gcc_assert (is_overloaded_fn (dname));
7917 dname = DECL_NAME (get_first_fn (dname));
7920 /* Fall through. */
7922 case IDENTIFIER_NODE:
7923 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7924 dname = decl;
7926 if (C_IS_RESERVED_WORD (dname))
7928 error ("declarator-id missing; using reserved word %qD",
7929 dname);
7930 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7932 else if (!IDENTIFIER_TYPENAME_P (dname))
7933 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7934 else
7936 gcc_assert (flags == NO_SPECIAL);
7937 flags = TYPENAME_FLAG;
7938 ctor_return_type = TREE_TYPE (dname);
7939 sfk = sfk_conversion;
7940 if (is_typename_at_global_scope (dname))
7941 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7942 else
7943 name = "<invalid operator>";
7945 break;
7947 default:
7948 gcc_unreachable ();
7950 break;
7953 case cdk_array:
7954 case cdk_pointer:
7955 case cdk_reference:
7956 case cdk_ptrmem:
7957 break;
7959 case cdk_error:
7960 return error_mark_node;
7962 default:
7963 gcc_unreachable ();
7965 if (id_declarator->kind == cdk_id)
7966 break;
7969 /* [dcl.fct.edf]
7971 The declarator in a function-definition shall have the form
7972 D1 ( parameter-declaration-clause) ... */
7973 if (funcdef_flag && innermost_code != cdk_function)
7975 error ("function definition does not declare parameters");
7976 return error_mark_node;
7979 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7980 && innermost_code != cdk_function
7981 && ! (ctype && !declspecs->any_specifiers_p))
7983 error ("declaration of %qD as non-function", dname);
7984 return error_mark_node;
7987 /* Anything declared one level down from the top level
7988 must be one of the parameters of a function
7989 (because the body is at least two levels down). */
7991 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7992 by not allowing C++ class definitions to specify their parameters
7993 with xdecls (must be spec.d in the parmlist).
7995 Since we now wait to push a class scope until we are sure that
7996 we are in a legitimate method context, we must set oldcname
7997 explicitly (since current_class_name is not yet alive).
7999 We also want to avoid calling this a PARM if it is in a namespace. */
8001 if (decl_context == NORMAL && !toplevel_bindings_p ())
8003 struct cp_binding_level *b = current_binding_level;
8004 current_binding_level = b->level_chain;
8005 if (current_binding_level != 0 && toplevel_bindings_p ())
8006 decl_context = PARM;
8007 current_binding_level = b;
8010 if (name == NULL)
8011 name = decl_context == PARM ? "parameter" : "type name";
8013 if (constexpr_p && declspecs->specs[(int)ds_typedef])
8015 error ("%<constexpr%> cannot appear in a typedef declaration");
8016 return error_mark_node;
8019 /* If there were multiple types specified in the decl-specifier-seq,
8020 issue an error message. */
8021 if (declspecs->multiple_types_p)
8023 error ("two or more data types in declaration of %qs", name);
8024 return error_mark_node;
8027 if (declspecs->conflicting_specifiers_p)
8029 error ("conflicting specifiers in declaration of %qs", name);
8030 return error_mark_node;
8033 /* Extract the basic type from the decl-specifier-seq. */
8034 type = declspecs->type;
8035 if (type == error_mark_node)
8037 type = NULL_TREE;
8038 type_was_error_mark_node = true;
8040 /* If the entire declaration is itself tagged as deprecated then
8041 suppress reports of deprecated items. */
8042 if (type && TREE_DEPRECATED (type)
8043 && deprecated_state != DEPRECATED_SUPPRESS)
8044 warn_deprecated_use (type, NULL_TREE);
8045 if (type && TREE_CODE (type) == TYPE_DECL)
8047 typedef_decl = type;
8048 type = TREE_TYPE (typedef_decl);
8049 if (TREE_DEPRECATED (type)
8050 && DECL_ARTIFICIAL (typedef_decl)
8051 && deprecated_state != DEPRECATED_SUPPRESS)
8052 warn_deprecated_use (type, NULL_TREE);
8054 /* No type at all: default to `int', and set DEFAULTED_INT
8055 because it was not a user-defined typedef. */
8056 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8058 /* These imply 'int'. */
8059 type = integer_type_node;
8060 defaulted_int = 1;
8062 /* Gather flags. */
8063 explicit_int = declspecs->explicit_int_p;
8064 explicit_char = declspecs->explicit_char_p;
8066 #if 0
8067 /* See the code below that used this. */
8068 if (typedef_decl)
8069 decl_attr = DECL_ATTRIBUTES (typedef_decl);
8070 #endif
8071 typedef_type = type;
8074 if (sfk != sfk_conversion)
8075 ctor_return_type = ctype;
8077 if (sfk != sfk_none)
8078 type = check_special_function_return_type (sfk, type,
8079 ctor_return_type);
8080 else if (type == NULL_TREE)
8082 int is_main;
8084 explicit_int = -1;
8086 /* We handle `main' specially here, because 'main () { }' is so
8087 common. With no options, it is allowed. With -Wreturn-type,
8088 it is a warning. It is only an error with -pedantic-errors. */
8089 is_main = (funcdef_flag
8090 && dname && MAIN_NAME_P (dname)
8091 && ctype == NULL_TREE
8092 && in_namespace == NULL_TREE
8093 && current_namespace == global_namespace);
8095 if (type_was_error_mark_node)
8096 /* We've already issued an error, don't complain more. */;
8097 else if (in_system_header || flag_ms_extensions)
8098 /* Allow it, sigh. */;
8099 else if (! is_main)
8100 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8101 else if (pedantic)
8102 pedwarn (input_location, OPT_pedantic,
8103 "ISO C++ forbids declaration of %qs with no type", name);
8104 else
8105 warning (OPT_Wreturn_type,
8106 "ISO C++ forbids declaration of %qs with no type", name);
8108 type = integer_type_node;
8111 ctype = NULL_TREE;
8113 /* Now process the modifiers that were specified
8114 and check for invalid combinations. */
8116 /* Long double is a special combination. */
8117 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8119 long_p = false;
8120 type = build_qualified_type (long_double_type_node,
8121 cp_type_quals (type));
8124 /* Check all other uses of type modifiers. */
8126 if (unsigned_p || signed_p || long_p || short_p)
8128 int ok = 0;
8130 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8131 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8132 else if (signed_p && unsigned_p)
8133 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8134 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8135 error ("%<long long%> invalid for %qs", name);
8136 else if (long_p && TREE_CODE (type) == REAL_TYPE)
8137 error ("%<long%> invalid for %qs", name);
8138 else if (short_p && TREE_CODE (type) == REAL_TYPE)
8139 error ("%<short%> invalid for %qs", name);
8140 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8141 error ("%<long%> or %<short%> invalid for %qs", name);
8142 else if ((long_p || short_p) && explicit_char)
8143 error ("%<long%> or %<short%> specified with char for %qs", name);
8144 else if (long_p && short_p)
8145 error ("%<long%> and %<short%> specified together for %qs", name);
8146 else if (type == char16_type_node || type == char32_type_node)
8148 if (signed_p || unsigned_p)
8149 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8150 else if (short_p || long_p)
8151 error ("%<short%> or %<long%> invalid for %qs", name);
8153 else
8155 ok = 1;
8156 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8158 pedwarn (input_location, OPT_pedantic,
8159 "long, short, signed or unsigned used invalidly for %qs",
8160 name);
8161 if (flag_pedantic_errors)
8162 ok = 0;
8166 /* Discard the type modifiers if they are invalid. */
8167 if (! ok)
8169 unsigned_p = false;
8170 signed_p = false;
8171 long_p = false;
8172 short_p = false;
8173 longlong = 0;
8177 /* Decide whether an integer type is signed or not.
8178 Optionally treat bitfields as signed by default. */
8179 if (unsigned_p
8180 /* [class.bit]
8182 It is implementation-defined whether a plain (neither
8183 explicitly signed or unsigned) char, short, int, or long
8184 bit-field is signed or unsigned.
8186 Naturally, we extend this to long long as well. Note that
8187 this does not include wchar_t. */
8188 || (bitfield && !flag_signed_bitfields
8189 && !signed_p
8190 /* A typedef for plain `int' without `signed' can be
8191 controlled just like plain `int', but a typedef for
8192 `signed int' cannot be so controlled. */
8193 && !(typedef_decl
8194 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8195 && TREE_CODE (type) == INTEGER_TYPE
8196 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8198 if (longlong)
8199 type = long_long_unsigned_type_node;
8200 else if (long_p)
8201 type = long_unsigned_type_node;
8202 else if (short_p)
8203 type = short_unsigned_type_node;
8204 else if (type == char_type_node)
8205 type = unsigned_char_type_node;
8206 else if (typedef_decl)
8207 type = unsigned_type_for (type);
8208 else
8209 type = unsigned_type_node;
8211 else if (signed_p && type == char_type_node)
8212 type = signed_char_type_node;
8213 else if (longlong)
8214 type = long_long_integer_type_node;
8215 else if (long_p)
8216 type = long_integer_type_node;
8217 else if (short_p)
8218 type = short_integer_type_node;
8220 if (declspecs->specs[(int)ds_complex])
8222 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8223 error ("complex invalid for %qs", name);
8224 /* If we just have "complex", it is equivalent to
8225 "complex double", but if any modifiers at all are specified it is
8226 the complex form of TYPE. E.g, "complex short" is
8227 "complex short int". */
8229 else if (defaulted_int && ! longlong
8230 && ! (long_p || short_p || signed_p || unsigned_p))
8231 type = complex_double_type_node;
8232 else if (type == integer_type_node)
8233 type = complex_integer_type_node;
8234 else if (type == float_type_node)
8235 type = complex_float_type_node;
8236 else if (type == double_type_node)
8237 type = complex_double_type_node;
8238 else if (type == long_double_type_node)
8239 type = complex_long_double_type_node;
8240 else
8241 type = build_complex_type (type);
8244 type_quals = TYPE_UNQUALIFIED;
8245 if (declspecs->specs[(int)ds_const])
8246 type_quals |= TYPE_QUAL_CONST;
8247 /* A `constexpr' specifier used in an object declaration declares
8248 the object as `const'. */
8249 if (constexpr_p)
8251 if (innermost_code == cdk_function)
8253 else if (declspecs->specs[(int)ds_const] != 0)
8254 error ("both %<const%> and %<constexpr%> cannot be used here");
8255 else
8256 type_quals |= TYPE_QUAL_CONST;
8258 if (declspecs->specs[(int)ds_volatile])
8259 type_quals |= TYPE_QUAL_VOLATILE;
8260 if (declspecs->specs[(int)ds_restrict])
8261 type_quals |= TYPE_QUAL_RESTRICT;
8262 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8263 error ("qualifiers are not allowed on declaration of %<operator %T%>",
8264 ctor_return_type);
8266 if (TREE_CODE (type) == FUNCTION_TYPE
8267 && type_quals != TYPE_UNQUALIFIED)
8269 /* This was an error in C++98 (cv-qualifiers cannot be added to
8270 a function type), but DR 295 makes the code well-formed by
8271 dropping the extra qualifiers. */
8272 if (pedantic && cxx_dialect == cxx98)
8274 tree bad_type = build_qualified_type (type, type_quals);
8275 pedwarn (input_location, OPT_pedantic,
8276 "ignoring %qV qualifiers added to function type %qT",
8277 bad_type, type);
8279 type_quals = TYPE_UNQUALIFIED;
8281 type_quals |= cp_type_quals (type);
8282 type = cp_build_qualified_type_real
8283 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8284 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8285 /* We might have ignored or rejected some of the qualifiers. */
8286 type_quals = cp_type_quals (type);
8288 staticp = 0;
8289 inlinep = !! declspecs->specs[(int)ds_inline];
8290 virtualp = !! declspecs->specs[(int)ds_virtual];
8291 explicitp = !! declspecs->specs[(int)ds_explicit];
8293 storage_class = declspecs->storage_class;
8294 if (storage_class == sc_static)
8295 staticp = 1 + (decl_context == FIELD);
8297 if (virtualp && staticp == 2)
8299 error ("member %qD cannot be declared both virtual and static", dname);
8300 storage_class = sc_none;
8301 staticp = 0;
8303 friendp = !! declspecs->specs[(int)ds_friend];
8305 if (dependent_name && !friendp)
8307 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8308 return error_mark_node;
8311 /* Issue errors about use of storage classes for parameters. */
8312 if (decl_context == PARM)
8314 if (declspecs->specs[(int)ds_typedef])
8316 error ("typedef declaration invalid in parameter declaration");
8317 return error_mark_node;
8319 else if (template_parm_flag && storage_class != sc_none)
8321 error ("storage class specified for template parameter %qs", name);
8322 return error_mark_node;
8324 else if (storage_class == sc_static
8325 || storage_class == sc_extern
8326 || thread_p)
8327 error ("storage class specifiers invalid in parameter declarations");
8329 if (type_uses_auto (type))
8331 error ("parameter declared %<auto%>");
8332 type = error_mark_node;
8335 /* Function parameters cannot be constexpr. If we saw one, moan
8336 and pretend it wasn't there. */
8337 if (constexpr_p)
8339 error ("a parameter cannot be declared %<constexpr%>");
8340 constexpr_p = 0;
8344 /* Give error if `virtual' is used outside of class declaration. */
8345 if (virtualp
8346 && (current_class_name == NULL_TREE || decl_context != FIELD))
8348 error ("%<virtual%> outside class declaration");
8349 virtualp = 0;
8352 /* Static anonymous unions are dealt with here. */
8353 if (staticp && decl_context == TYPENAME
8354 && declspecs->type
8355 && ANON_AGGR_TYPE_P (declspecs->type))
8356 decl_context = FIELD;
8358 /* Warn about storage classes that are invalid for certain
8359 kinds of declarations (parameters, typenames, etc.). */
8360 if (thread_p
8361 && ((storage_class
8362 && storage_class != sc_extern
8363 && storage_class != sc_static)
8364 || declspecs->specs[(int)ds_typedef]))
8366 error ("multiple storage classes in declaration of %qs", name);
8367 thread_p = false;
8369 if (decl_context != NORMAL
8370 && ((storage_class != sc_none
8371 && storage_class != sc_mutable)
8372 || thread_p))
8374 if ((decl_context == PARM || decl_context == CATCHPARM)
8375 && (storage_class == sc_register
8376 || storage_class == sc_auto))
8378 else if (declspecs->specs[(int)ds_typedef])
8380 else if (decl_context == FIELD
8381 /* C++ allows static class elements. */
8382 && storage_class == sc_static)
8383 /* C++ also allows inlines and signed and unsigned elements,
8384 but in those cases we don't come in here. */
8386 else
8388 if (decl_context == FIELD)
8389 error ("storage class specified for %qs", name);
8390 else
8392 if (decl_context == PARM || decl_context == CATCHPARM)
8393 error ("storage class specified for parameter %qs", name);
8394 else
8395 error ("storage class specified for typename");
8397 if (storage_class == sc_register
8398 || storage_class == sc_auto
8399 || storage_class == sc_extern
8400 || thread_p)
8401 storage_class = sc_none;
8404 else if (storage_class == sc_extern && funcdef_flag
8405 && ! toplevel_bindings_p ())
8406 error ("nested function %qs declared %<extern%>", name);
8407 else if (toplevel_bindings_p ())
8409 if (storage_class == sc_auto)
8410 error ("top-level declaration of %qs specifies %<auto%>", name);
8412 else if (thread_p
8413 && storage_class != sc_extern
8414 && storage_class != sc_static)
8416 error ("function-scope %qs implicitly auto and declared %<__thread%>",
8417 name);
8418 thread_p = false;
8421 if (storage_class && friendp)
8423 error ("storage class specifiers invalid in friend function declarations");
8424 storage_class = sc_none;
8425 staticp = 0;
8428 if (!id_declarator)
8429 unqualified_id = NULL_TREE;
8430 else
8432 unqualified_id = id_declarator->u.id.unqualified_name;
8433 switch (TREE_CODE (unqualified_id))
8435 case BIT_NOT_EXPR:
8436 unqualified_id = TREE_OPERAND (unqualified_id, 0);
8437 if (TYPE_P (unqualified_id))
8438 unqualified_id = constructor_name (unqualified_id);
8439 break;
8441 case IDENTIFIER_NODE:
8442 case TEMPLATE_ID_EXPR:
8443 break;
8445 default:
8446 gcc_unreachable ();
8450 /* Determine the type of the entity declared by recurring on the
8451 declarator. */
8452 for (; declarator; declarator = declarator->declarator)
8454 const cp_declarator *inner_declarator;
8455 tree attrs;
8457 if (type == error_mark_node)
8458 return error_mark_node;
8460 attrs = declarator->attributes;
8461 if (attrs)
8463 int attr_flags;
8465 attr_flags = 0;
8466 if (declarator == NULL || declarator->kind == cdk_id)
8467 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8468 if (declarator->kind == cdk_function)
8469 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8470 if (declarator->kind == cdk_array)
8471 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8472 returned_attrs = decl_attributes (&type,
8473 chainon (returned_attrs, attrs),
8474 attr_flags);
8477 if (declarator->kind == cdk_id)
8478 break;
8480 inner_declarator = declarator->declarator;
8482 switch (declarator->kind)
8484 case cdk_array:
8485 type = create_array_type_for_decl (dname, type,
8486 declarator->u.array.bounds);
8487 break;
8489 case cdk_function:
8491 tree arg_types;
8492 int funcdecl_p;
8494 /* Declaring a function type.
8495 Make sure we have a valid type for the function to return. */
8497 if (type_quals != TYPE_UNQUALIFIED)
8499 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8500 warning (OPT_Wignored_qualifiers,
8501 "type qualifiers ignored on function return type");
8502 /* We now know that the TYPE_QUALS don't apply to the
8503 decl, but to its return type. */
8504 type_quals = TYPE_UNQUALIFIED;
8506 errmsg = targetm.invalid_return_type (type);
8507 if (errmsg)
8509 error (errmsg);
8510 type = integer_type_node;
8513 /* Error about some types functions can't return. */
8515 if (TREE_CODE (type) == FUNCTION_TYPE)
8517 error ("%qs declared as function returning a function", name);
8518 return error_mark_node;
8520 if (TREE_CODE (type) == ARRAY_TYPE)
8522 error ("%qs declared as function returning an array", name);
8523 return error_mark_node;
8526 /* Pick up type qualifiers which should be applied to `this'. */
8527 memfn_quals = declarator->u.function.qualifiers;
8529 /* Pick up the exception specifications. */
8530 raises = declarator->u.function.exception_specification;
8532 /* Say it's a definition only for the CALL_EXPR
8533 closest to the identifier. */
8534 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8536 /* Handle a late-specified return type. */
8537 if (funcdecl_p)
8539 if (type_uses_auto (type))
8541 if (!declarator->u.function.late_return_type)
8543 error ("%qs function uses %<auto%> type specifier without"
8544 " late return type", name);
8545 return error_mark_node;
8547 else if (!is_auto (type))
8549 error ("%qs function with late return type has"
8550 " %qT as its type rather than plain %<auto%>",
8551 name, type);
8552 return error_mark_node;
8555 else if (declarator->u.function.late_return_type)
8557 error ("%qs function with late return type not declared"
8558 " with %<auto%> type specifier", name);
8559 return error_mark_node;
8562 type = splice_late_return_type
8563 (type, declarator->u.function.late_return_type);
8564 if (type == error_mark_node)
8565 return error_mark_node;
8567 if (ctype == NULL_TREE
8568 && decl_context == FIELD
8569 && funcdecl_p
8570 && (friendp == 0 || dname == current_class_name))
8571 ctype = current_class_type;
8573 if (ctype && (sfk == sfk_constructor
8574 || sfk == sfk_destructor))
8576 /* We are within a class's scope. If our declarator name
8577 is the same as the class name, and we are defining
8578 a function, then it is a constructor/destructor, and
8579 therefore returns a void type. */
8581 /* ISO C++ 12.4/2. A destructor may not be declared
8582 const or volatile. A destructor may not be
8583 static.
8585 ISO C++ 12.1. A constructor may not be declared
8586 const or volatile. A constructor may not be
8587 virtual. A constructor may not be static. */
8588 if (staticp == 2)
8589 error ((flags == DTOR_FLAG)
8590 ? "destructor cannot be static member function"
8591 : "constructor cannot be static member function");
8592 if (memfn_quals)
8594 error ((flags == DTOR_FLAG)
8595 ? "destructors may not be cv-qualified"
8596 : "constructors may not be cv-qualified");
8597 memfn_quals = TYPE_UNQUALIFIED;
8600 if (decl_context == FIELD
8601 && !member_function_or_else (ctype,
8602 current_class_type,
8603 flags))
8604 return error_mark_node;
8606 if (flags != DTOR_FLAG)
8608 /* It's a constructor. */
8609 if (explicitp == 1)
8610 explicitp = 2;
8611 if (virtualp)
8613 permerror (input_location, "constructors cannot be declared virtual");
8614 virtualp = 0;
8616 if (decl_context == FIELD
8617 && sfk != sfk_constructor)
8618 return error_mark_node;
8620 if (decl_context == FIELD)
8621 staticp = 0;
8623 else if (friendp)
8625 if (initialized)
8626 error ("can't initialize friend function %qs", name);
8627 if (virtualp)
8629 /* Cannot be both friend and virtual. */
8630 error ("virtual functions cannot be friends");
8631 friendp = 0;
8633 if (decl_context == NORMAL)
8634 error ("friend declaration not in class definition");
8635 if (current_function_decl && funcdef_flag)
8636 error ("can't define friend function %qs in a local "
8637 "class definition",
8638 name);
8640 else if (ctype && sfk == sfk_conversion)
8642 if (explicitp == 1)
8644 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
8645 explicitp = 2;
8649 /* A constexpr non-static member function is implicitly const. */
8650 if (constexpr_p && staticp == 0 && decl_context == FIELD
8651 && sfk != sfk_constructor && sfk != sfk_destructor)
8652 memfn_quals |= TYPE_QUAL_CONST;
8654 arg_types = grokparms (declarator->u.function.parameters,
8655 &parms);
8657 if (inner_declarator
8658 && inner_declarator->kind == cdk_id
8659 && inner_declarator->u.id.sfk == sfk_destructor
8660 && arg_types != void_list_node)
8662 error ("destructors may not have parameters");
8663 arg_types = void_list_node;
8664 parms = NULL_TREE;
8667 type = build_function_type (type, arg_types);
8669 break;
8671 case cdk_pointer:
8672 case cdk_reference:
8673 case cdk_ptrmem:
8674 /* Filter out pointers-to-references and references-to-references.
8675 We can get these if a TYPE_DECL is used. */
8677 if (TREE_CODE (type) == REFERENCE_TYPE)
8679 if (declarator->kind != cdk_reference)
8681 error ("cannot declare pointer to %q#T", type);
8682 type = TREE_TYPE (type);
8685 /* In C++0x, we allow reference to reference declarations
8686 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8687 and template type arguments [14.3.1/4 temp.arg.type]. The
8688 check for direct reference to reference declarations, which
8689 are still forbidden, occurs below. Reasoning behind the change
8690 can be found in DR106, DR540, and the rvalue reference
8691 proposals. */
8692 else if (cxx_dialect == cxx98)
8694 error ("cannot declare reference to %q#T", type);
8695 type = TREE_TYPE (type);
8698 else if (VOID_TYPE_P (type))
8700 if (declarator->kind == cdk_reference)
8701 error ("cannot declare reference to %q#T", type);
8702 else if (declarator->kind == cdk_ptrmem)
8703 error ("cannot declare pointer to %q#T member", type);
8706 /* We now know that the TYPE_QUALS don't apply to the decl,
8707 but to the target of the pointer. */
8708 type_quals = TYPE_UNQUALIFIED;
8710 if (declarator->kind == cdk_ptrmem
8711 && (TREE_CODE (type) == FUNCTION_TYPE
8712 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8714 memfn_quals |= cp_type_quals (type);
8715 type = build_memfn_type (type,
8716 declarator->u.pointer.class_type,
8717 memfn_quals);
8718 memfn_quals = TYPE_UNQUALIFIED;
8721 if (TREE_CODE (type) == FUNCTION_TYPE
8722 && cp_type_quals (type) != TYPE_UNQUALIFIED)
8723 error (declarator->kind == cdk_reference
8724 ? G_("cannot declare reference to qualified function type %qT")
8725 : G_("cannot declare pointer to qualified function type %qT"),
8726 type);
8728 if (declarator->kind == cdk_reference)
8730 /* In C++0x, the type we are creating a reference to might be
8731 a typedef which is itself a reference type. In that case,
8732 we follow the reference collapsing rules in
8733 [7.1.3/8 dcl.typedef] to create the final reference type:
8735 "If a typedef TD names a type that is a reference to a type
8736 T, an attempt to create the type 'lvalue reference to cv TD'
8737 creates the type 'lvalue reference to T,' while an attempt
8738 to create the type "rvalue reference to cv TD' creates the
8739 type TD."
8741 if (!VOID_TYPE_P (type))
8742 type = cp_build_reference_type
8743 ((TREE_CODE (type) == REFERENCE_TYPE
8744 ? TREE_TYPE (type) : type),
8745 (declarator->u.reference.rvalue_ref
8746 && (TREE_CODE(type) != REFERENCE_TYPE
8747 || TYPE_REF_IS_RVALUE (type))));
8749 /* In C++0x, we need this check for direct reference to
8750 reference declarations, which are forbidden by
8751 [8.3.2/5 dcl.ref]. Reference to reference declarations
8752 are only allowed indirectly through typedefs and template
8753 type arguments. Example:
8755 void foo(int & &); // invalid ref-to-ref decl
8757 typedef int & int_ref;
8758 void foo(int_ref &); // valid ref-to-ref decl
8760 if (inner_declarator && inner_declarator->kind == cdk_reference)
8761 error ("cannot declare reference to %q#T, which is not "
8762 "a typedef or a template type argument", type);
8764 else if (TREE_CODE (type) == METHOD_TYPE)
8765 type = build_ptrmemfunc_type (build_pointer_type (type));
8766 else if (declarator->kind == cdk_ptrmem)
8768 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8769 != NAMESPACE_DECL);
8770 if (declarator->u.pointer.class_type == error_mark_node)
8771 /* We will already have complained. */
8772 type = error_mark_node;
8773 else
8774 type = build_ptrmem_type (declarator->u.pointer.class_type,
8775 type);
8777 else
8778 type = build_pointer_type (type);
8780 /* Process a list of type modifier keywords (such as
8781 const or volatile) that were given inside the `*' or `&'. */
8783 if (declarator->u.pointer.qualifiers)
8785 type
8786 = cp_build_qualified_type (type,
8787 declarator->u.pointer.qualifiers);
8788 type_quals = cp_type_quals (type);
8790 ctype = NULL_TREE;
8791 break;
8793 case cdk_error:
8794 break;
8796 default:
8797 gcc_unreachable ();
8801 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8802 && TREE_CODE (type) != FUNCTION_TYPE
8803 && TREE_CODE (type) != METHOD_TYPE)
8805 error ("template-id %qD used as a declarator",
8806 unqualified_id);
8807 unqualified_id = dname;
8810 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8811 qualified with a class-name, turn it into a METHOD_TYPE, unless
8812 we know that the function is static. We take advantage of this
8813 opportunity to do other processing that pertains to entities
8814 explicitly declared to be class members. Note that if DECLARATOR
8815 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8816 would not have exited the loop above. */
8817 if (declarator
8818 && declarator->u.id.qualifying_scope
8819 && TYPE_P (declarator->u.id.qualifying_scope))
8821 tree t;
8823 ctype = declarator->u.id.qualifying_scope;
8824 ctype = TYPE_MAIN_VARIANT (ctype);
8825 t = ctype;
8826 while (t != NULL_TREE && CLASS_TYPE_P (t))
8828 /* You're supposed to have one `template <...>' for every
8829 template class, but you don't need one for a full
8830 specialization. For example:
8832 template <class T> struct S{};
8833 template <> struct S<int> { void f(); };
8834 void S<int>::f () {}
8836 is correct; there shouldn't be a `template <>' for the
8837 definition of `S<int>::f'. */
8838 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8839 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8840 /* T is an explicit (not partial) specialization. All
8841 containing classes must therefore also be explicitly
8842 specialized. */
8843 break;
8844 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8845 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8846 template_count += 1;
8848 t = TYPE_MAIN_DECL (t);
8849 t = DECL_CONTEXT (t);
8852 if (ctype == current_class_type)
8854 if (friendp)
8856 permerror (input_location, "member functions are implicitly friends of their class");
8857 friendp = 0;
8859 else
8860 permerror (declarator->id_loc,
8861 "extra qualification %<%T::%> on member %qs",
8862 ctype, name);
8864 else if (/* If the qualifying type is already complete, then we
8865 can skip the following checks. */
8866 !COMPLETE_TYPE_P (ctype)
8867 && (/* If the function is being defined, then
8868 qualifying type must certainly be complete. */
8869 funcdef_flag
8870 /* A friend declaration of "T::f" is OK, even if
8871 "T" is a template parameter. But, if this
8872 function is not a friend, the qualifying type
8873 must be a class. */
8874 || (!friendp && !CLASS_TYPE_P (ctype))
8875 /* For a declaration, the type need not be
8876 complete, if either it is dependent (since there
8877 is no meaningful definition of complete in that
8878 case) or the qualifying class is currently being
8879 defined. */
8880 || !(dependent_type_p (ctype)
8881 || currently_open_class (ctype)))
8882 /* Check that the qualifying type is complete. */
8883 && !complete_type_or_else (ctype, NULL_TREE))
8884 return error_mark_node;
8885 else if (TREE_CODE (type) == FUNCTION_TYPE)
8887 tree sname = declarator->u.id.unqualified_name;
8888 if (constexpr_p)
8889 memfn_quals |= TYPE_QUAL_CONST;
8891 if (current_class_type
8892 && (!friendp || funcdef_flag))
8894 error (funcdef_flag
8895 ? "cannot define member function %<%T::%s%> within %<%T%>"
8896 : "cannot declare member function %<%T::%s%> within %<%T%>",
8897 ctype, name, current_class_type);
8898 return error_mark_node;
8901 if (TREE_CODE (sname) == IDENTIFIER_NODE
8902 && NEW_DELETE_OPNAME_P (sname))
8903 /* Overloaded operator new and operator delete
8904 are always static functions. */
8906 else
8907 type = build_memfn_type (type, ctype, memfn_quals);
8909 else if (declspecs->specs[(int)ds_typedef]
8910 && current_class_type)
8912 error ("cannot declare member %<%T::%s%> within %qT",
8913 ctype, name, current_class_type);
8914 return error_mark_node;
8918 /* Now TYPE has the actual type. */
8920 if (returned_attrs)
8922 if (attrlist)
8923 *attrlist = chainon (returned_attrs, *attrlist);
8924 else
8925 attrlist = &returned_attrs;
8928 /* Handle parameter packs. */
8929 if (parameter_pack_p)
8931 if (decl_context == PARM)
8932 /* Turn the type into a pack expansion.*/
8933 type = make_pack_expansion (type);
8934 else
8935 error ("non-parameter %qs cannot be a parameter pack", name);
8938 /* Did array size calculations overflow? */
8940 if (TREE_CODE (type) == ARRAY_TYPE
8941 && COMPLETE_TYPE_P (type)
8942 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8943 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8945 error ("size of array %qs is too large", name);
8946 /* If we proceed with the array type as it is, we'll eventually
8947 crash in tree_low_cst(). */
8948 type = error_mark_node;
8951 if ((decl_context == FIELD || decl_context == PARM)
8952 && !processing_template_decl
8953 && variably_modified_type_p (type, NULL_TREE))
8955 if (decl_context == FIELD)
8956 error ("data member may not have variably modified type %qT", type);
8957 else
8958 error ("parameter may not have variably modified type %qT", type);
8959 type = error_mark_node;
8962 if (explicitp == 1 || (explicitp && friendp))
8964 /* [dcl.fct.spec] The explicit specifier shall only be used in
8965 declarations of constructors within a class definition. */
8966 error ("only declarations of constructors can be %<explicit%>");
8967 explicitp = 0;
8970 if (storage_class == sc_mutable)
8972 if (decl_context != FIELD || friendp)
8974 error ("non-member %qs cannot be declared %<mutable%>", name);
8975 storage_class = sc_none;
8977 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8979 error ("non-object member %qs cannot be declared %<mutable%>", name);
8980 storage_class = sc_none;
8982 else if (TREE_CODE (type) == FUNCTION_TYPE
8983 || TREE_CODE (type) == METHOD_TYPE)
8985 error ("function %qs cannot be declared %<mutable%>", name);
8986 storage_class = sc_none;
8988 else if (staticp)
8990 error ("static %qs cannot be declared %<mutable%>", name);
8991 storage_class = sc_none;
8993 else if (type_quals & TYPE_QUAL_CONST)
8995 error ("const %qs cannot be declared %<mutable%>", name);
8996 storage_class = sc_none;
9000 /* If this is declaring a typedef name, return a TYPE_DECL. */
9001 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9003 tree decl;
9005 /* Note that the grammar rejects storage classes
9006 in typenames, fields or parameters. */
9007 if (current_lang_name == lang_name_java)
9008 TYPE_FOR_JAVA (type) = 1;
9010 /* This declaration:
9012 typedef void f(int) const;
9014 declares a function type which is not a member of any
9015 particular class, but which is cv-qualified; for
9016 example "f S::*" declares a pointer to a const-qualified
9017 member function of S. We record the cv-qualification in the
9018 function type. */
9019 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9021 type = cp_build_qualified_type (type, memfn_quals);
9023 /* We have now dealt with these qualifiers. */
9024 memfn_quals = TYPE_UNQUALIFIED;
9027 if (decl_context == FIELD)
9028 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9029 else
9030 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9031 if (id_declarator && declarator->u.id.qualifying_scope) {
9032 error_at (DECL_SOURCE_LOCATION (decl),
9033 "typedef name may not be a nested-name-specifier");
9034 TREE_TYPE (decl) = error_mark_node;
9037 if (decl_context != FIELD)
9039 if (!current_function_decl)
9040 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9041 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9042 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9043 (current_function_decl)))
9044 /* The TYPE_DECL is "abstract" because there will be
9045 clones of this constructor/destructor, and there will
9046 be copies of this TYPE_DECL generated in those
9047 clones. */
9048 DECL_ABSTRACT (decl) = 1;
9050 else if (constructor_name_p (unqualified_id, current_class_type))
9051 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9052 "as enclosing class",
9053 unqualified_id);
9055 /* If the user declares "typedef struct {...} foo" then the
9056 struct will have an anonymous name. Fill that name in now.
9057 Nothing can refer to it, so nothing needs know about the name
9058 change. */
9059 if (type != error_mark_node
9060 && unqualified_id
9061 && TYPE_NAME (type)
9062 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9063 && TYPE_ANONYMOUS_P (type)
9064 && cp_type_quals (type) == TYPE_UNQUALIFIED)
9066 tree t;
9068 /* Replace the anonymous name with the real name everywhere. */
9069 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9071 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9073 debug_hooks->set_name (t, decl);
9074 TYPE_NAME (t) = decl;
9078 if (TYPE_LANG_SPECIFIC (type))
9079 TYPE_WAS_ANONYMOUS (type) = 1;
9081 /* If this is a typedef within a template class, the nested
9082 type is a (non-primary) template. The name for the
9083 template needs updating as well. */
9084 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9085 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9086 = TYPE_IDENTIFIER (type);
9088 /* Adjust linkage now that we aren't anonymous anymore. */
9089 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9090 determine_visibility (TYPE_MAIN_DECL (type));
9092 /* FIXME remangle member functions; member functions of a
9093 type with external linkage have external linkage. */
9096 if (signed_p
9097 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9098 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9100 bad_specifiers (decl, "type", virtualp,
9101 memfn_quals != TYPE_UNQUALIFIED,
9102 inlinep, friendp, raises != NULL_TREE);
9104 return decl;
9107 /* Detect the case of an array type of unspecified size
9108 which came, as such, direct from a typedef name.
9109 We must copy the type, so that the array's domain can be
9110 individually set by the object's initializer. */
9112 if (type && typedef_type
9113 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9114 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9115 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9117 /* Detect where we're using a typedef of function type to declare a
9118 function. PARMS will not be set, so we must create it now. */
9120 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9122 tree decls = NULL_TREE;
9123 tree args;
9125 for (args = TYPE_ARG_TYPES (type);
9126 args && args != void_list_node;
9127 args = TREE_CHAIN (args))
9129 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9131 TREE_CHAIN (decl) = decls;
9132 decls = decl;
9135 parms = nreverse (decls);
9137 if (decl_context != TYPENAME)
9139 /* A cv-qualifier-seq shall only be part of the function type
9140 for a non-static member function. [8.3.5/4 dcl.fct] */
9141 if (cp_type_quals (type) != TYPE_UNQUALIFIED
9142 && (current_class_type == NULL_TREE || staticp) )
9144 error (staticp
9145 ? G_("qualified function types cannot be used to "
9146 "declare static member functions")
9147 : G_("qualified function types cannot be used to "
9148 "declare free functions"));
9149 type = TYPE_MAIN_VARIANT (type);
9152 /* The qualifiers on the function type become the qualifiers on
9153 the non-static member function. */
9154 memfn_quals |= cp_type_quals (type);
9155 type_quals = TYPE_UNQUALIFIED;
9159 /* If this is a type name (such as, in a cast or sizeof),
9160 compute the type and return it now. */
9162 if (decl_context == TYPENAME)
9164 /* Note that the grammar rejects storage classes
9165 in typenames, fields or parameters. */
9166 if (type_quals != TYPE_UNQUALIFIED)
9167 type_quals = TYPE_UNQUALIFIED;
9169 /* Special case: "friend class foo" looks like a TYPENAME context. */
9170 if (friendp)
9172 if (type_quals != TYPE_UNQUALIFIED)
9174 error ("type qualifiers specified for friend class declaration");
9175 type_quals = TYPE_UNQUALIFIED;
9177 if (inlinep)
9179 error ("%<inline%> specified for friend class declaration");
9180 inlinep = 0;
9183 if (!current_aggr)
9185 /* Don't allow friend declaration without a class-key. */
9186 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9187 permerror (input_location, "template parameters cannot be friends");
9188 else if (TREE_CODE (type) == TYPENAME_TYPE)
9189 permerror (input_location, "friend declaration requires class-key, "
9190 "i.e. %<friend class %T::%D%>",
9191 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9192 else
9193 permerror (input_location, "friend declaration requires class-key, "
9194 "i.e. %<friend %#T%>",
9195 type);
9198 /* Only try to do this stuff if we didn't already give up. */
9199 if (type != integer_type_node)
9201 /* A friendly class? */
9202 if (current_class_type)
9203 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9204 /*complain=*/true);
9205 else
9206 error ("trying to make class %qT a friend of global scope",
9207 type);
9209 type = void_type_node;
9212 else if (memfn_quals)
9214 if (ctype == NULL_TREE
9215 && TREE_CODE (type) == METHOD_TYPE)
9216 ctype = TYPE_METHOD_BASETYPE (type);
9218 if (ctype)
9219 type = build_memfn_type (type, ctype, memfn_quals);
9220 /* Core issue #547: need to allow this in template type args. */
9221 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9222 type = cp_build_qualified_type (type, memfn_quals);
9223 else
9224 error ("invalid qualifiers on non-member function type");
9227 return type;
9229 else if (unqualified_id == NULL_TREE && decl_context != PARM
9230 && decl_context != CATCHPARM
9231 && TREE_CODE (type) != UNION_TYPE
9232 && ! bitfield)
9234 error ("abstract declarator %qT used as declaration", type);
9235 return error_mark_node;
9238 /* Only functions may be declared using an operator-function-id. */
9239 if (unqualified_id
9240 && IDENTIFIER_OPNAME_P (unqualified_id)
9241 && TREE_CODE (type) != FUNCTION_TYPE
9242 && TREE_CODE (type) != METHOD_TYPE)
9244 error ("declaration of %qD as non-function", unqualified_id);
9245 return error_mark_node;
9248 /* We don't check parameter types here because we can emit a better
9249 error message later. */
9250 if (decl_context != PARM)
9252 type = check_var_type (unqualified_id, type);
9253 if (type == error_mark_node)
9254 return error_mark_node;
9257 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9258 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9260 if (decl_context == PARM || decl_context == CATCHPARM)
9262 if (ctype || in_namespace)
9263 error ("cannot use %<::%> in parameter declaration");
9265 /* A parameter declared as an array of T is really a pointer to T.
9266 One declared as a function is really a pointer to a function.
9267 One declared as a member is really a pointer to member. */
9269 if (TREE_CODE (type) == ARRAY_TYPE)
9271 /* Transfer const-ness of array into that of type pointed to. */
9272 type = build_pointer_type (TREE_TYPE (type));
9273 type_quals = TYPE_UNQUALIFIED;
9275 else if (TREE_CODE (type) == FUNCTION_TYPE)
9276 type = build_pointer_type (type);
9280 tree decl;
9282 if (decl_context == PARM)
9284 decl = cp_build_parm_decl (unqualified_id, type);
9286 bad_specifiers (decl, "parameter", virtualp,
9287 memfn_quals != TYPE_UNQUALIFIED,
9288 inlinep, friendp, raises != NULL_TREE);
9290 else if (decl_context == FIELD)
9292 /* The C99 flexible array extension. */
9293 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9294 && TYPE_DOMAIN (type) == NULL_TREE)
9296 tree itype = compute_array_index_type (dname, integer_zero_node);
9297 type = build_cplus_array_type (TREE_TYPE (type), itype);
9300 if (type == error_mark_node)
9302 /* Happens when declaring arrays of sizes which
9303 are error_mark_node, for example. */
9304 decl = NULL_TREE;
9306 else if (in_namespace && !friendp)
9308 /* Something like struct S { int N::j; }; */
9309 error ("invalid use of %<::%>");
9310 return error_mark_node;
9312 else if (TREE_CODE (type) == FUNCTION_TYPE)
9314 int publicp = 0;
9315 tree function_context;
9317 if (constexpr_p && !staticp && !friendp
9318 && sfk != sfk_constructor && sfk != sfk_destructor)
9319 memfn_quals |= TYPE_QUAL_CONST;
9321 if (friendp == 0)
9323 if (ctype == NULL_TREE)
9324 ctype = current_class_type;
9326 if (ctype == NULL_TREE)
9328 error ("can't make %qD into a method -- not in a class",
9329 unqualified_id);
9330 return error_mark_node;
9333 /* ``A union may [ ... ] not [ have ] virtual functions.''
9334 ARM 9.5 */
9335 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9337 error ("function %qD declared virtual inside a union",
9338 unqualified_id);
9339 return error_mark_node;
9342 if (NEW_DELETE_OPNAME_P (unqualified_id))
9344 if (virtualp)
9346 error ("%qD cannot be declared virtual, since it "
9347 "is always static",
9348 unqualified_id);
9349 virtualp = 0;
9352 else if (staticp < 2)
9353 type = build_memfn_type (type, ctype, memfn_quals);
9356 /* Check that the name used for a destructor makes sense. */
9357 if (sfk == sfk_destructor)
9359 tree uqname = id_declarator->u.id.unqualified_name;
9361 if (!ctype)
9363 gcc_assert (friendp);
9364 error ("expected qualified name in friend declaration "
9365 "for destructor %qD", uqname);
9366 return error_mark_node;
9369 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9371 error ("declaration of %qD as member of %qT",
9372 uqname, ctype);
9373 return error_mark_node;
9375 if (constexpr_p)
9377 error ("a destructor cannot be %<constexpr%>");
9378 return error_mark_node;
9381 else if (sfk == sfk_constructor && friendp)
9383 error ("expected qualified name in friend declaration "
9384 "for constructor %qD",
9385 id_declarator->u.id.unqualified_name);
9386 return error_mark_node;
9389 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
9390 function_context = (ctype != NULL_TREE) ?
9391 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9392 publicp = (! friendp || ! staticp)
9393 && function_context == NULL_TREE;
9394 decl = grokfndecl (ctype, type,
9395 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9396 ? unqualified_id : dname,
9397 parms,
9398 unqualified_id,
9399 virtualp, flags, memfn_quals, raises,
9400 friendp ? -1 : 0, friendp, publicp,
9401 inlinep | (2 * constexpr_p),
9402 sfk,
9403 funcdef_flag, template_count, in_namespace,
9404 attrlist, declarator->id_loc);
9405 if (decl == NULL_TREE)
9406 return error_mark_node;
9407 #if 0
9408 /* This clobbers the attrs stored in `decl' from `attrlist'. */
9409 /* The decl and setting of decl_attr is also turned off. */
9410 decl = build_decl_attribute_variant (decl, decl_attr);
9411 #endif
9413 /* [class.conv.ctor]
9415 A constructor declared without the function-specifier
9416 explicit that can be called with a single parameter
9417 specifies a conversion from the type of its first
9418 parameter to the type of its class. Such a constructor
9419 is called a converting constructor. */
9420 if (explicitp == 2)
9421 DECL_NONCONVERTING_P (decl) = 1;
9423 else if (TREE_CODE (type) == METHOD_TYPE)
9425 /* We only get here for friend declarations of
9426 members of other classes. */
9427 /* All method decls are public, so tell grokfndecl to set
9428 TREE_PUBLIC, also. */
9429 decl = grokfndecl (ctype, type,
9430 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9431 ? unqualified_id : dname,
9432 parms,
9433 unqualified_id,
9434 virtualp, flags, memfn_quals, raises,
9435 friendp ? -1 : 0, friendp, 1, 0, sfk,
9436 funcdef_flag, template_count, in_namespace,
9437 attrlist,
9438 declarator->id_loc);
9439 if (decl == NULL_TREE)
9440 return error_mark_node;
9442 else if (!staticp && !dependent_type_p (type)
9443 && !COMPLETE_TYPE_P (complete_type (type))
9444 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9446 if (unqualified_id)
9447 error ("field %qD has incomplete type", unqualified_id);
9448 else
9449 error ("name %qT has incomplete type", type);
9451 /* If we're instantiating a template, tell them which
9452 instantiation made the field's type be incomplete. */
9453 if (current_class_type
9454 && TYPE_NAME (current_class_type)
9455 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9456 && declspecs->type
9457 && declspecs->type == type)
9458 error (" in instantiation of template %qT",
9459 current_class_type);
9461 return error_mark_node;
9463 else
9465 if (friendp)
9467 error ("%qE is neither function nor member function; "
9468 "cannot be declared friend", unqualified_id);
9469 friendp = 0;
9471 decl = NULL_TREE;
9474 if (friendp)
9476 /* Friends are treated specially. */
9477 if (ctype == current_class_type)
9478 ; /* We already issued a permerror. */
9479 else if (decl && DECL_NAME (decl))
9481 if (template_class_depth (current_class_type) == 0)
9483 decl = check_explicit_specialization
9484 (unqualified_id, decl, template_count,
9485 2 * funcdef_flag + 4);
9486 if (decl == error_mark_node)
9487 return error_mark_node;
9490 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9491 decl = do_friend (ctype, unqualified_id, decl,
9492 *attrlist, flags,
9493 funcdef_flag);
9494 return decl;
9496 else
9497 return error_mark_node;
9500 /* Structure field. It may not be a function, except for C++. */
9502 if (decl == NULL_TREE)
9504 if (initialized)
9506 if (!staticp)
9508 /* An attempt is being made to initialize a non-static
9509 member. But, from [class.mem]:
9511 4 A member-declarator can contain a
9512 constant-initializer only if it declares a static
9513 member (_class.static_) of integral or enumeration
9514 type, see _class.static.data_.
9516 This used to be relatively common practice, but
9517 the rest of the compiler does not correctly
9518 handle the initialization unless the member is
9519 static so we make it static below. */
9520 permerror (input_location, "ISO C++ forbids initialization of member %qD",
9521 unqualified_id);
9522 permerror (input_location, "making %qD static", unqualified_id);
9523 staticp = 1;
9526 if (uses_template_parms (type))
9527 /* We'll check at instantiation time. */
9529 else if (check_static_variable_definition (unqualified_id,
9530 type))
9531 /* If we just return the declaration, crashes
9532 will sometimes occur. We therefore return
9533 void_type_node, as if this was a friend
9534 declaration, to cause callers to completely
9535 ignore this declaration. */
9536 return error_mark_node;
9539 if (staticp)
9541 /* C++ allows static class members. All other work
9542 for this is done by grokfield. */
9543 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9544 set_linkage_for_static_data_member (decl);
9545 /* Even if there is an in-class initialization, DECL
9546 is considered undefined until an out-of-class
9547 definition is provided. */
9548 DECL_EXTERNAL (decl) = 1;
9550 if (thread_p)
9551 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9553 else
9555 if (constexpr_p)
9556 error ("non-static data member %qE declared %<constexpr%>",
9557 unqualified_id);
9558 decl = build_decl (input_location,
9559 FIELD_DECL, unqualified_id, type);
9560 DECL_NONADDRESSABLE_P (decl) = bitfield;
9561 if (bitfield && !unqualified_id)
9562 TREE_NO_WARNING (decl) = 1;
9564 if (storage_class == sc_mutable)
9566 DECL_MUTABLE_P (decl) = 1;
9567 storage_class = sc_none;
9571 bad_specifiers (decl, "field", virtualp,
9572 memfn_quals != TYPE_UNQUALIFIED,
9573 inlinep, friendp, raises != NULL_TREE);
9576 else if (TREE_CODE (type) == FUNCTION_TYPE
9577 || TREE_CODE (type) == METHOD_TYPE)
9579 tree original_name;
9580 int publicp = 0;
9582 if (!unqualified_id)
9583 return error_mark_node;
9585 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9586 original_name = dname;
9587 else
9588 original_name = unqualified_id;
9590 if (storage_class == sc_auto)
9591 error ("storage class %<auto%> invalid for function %qs", name);
9592 else if (storage_class == sc_register)
9593 error ("storage class %<register%> invalid for function %qs", name);
9594 else if (thread_p)
9595 error ("storage class %<__thread%> invalid for function %qs", name);
9597 /* Function declaration not at top level.
9598 Storage classes other than `extern' are not allowed
9599 and `extern' makes no difference. */
9600 if (! toplevel_bindings_p ()
9601 && (storage_class == sc_static
9602 || declspecs->specs[(int)ds_inline])
9603 && pedantic)
9605 if (storage_class == sc_static)
9606 pedwarn (input_location, OPT_pedantic,
9607 "%<static%> specified invalid for function %qs "
9608 "declared out of global scope", name);
9609 else
9610 pedwarn (input_location, OPT_pedantic,
9611 "%<inline%> specifier invalid for function %qs "
9612 "declared out of global scope", name);
9615 if (ctype != NULL_TREE
9616 && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9618 error ("%q#T is not a class or a namespace", ctype);
9619 ctype = NULL_TREE;
9622 if (ctype == NULL_TREE)
9624 if (virtualp)
9626 error ("virtual non-class function %qs", name);
9627 virtualp = 0;
9629 else if (sfk == sfk_constructor
9630 || sfk == sfk_destructor)
9632 error (funcdef_flag
9633 ? "%qs defined in a non-class scope"
9634 : "%qs declared in a non-class scope", name);
9635 sfk = sfk_none;
9638 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9639 && !NEW_DELETE_OPNAME_P (original_name))
9640 type = build_method_type_directly (ctype,
9641 TREE_TYPE (type),
9642 TYPE_ARG_TYPES (type));
9644 /* Record presence of `static'. */
9645 publicp = (ctype != NULL_TREE
9646 || storage_class == sc_extern
9647 || storage_class != sc_static);
9649 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9650 virtualp, flags, memfn_quals, raises,
9651 1, friendp,
9652 publicp, inlinep | (2 * constexpr_p), sfk,
9653 funcdef_flag,
9654 template_count, in_namespace, attrlist,
9655 declarator->id_loc);
9656 if (decl == NULL_TREE)
9657 return error_mark_node;
9659 if (staticp == 1)
9661 int invalid_static = 0;
9663 /* Don't allow a static member function in a class, and forbid
9664 declaring main to be static. */
9665 if (TREE_CODE (type) == METHOD_TYPE)
9667 permerror (input_location, "cannot declare member function %qD to have "
9668 "static linkage", decl);
9669 invalid_static = 1;
9671 else if (current_function_decl)
9673 /* FIXME need arm citation */
9674 error ("cannot declare static function inside another function");
9675 invalid_static = 1;
9678 if (invalid_static)
9680 staticp = 0;
9681 storage_class = sc_none;
9685 else
9687 /* It's a variable. */
9689 /* An uninitialized decl with `extern' is a reference. */
9690 decl = grokvardecl (type, unqualified_id,
9691 declspecs,
9692 initialized,
9693 (type_quals & TYPE_QUAL_CONST) != 0,
9694 ctype ? ctype : in_namespace);
9695 bad_specifiers (decl, "variable", virtualp,
9696 memfn_quals != TYPE_UNQUALIFIED,
9697 inlinep, friendp, raises != NULL_TREE);
9699 if (ctype)
9701 DECL_CONTEXT (decl) = ctype;
9702 if (staticp == 1)
9704 permerror (input_location, "%<static%> may not be used when defining "
9705 "(as opposed to declaring) a static data member");
9706 staticp = 0;
9707 storage_class = sc_none;
9709 if (storage_class == sc_register && TREE_STATIC (decl))
9711 error ("static member %qD declared %<register%>", decl);
9712 storage_class = sc_none;
9714 if (storage_class == sc_extern && pedantic)
9716 pedwarn (input_location, OPT_pedantic,
9717 "cannot explicitly declare member %q#D to have "
9718 "extern linkage", decl);
9719 storage_class = sc_none;
9724 if (storage_class == sc_extern && initialized && !funcdef_flag)
9726 if (toplevel_bindings_p ())
9728 /* It's common practice (and completely valid) to have a const
9729 be initialized and declared extern. */
9730 if (!(type_quals & TYPE_QUAL_CONST))
9731 warning (0, "%qs initialized and declared %<extern%>", name);
9733 else
9735 error ("%qs has both %<extern%> and initializer", name);
9736 return error_mark_node;
9740 /* Record `register' declaration for warnings on &
9741 and in case doing stupid register allocation. */
9743 if (storage_class == sc_register)
9744 DECL_REGISTER (decl) = 1;
9745 else if (storage_class == sc_extern)
9746 DECL_THIS_EXTERN (decl) = 1;
9747 else if (storage_class == sc_static)
9748 DECL_THIS_STATIC (decl) = 1;
9750 /* Don't forget constexprness. */
9751 if (VAR_OR_FUNCTION_DECL_P (decl))
9752 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9754 /* Record constancy and volatility on the DECL itself . There's
9755 no need to do this when processing a template; we'll do this
9756 for the instantiated declaration based on the type of DECL. */
9757 if (!processing_template_decl)
9758 cp_apply_type_quals_to_decl (type_quals, decl);
9760 return decl;
9764 /* Subroutine of start_function. Ensure that each of the parameter
9765 types (as listed in PARMS) is complete, as is required for a
9766 function definition. */
9768 static void
9769 require_complete_types_for_parms (tree parms)
9771 for (; parms; parms = TREE_CHAIN (parms))
9773 if (dependent_type_p (TREE_TYPE (parms)))
9774 continue;
9775 if (!VOID_TYPE_P (TREE_TYPE (parms))
9776 && complete_type_or_else (TREE_TYPE (parms), parms))
9778 relayout_decl (parms);
9779 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9781 else
9782 /* grokparms or complete_type_or_else will have already issued
9783 an error. */
9784 TREE_TYPE (parms) = error_mark_node;
9788 /* Returns nonzero if T is a local variable. */
9791 local_variable_p (const_tree t)
9793 if ((TREE_CODE (t) == VAR_DECL
9794 /* A VAR_DECL with a context that is a _TYPE is a static data
9795 member. */
9796 && !TYPE_P (CP_DECL_CONTEXT (t))
9797 /* Any other non-local variable must be at namespace scope. */
9798 && !DECL_NAMESPACE_SCOPE_P (t))
9799 || (TREE_CODE (t) == PARM_DECL))
9800 return 1;
9802 return 0;
9805 /* Like local_variable_p, but suitable for use as a tree-walking
9806 function. */
9808 static tree
9809 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9810 void *data ATTRIBUTE_UNUSED)
9812 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9813 return *tp;
9814 else if (TYPE_P (*tp))
9815 *walk_subtrees = 0;
9817 return NULL_TREE;
9821 /* Check that ARG, which is a default-argument expression for a
9822 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
9823 something goes wrong. DECL may also be a _TYPE node, rather than a
9824 DECL, if there is no DECL available. */
9826 tree
9827 check_default_argument (tree decl, tree arg)
9829 tree var;
9830 tree decl_type;
9832 if (TREE_CODE (arg) == DEFAULT_ARG)
9833 /* We get a DEFAULT_ARG when looking at an in-class declaration
9834 with a default argument. Ignore the argument for now; we'll
9835 deal with it after the class is complete. */
9836 return arg;
9838 if (TYPE_P (decl))
9840 decl_type = decl;
9841 decl = NULL_TREE;
9843 else
9844 decl_type = TREE_TYPE (decl);
9846 if (arg == error_mark_node
9847 || decl == error_mark_node
9848 || TREE_TYPE (arg) == error_mark_node
9849 || decl_type == error_mark_node)
9850 /* Something already went wrong. There's no need to check
9851 further. */
9852 return error_mark_node;
9854 /* [dcl.fct.default]
9856 A default argument expression is implicitly converted to the
9857 parameter type. */
9858 if (!TREE_TYPE (arg)
9859 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9861 if (decl)
9862 error ("default argument for %q#D has type %qT",
9863 decl, TREE_TYPE (arg));
9864 else
9865 error ("default argument for parameter of type %qT has type %qT",
9866 decl_type, TREE_TYPE (arg));
9868 return error_mark_node;
9871 /* [dcl.fct.default]
9873 Local variables shall not be used in default argument
9874 expressions.
9876 The keyword `this' shall not be used in a default argument of a
9877 member function. */
9878 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9879 if (var)
9881 error ("default argument %qE uses local variable %qD", arg, var);
9882 return error_mark_node;
9885 /* All is well. */
9886 return arg;
9889 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
9891 static tree
9892 type_is_deprecated (tree type)
9894 enum tree_code code;
9895 if (TREE_DEPRECATED (type))
9896 return type;
9897 if (TYPE_NAME (type)
9898 && TREE_DEPRECATED (TYPE_NAME (type)))
9899 return type;
9901 /* Do warn about using typedefs to a deprecated class. */
9902 if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
9903 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
9905 code = TREE_CODE (type);
9907 if (code == POINTER_TYPE || code == REFERENCE_TYPE
9908 || code == OFFSET_TYPE || code == FUNCTION_TYPE
9909 || code == METHOD_TYPE || code == ARRAY_TYPE)
9910 return type_is_deprecated (TREE_TYPE (type));
9912 if (TYPE_PTRMEMFUNC_P (type))
9913 return type_is_deprecated
9914 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9916 return NULL_TREE;
9919 /* Decode the list of parameter types for a function type.
9920 Given the list of things declared inside the parens,
9921 return a list of types.
9923 If this parameter does not end with an ellipsis, we append
9924 void_list_node.
9926 *PARMS is set to the chain of PARM_DECLs created. */
9928 static tree
9929 grokparms (tree parmlist, tree *parms)
9931 tree result = NULL_TREE;
9932 tree decls = NULL_TREE;
9933 tree parm;
9934 int any_error = 0;
9936 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9938 tree type = NULL_TREE;
9939 tree init = TREE_PURPOSE (parm);
9940 tree decl = TREE_VALUE (parm);
9941 const char *errmsg;
9943 if (parm == void_list_node)
9944 break;
9946 if (! decl || TREE_TYPE (decl) == error_mark_node)
9947 continue;
9949 type = TREE_TYPE (decl);
9950 if (VOID_TYPE_P (type))
9952 if (same_type_p (type, void_type_node)
9953 && DECL_SELF_REFERENCE_P (type)
9954 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9955 /* this is a parmlist of `(void)', which is ok. */
9956 break;
9957 cxx_incomplete_type_error (decl, type);
9958 /* It's not a good idea to actually create parameters of
9959 type `void'; other parts of the compiler assume that a
9960 void type terminates the parameter list. */
9961 type = error_mark_node;
9962 TREE_TYPE (decl) = error_mark_node;
9965 if (type != error_mark_node
9966 && TYPE_FOR_JAVA (type)
9967 && MAYBE_CLASS_TYPE_P (type))
9969 error ("parameter %qD has Java class type", decl);
9970 type = error_mark_node;
9971 TREE_TYPE (decl) = error_mark_node;
9972 init = NULL_TREE;
9975 if (type != error_mark_node
9976 && (errmsg = targetm.invalid_parameter_type (type)))
9978 error (errmsg);
9979 type = error_mark_node;
9980 TREE_TYPE (decl) = error_mark_node;
9983 if (type != error_mark_node)
9985 if (deprecated_state != DEPRECATED_SUPPRESS)
9987 tree deptype = type_is_deprecated (type);
9988 if (deptype)
9989 warn_deprecated_use (deptype, NULL_TREE);
9992 /* Top-level qualifiers on the parameters are
9993 ignored for function types. */
9994 type = cp_build_qualified_type (type, 0);
9995 if (TREE_CODE (type) == METHOD_TYPE)
9997 error ("parameter %qD invalidly declared method type", decl);
9998 type = build_pointer_type (type);
9999 TREE_TYPE (decl) = type;
10001 else if (abstract_virtuals_error (decl, type))
10002 any_error = 1; /* Seems like a good idea. */
10003 else if (POINTER_TYPE_P (type))
10005 /* [dcl.fct]/6, parameter types cannot contain pointers
10006 (references) to arrays of unknown bound. */
10007 tree t = TREE_TYPE (type);
10008 int ptr = TYPE_PTR_P (type);
10010 while (1)
10012 if (TYPE_PTR_P (t))
10013 ptr = 1;
10014 else if (TREE_CODE (t) != ARRAY_TYPE)
10015 break;
10016 else if (!TYPE_DOMAIN (t))
10017 break;
10018 t = TREE_TYPE (t);
10020 if (TREE_CODE (t) == ARRAY_TYPE)
10021 error (ptr
10022 ? G_("parameter %qD includes pointer to array of "
10023 "unknown bound %qT")
10024 : G_("parameter %qD includes reference to array of "
10025 "unknown bound %qT"),
10026 decl, t);
10029 if (any_error)
10030 init = NULL_TREE;
10031 else if (init && !processing_template_decl)
10032 init = check_default_argument (decl, init);
10035 if (TREE_CODE (decl) == PARM_DECL
10036 && FUNCTION_PARAMETER_PACK_P (decl)
10037 && TREE_CHAIN (parm)
10038 && TREE_CHAIN (parm) != void_list_node)
10039 error ("parameter packs must be at the end of the parameter list");
10041 TREE_CHAIN (decl) = decls;
10042 decls = decl;
10043 result = tree_cons (init, type, result);
10045 decls = nreverse (decls);
10046 result = nreverse (result);
10047 if (parm)
10048 result = chainon (result, void_list_node);
10049 *parms = decls;
10051 return result;
10055 /* D is a constructor or overloaded `operator='.
10057 Let T be the class in which D is declared. Then, this function
10058 returns:
10060 -1 if D's is an ill-formed constructor or copy assignment operator
10061 whose first parameter is of type `T'.
10062 0 if D is not a copy constructor or copy assignment
10063 operator.
10064 1 if D is a copy constructor or copy assignment operator whose
10065 first parameter is a reference to non-const qualified T.
10066 2 if D is a copy constructor or copy assignment operator whose
10067 first parameter is a reference to const qualified T.
10069 This function can be used as a predicate. Positive values indicate
10070 a copy constructor and nonzero values indicate a copy assignment
10071 operator. */
10074 copy_fn_p (const_tree d)
10076 tree args;
10077 tree arg_type;
10078 int result = 1;
10080 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10082 if (TREE_CODE (d) == TEMPLATE_DECL
10083 || (DECL_TEMPLATE_INFO (d)
10084 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10085 /* Instantiations of template member functions are never copy
10086 functions. Note that member functions of templated classes are
10087 represented as template functions internally, and we must
10088 accept those as copy functions. */
10089 return 0;
10091 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10092 if (!args)
10093 return 0;
10095 arg_type = TREE_VALUE (args);
10096 if (arg_type == error_mark_node)
10097 return 0;
10099 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10101 /* Pass by value copy assignment operator. */
10102 result = -1;
10104 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10105 && !TYPE_REF_IS_RVALUE (arg_type)
10106 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10108 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10109 result = 2;
10111 else
10112 return 0;
10114 args = TREE_CHAIN (args);
10116 if (args && args != void_list_node && !TREE_PURPOSE (args))
10117 /* There are more non-optional args. */
10118 return 0;
10120 return result;
10123 /* D is a constructor or overloaded `operator='.
10125 Let T be the class in which D is declared. Then, this function
10126 returns true when D is a move constructor or move assignment
10127 operator, false otherwise. */
10129 bool
10130 move_fn_p (const_tree d)
10132 tree args;
10133 tree arg_type;
10134 bool result = false;
10136 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10138 if (cxx_dialect == cxx98)
10139 /* There are no move constructors if we are in C++98 mode. */
10140 return false;
10142 if (TREE_CODE (d) == TEMPLATE_DECL
10143 || (DECL_TEMPLATE_INFO (d)
10144 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10145 /* Instantiations of template member functions are never copy
10146 functions. Note that member functions of templated classes are
10147 represented as template functions internally, and we must
10148 accept those as copy functions. */
10149 return 0;
10151 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10152 if (!args)
10153 return 0;
10155 arg_type = TREE_VALUE (args);
10156 if (arg_type == error_mark_node)
10157 return 0;
10159 if (TREE_CODE (arg_type) == REFERENCE_TYPE
10160 && TYPE_REF_IS_RVALUE (arg_type)
10161 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10162 DECL_CONTEXT (d)))
10163 result = true;
10165 args = TREE_CHAIN (args);
10167 if (args && args != void_list_node && !TREE_PURPOSE (args))
10168 /* There are more non-optional args. */
10169 return false;
10171 return result;
10174 /* Remember any special properties of member function DECL. */
10176 void
10177 grok_special_member_properties (tree decl)
10179 tree class_type;
10181 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10182 return;
10184 class_type = DECL_CONTEXT (decl);
10185 if (DECL_CONSTRUCTOR_P (decl))
10187 int ctor = copy_fn_p (decl);
10189 if (!DECL_ARTIFICIAL (decl))
10190 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10192 if (ctor > 0)
10194 /* [class.copy]
10196 A non-template constructor for class X is a copy
10197 constructor if its first parameter is of type X&, const
10198 X&, volatile X& or const volatile X&, and either there
10199 are no other parameters or else all other parameters have
10200 default arguments. */
10201 TYPE_HAS_INIT_REF (class_type) = 1;
10202 if (user_provided_p (decl))
10203 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
10204 if (ctor > 1)
10205 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
10207 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10209 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10210 if (user_provided_p (decl))
10211 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10213 else if (is_list_ctor (decl))
10214 TYPE_HAS_LIST_CTOR (class_type) = 1;
10216 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10218 /* [class.copy]
10220 A non-template assignment operator for class X is a copy
10221 assignment operator if its parameter is of type X, X&, const
10222 X&, volatile X& or const volatile X&. */
10224 int assop = copy_fn_p (decl);
10226 if (assop)
10228 TYPE_HAS_ASSIGN_REF (class_type) = 1;
10229 if (user_provided_p (decl))
10230 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
10231 if (assop != 1)
10232 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
10237 /* Check a constructor DECL has the correct form. Complains
10238 if the class has a constructor of the form X(X). */
10241 grok_ctor_properties (const_tree ctype, const_tree decl)
10243 int ctor_parm = copy_fn_p (decl);
10245 if (ctor_parm < 0)
10247 /* [class.copy]
10249 A declaration of a constructor for a class X is ill-formed if
10250 its first parameter is of type (optionally cv-qualified) X
10251 and either there are no other parameters or else all other
10252 parameters have default arguments.
10254 We *don't* complain about member template instantiations that
10255 have this form, though; they can occur as we try to decide
10256 what constructor to use during overload resolution. Since
10257 overload resolution will never prefer such a constructor to
10258 the non-template copy constructor (which is either explicitly
10259 or implicitly defined), there's no need to worry about their
10260 existence. Theoretically, they should never even be
10261 instantiated, but that's hard to forestall. */
10262 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10263 ctype, ctype);
10264 return 0;
10267 return 1;
10270 /* An operator with this code is unary, but can also be binary. */
10272 static int
10273 ambi_op_p (enum tree_code code)
10275 return (code == INDIRECT_REF
10276 || code == ADDR_EXPR
10277 || code == UNARY_PLUS_EXPR
10278 || code == NEGATE_EXPR
10279 || code == PREINCREMENT_EXPR
10280 || code == PREDECREMENT_EXPR);
10283 /* An operator with this name can only be unary. */
10285 static int
10286 unary_op_p (enum tree_code code)
10288 return (code == TRUTH_NOT_EXPR
10289 || code == BIT_NOT_EXPR
10290 || code == COMPONENT_REF
10291 || code == TYPE_EXPR);
10294 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
10295 errors are issued for invalid declarations. */
10297 bool
10298 grok_op_properties (tree decl, bool complain)
10300 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10301 tree argtype;
10302 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10303 tree name = DECL_NAME (decl);
10304 enum tree_code operator_code;
10305 int arity;
10306 bool ellipsis_p;
10307 tree class_type;
10309 /* Count the number of arguments and check for ellipsis. */
10310 for (argtype = argtypes, arity = 0;
10311 argtype && argtype != void_list_node;
10312 argtype = TREE_CHAIN (argtype))
10313 ++arity;
10314 ellipsis_p = !argtype;
10316 class_type = DECL_CONTEXT (decl);
10317 if (class_type && !CLASS_TYPE_P (class_type))
10318 class_type = NULL_TREE;
10320 if (DECL_CONV_FN_P (decl))
10321 operator_code = TYPE_EXPR;
10322 else
10325 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
10326 if (ansi_opname (CODE) == name) \
10328 operator_code = (CODE); \
10329 break; \
10331 else if (ansi_assopname (CODE) == name) \
10333 operator_code = (CODE); \
10334 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
10335 break; \
10338 #include "operators.def"
10339 #undef DEF_OPERATOR
10341 gcc_unreachable ();
10343 while (0);
10344 gcc_assert (operator_code != MAX_TREE_CODES);
10345 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10347 if (class_type)
10348 switch (operator_code)
10350 case NEW_EXPR:
10351 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10352 break;
10354 case DELETE_EXPR:
10355 TYPE_GETS_DELETE (class_type) |= 1;
10356 break;
10358 case VEC_NEW_EXPR:
10359 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10360 break;
10362 case VEC_DELETE_EXPR:
10363 TYPE_GETS_DELETE (class_type) |= 2;
10364 break;
10366 default:
10367 break;
10370 /* [basic.std.dynamic.allocation]/1:
10372 A program is ill-formed if an allocation function is declared
10373 in a namespace scope other than global scope or declared static
10374 in global scope.
10376 The same also holds true for deallocation functions. */
10377 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10378 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10380 if (DECL_NAMESPACE_SCOPE_P (decl))
10382 if (CP_DECL_CONTEXT (decl) != global_namespace)
10384 error ("%qD may not be declared within a namespace", decl);
10385 return false;
10387 else if (!TREE_PUBLIC (decl))
10389 error ("%qD may not be declared as static", decl);
10390 return false;
10395 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10397 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10398 DECL_IS_OPERATOR_NEW (decl) = 1;
10400 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10401 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10402 else
10404 /* An operator function must either be a non-static member function
10405 or have at least one parameter of a class, a reference to a class,
10406 an enumeration, or a reference to an enumeration. 13.4.0.6 */
10407 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10409 if (operator_code == TYPE_EXPR
10410 || operator_code == CALL_EXPR
10411 || operator_code == COMPONENT_REF
10412 || operator_code == ARRAY_REF
10413 || operator_code == NOP_EXPR)
10415 error ("%qD must be a nonstatic member function", decl);
10416 return false;
10418 else
10420 tree p;
10422 if (DECL_STATIC_FUNCTION_P (decl))
10424 error ("%qD must be either a non-static member "
10425 "function or a non-member function", decl);
10426 return false;
10429 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10431 tree arg = non_reference (TREE_VALUE (p));
10432 if (arg == error_mark_node)
10433 return false;
10435 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10436 because these checks are performed even on
10437 template functions. */
10438 if (MAYBE_CLASS_TYPE_P (arg)
10439 || TREE_CODE (arg) == ENUMERAL_TYPE)
10440 break;
10443 if (!p || p == void_list_node)
10445 if (complain)
10446 error ("%qD must have an argument of class or "
10447 "enumerated type", decl);
10448 return false;
10453 /* There are no restrictions on the arguments to an overloaded
10454 "operator ()". */
10455 if (operator_code == CALL_EXPR)
10456 return true;
10458 /* Warn about conversion operators that will never be used. */
10459 if (IDENTIFIER_TYPENAME_P (name)
10460 && ! DECL_TEMPLATE_INFO (decl)
10461 && warn_conversion
10462 /* Warn only declaring the function; there is no need to
10463 warn again about out-of-class definitions. */
10464 && class_type == current_class_type)
10466 tree t = TREE_TYPE (name);
10467 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10469 if (ref)
10470 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10472 if (TREE_CODE (t) == VOID_TYPE)
10473 warning (OPT_Wconversion,
10475 ? G_("conversion to a reference to void "
10476 "will never use a type conversion operator")
10477 : G_("conversion to void "
10478 "will never use a type conversion operator"));
10479 else if (class_type)
10481 if (t == class_type)
10482 warning (OPT_Wconversion,
10484 ? G_("conversion to a reference to the same type "
10485 "will never use a type conversion operator")
10486 : G_("conversion to the same type "
10487 "will never use a type conversion operator"));
10488 /* Don't force t to be complete here. */
10489 else if (MAYBE_CLASS_TYPE_P (t)
10490 && COMPLETE_TYPE_P (t)
10491 && DERIVED_FROM_P (t, class_type))
10492 warning (OPT_Wconversion,
10494 ? G_("conversion to a reference to a base class "
10495 "will never use a type conversion operator")
10496 : G_("conversion to a base class "
10497 "will never use a type conversion operator"));
10502 if (operator_code == COND_EXPR)
10504 /* 13.4.0.3 */
10505 error ("ISO C++ prohibits overloading operator ?:");
10506 return false;
10508 else if (ellipsis_p)
10510 error ("%qD must not have variable number of arguments", decl);
10511 return false;
10513 else if (ambi_op_p (operator_code))
10515 if (arity == 1)
10516 /* We pick the one-argument operator codes by default, so
10517 we don't have to change anything. */
10519 else if (arity == 2)
10521 /* If we thought this was a unary operator, we now know
10522 it to be a binary operator. */
10523 switch (operator_code)
10525 case INDIRECT_REF:
10526 operator_code = MULT_EXPR;
10527 break;
10529 case ADDR_EXPR:
10530 operator_code = BIT_AND_EXPR;
10531 break;
10533 case UNARY_PLUS_EXPR:
10534 operator_code = PLUS_EXPR;
10535 break;
10537 case NEGATE_EXPR:
10538 operator_code = MINUS_EXPR;
10539 break;
10541 case PREINCREMENT_EXPR:
10542 operator_code = POSTINCREMENT_EXPR;
10543 break;
10545 case PREDECREMENT_EXPR:
10546 operator_code = POSTDECREMENT_EXPR;
10547 break;
10549 default:
10550 gcc_unreachable ();
10553 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10555 if ((operator_code == POSTINCREMENT_EXPR
10556 || operator_code == POSTDECREMENT_EXPR)
10557 && ! processing_template_decl
10558 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10560 if (methodp)
10561 error ("postfix %qD must take %<int%> as its argument",
10562 decl);
10563 else
10564 error ("postfix %qD must take %<int%> as its second "
10565 "argument", decl);
10566 return false;
10569 else
10571 if (methodp)
10572 error ("%qD must take either zero or one argument", decl);
10573 else
10574 error ("%qD must take either one or two arguments", decl);
10575 return false;
10578 /* More Effective C++ rule 6. */
10579 if (warn_ecpp
10580 && (operator_code == POSTINCREMENT_EXPR
10581 || operator_code == POSTDECREMENT_EXPR
10582 || operator_code == PREINCREMENT_EXPR
10583 || operator_code == PREDECREMENT_EXPR))
10585 tree arg = TREE_VALUE (argtypes);
10586 tree ret = TREE_TYPE (TREE_TYPE (decl));
10587 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10588 arg = TREE_TYPE (arg);
10589 arg = TYPE_MAIN_VARIANT (arg);
10590 if (operator_code == PREINCREMENT_EXPR
10591 || operator_code == PREDECREMENT_EXPR)
10593 if (TREE_CODE (ret) != REFERENCE_TYPE
10594 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10595 arg))
10596 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10597 build_reference_type (arg));
10599 else
10601 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10602 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10606 else if (unary_op_p (operator_code))
10608 if (arity != 1)
10610 if (methodp)
10611 error ("%qD must take %<void%>", decl);
10612 else
10613 error ("%qD must take exactly one argument", decl);
10614 return false;
10617 else /* if (binary_op_p (operator_code)) */
10619 if (arity != 2)
10621 if (methodp)
10622 error ("%qD must take exactly one argument", decl);
10623 else
10624 error ("%qD must take exactly two arguments", decl);
10625 return false;
10628 /* More Effective C++ rule 7. */
10629 if (warn_ecpp
10630 && (operator_code == TRUTH_ANDIF_EXPR
10631 || operator_code == TRUTH_ORIF_EXPR
10632 || operator_code == COMPOUND_EXPR))
10633 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10634 decl);
10637 /* Effective C++ rule 23. */
10638 if (warn_ecpp
10639 && arity == 2
10640 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10641 && (operator_code == PLUS_EXPR
10642 || operator_code == MINUS_EXPR
10643 || operator_code == TRUNC_DIV_EXPR
10644 || operator_code == MULT_EXPR
10645 || operator_code == TRUNC_MOD_EXPR)
10646 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10647 warning (OPT_Weffc__, "%qD should return by value", decl);
10649 /* [over.oper]/8 */
10650 for (; argtypes && argtypes != void_list_node;
10651 argtypes = TREE_CHAIN (argtypes))
10652 if (TREE_PURPOSE (argtypes))
10654 TREE_PURPOSE (argtypes) = NULL_TREE;
10655 if (operator_code == POSTINCREMENT_EXPR
10656 || operator_code == POSTDECREMENT_EXPR)
10658 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
10659 decl);
10661 else
10663 error ("%qD cannot have default arguments", decl);
10664 return false;
10668 return true;
10671 /* Return a string giving the keyword associate with CODE. */
10673 static const char *
10674 tag_name (enum tag_types code)
10676 switch (code)
10678 case record_type:
10679 return "struct";
10680 case class_type:
10681 return "class";
10682 case union_type:
10683 return "union";
10684 case enum_type:
10685 return "enum";
10686 case typename_type:
10687 return "typename";
10688 default:
10689 gcc_unreachable ();
10693 /* Name lookup in an elaborated-type-specifier (after the keyword
10694 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
10695 elaborated-type-specifier is invalid, issue a diagnostic and return
10696 error_mark_node; otherwise, return the *_TYPE to which it referred.
10697 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
10699 tree
10700 check_elaborated_type_specifier (enum tag_types tag_code,
10701 tree decl,
10702 bool allow_template_p)
10704 tree type;
10706 /* In the case of:
10708 struct S { struct S *p; };
10710 name lookup will find the TYPE_DECL for the implicit "S::S"
10711 typedef. Adjust for that here. */
10712 if (DECL_SELF_REFERENCE_P (decl))
10713 decl = TYPE_NAME (TREE_TYPE (decl));
10715 type = TREE_TYPE (decl);
10717 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10718 is false for this case as well. */
10719 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10721 error ("using template type parameter %qT after %qs",
10722 type, tag_name (tag_code));
10723 return error_mark_node;
10725 /* [dcl.type.elab]
10727 If the identifier resolves to a typedef-name or a template
10728 type-parameter, the elaborated-type-specifier is ill-formed.
10730 In other words, the only legitimate declaration to use in the
10731 elaborated type specifier is the implicit typedef created when
10732 the type is declared. */
10733 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10734 && !DECL_SELF_REFERENCE_P (decl)
10735 && tag_code != typename_type)
10737 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10738 error ("%q+D has a previous declaration here", decl);
10739 return error_mark_node;
10741 else if (TREE_CODE (type) != RECORD_TYPE
10742 && TREE_CODE (type) != UNION_TYPE
10743 && tag_code != enum_type
10744 && tag_code != typename_type)
10746 error ("%qT referred to as %qs", type, tag_name (tag_code));
10747 error ("%q+T has a previous declaration here", type);
10748 return error_mark_node;
10750 else if (TREE_CODE (type) != ENUMERAL_TYPE
10751 && tag_code == enum_type)
10753 error ("%qT referred to as enum", type);
10754 error ("%q+T has a previous declaration here", type);
10755 return error_mark_node;
10757 else if (!allow_template_p
10758 && TREE_CODE (type) == RECORD_TYPE
10759 && CLASSTYPE_IS_TEMPLATE (type))
10761 /* If a class template appears as elaborated type specifier
10762 without a template header such as:
10764 template <class T> class C {};
10765 void f(class C); // No template header here
10767 then the required template argument is missing. */
10768 error ("template argument required for %<%s %T%>",
10769 tag_name (tag_code),
10770 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10771 return error_mark_node;
10774 return type;
10777 /* Lookup NAME in elaborate type specifier in scope according to
10778 SCOPE and issue diagnostics if necessary.
10779 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10780 found, and ERROR_MARK_NODE for type error. */
10782 static tree
10783 lookup_and_check_tag (enum tag_types tag_code, tree name,
10784 tag_scope scope, bool template_header_p)
10786 tree t;
10787 tree decl;
10788 if (scope == ts_global)
10790 /* First try ordinary name lookup, ignoring hidden class name
10791 injected via friend declaration. */
10792 decl = lookup_name_prefer_type (name, 2);
10793 /* If that fails, the name will be placed in the smallest
10794 non-class, non-function-prototype scope according to 3.3.1/5.
10795 We may already have a hidden name declared as friend in this
10796 scope. So lookup again but not ignoring hidden names.
10797 If we find one, that name will be made visible rather than
10798 creating a new tag. */
10799 if (!decl)
10800 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10802 else
10803 decl = lookup_type_scope (name, scope);
10805 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10806 decl = DECL_TEMPLATE_RESULT (decl);
10808 if (decl && TREE_CODE (decl) == TYPE_DECL)
10810 /* Look for invalid nested type:
10811 class C {
10812 class C {};
10813 }; */
10814 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10816 error ("%qD has the same name as the class in which it is "
10817 "declared",
10818 decl);
10819 return error_mark_node;
10822 /* Two cases we need to consider when deciding if a class
10823 template is allowed as an elaborated type specifier:
10824 1. It is a self reference to its own class.
10825 2. It comes with a template header.
10827 For example:
10829 template <class T> class C {
10830 class C *c1; // DECL_SELF_REFERENCE_P is true
10831 class D;
10833 template <class U> class C; // template_header_p is true
10834 template <class T> class C<T>::D {
10835 class C *c2; // DECL_SELF_REFERENCE_P is true
10836 }; */
10838 t = check_elaborated_type_specifier (tag_code,
10839 decl,
10840 template_header_p
10841 | DECL_SELF_REFERENCE_P (decl));
10842 return t;
10844 else if (decl && TREE_CODE (decl) == TREE_LIST)
10846 error ("reference to %qD is ambiguous", name);
10847 print_candidates (decl);
10848 return error_mark_node;
10850 else
10851 return NULL_TREE;
10854 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10855 Define the tag as a forward-reference if it is not defined.
10857 If a declaration is given, process it here, and report an error if
10858 multiple declarations are not identical.
10860 SCOPE is TS_CURRENT when this is also a definition. Only look in
10861 the current frame for the name (since C++ allows new names in any
10862 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10863 declaration. Only look beginning from the current scope outward up
10864 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
10866 TEMPLATE_HEADER_P is true when this declaration is preceded by
10867 a set of template parameters. */
10869 tree
10870 xref_tag (enum tag_types tag_code, tree name,
10871 tag_scope scope, bool template_header_p)
10873 enum tree_code code;
10874 tree t;
10875 tree context = NULL_TREE;
10877 timevar_push (TV_NAME_LOOKUP);
10879 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10881 switch (tag_code)
10883 case record_type:
10884 case class_type:
10885 code = RECORD_TYPE;
10886 break;
10887 case union_type:
10888 code = UNION_TYPE;
10889 break;
10890 case enum_type:
10891 code = ENUMERAL_TYPE;
10892 break;
10893 default:
10894 gcc_unreachable ();
10897 /* In case of anonymous name, xref_tag is only called to
10898 make type node and push name. Name lookup is not required. */
10899 if (ANON_AGGRNAME_P (name))
10900 t = NULL_TREE;
10901 else
10902 t = lookup_and_check_tag (tag_code, name,
10903 scope, template_header_p);
10905 if (t == error_mark_node)
10906 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10908 if (scope != ts_current && t && current_class_type
10909 && template_class_depth (current_class_type)
10910 && template_header_p)
10912 /* Since SCOPE is not TS_CURRENT, we are not looking at a
10913 definition of this tag. Since, in addition, we are currently
10914 processing a (member) template declaration of a template
10915 class, we must be very careful; consider:
10917 template <class X>
10918 struct S1
10920 template <class U>
10921 struct S2
10922 { template <class V>
10923 friend struct S1; };
10925 Here, the S2::S1 declaration should not be confused with the
10926 outer declaration. In particular, the inner version should
10927 have a template parameter of level 2, not level 1. This
10928 would be particularly important if the member declaration
10929 were instead:
10931 template <class V = U> friend struct S1;
10933 say, when we should tsubst into `U' when instantiating
10934 S2. On the other hand, when presented with:
10936 template <class T>
10937 struct S1 {
10938 template <class U>
10939 struct S2 {};
10940 template <class U>
10941 friend struct S2;
10944 we must find the inner binding eventually. We
10945 accomplish this by making sure that the new type we
10946 create to represent this declaration has the right
10947 TYPE_CONTEXT. */
10948 context = TYPE_CONTEXT (t);
10949 t = NULL_TREE;
10952 if (! t)
10954 /* If no such tag is yet defined, create a forward-reference node
10955 and record it as the "definition".
10956 When a real declaration of this type is found,
10957 the forward-reference will be altered into a real type. */
10958 if (code == ENUMERAL_TYPE)
10960 error ("use of enum %q#D without previous declaration", name);
10961 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10963 else
10965 t = make_class_type (code);
10966 TYPE_CONTEXT (t) = context;
10967 t = pushtag (name, t, scope);
10970 else
10972 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10974 if (!redeclare_class_template (t, current_template_parms))
10975 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10977 else if (!processing_template_decl
10978 && CLASS_TYPE_P (t)
10979 && CLASSTYPE_IS_TEMPLATE (t))
10981 error ("redeclaration of %qT as a non-template", t);
10982 error ("previous declaration %q+D", t);
10983 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10986 /* Make injected friend class visible. */
10987 if (scope != ts_within_enclosing_non_class
10988 && hidden_name_p (TYPE_NAME (t)))
10990 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10991 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10993 if (TYPE_TEMPLATE_INFO (t))
10995 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10996 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11001 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
11004 tree
11005 xref_tag_from_type (tree old, tree id, tag_scope scope)
11007 enum tag_types tag_kind;
11009 if (TREE_CODE (old) == RECORD_TYPE)
11010 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11011 else
11012 tag_kind = union_type;
11014 if (id == NULL_TREE)
11015 id = TYPE_IDENTIFIER (old);
11017 return xref_tag (tag_kind, id, scope, false);
11020 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11021 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
11022 access_* node, and the TREE_VALUE is the type of the base-class.
11023 Non-NULL TREE_TYPE indicates virtual inheritance.
11025 Returns true if the binfo hierarchy was successfully created,
11026 false if an error was detected. */
11028 bool
11029 xref_basetypes (tree ref, tree base_list)
11031 tree *basep;
11032 tree binfo, base_binfo;
11033 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
11034 unsigned max_bases = 0; /* Maximum direct bases. */
11035 int i;
11036 tree default_access;
11037 tree igo_prev; /* Track Inheritance Graph Order. */
11039 if (ref == error_mark_node)
11040 return false;
11042 /* The base of a derived class is private by default, all others are
11043 public. */
11044 default_access = (TREE_CODE (ref) == RECORD_TYPE
11045 && CLASSTYPE_DECLARED_CLASS (ref)
11046 ? access_private_node : access_public_node);
11048 /* First, make sure that any templates in base-classes are
11049 instantiated. This ensures that if we call ourselves recursively
11050 we do not get confused about which classes are marked and which
11051 are not. */
11052 basep = &base_list;
11053 while (*basep)
11055 tree basetype = TREE_VALUE (*basep);
11057 if (!(processing_template_decl && uses_template_parms (basetype))
11058 && !complete_type_or_else (basetype, NULL))
11059 /* An incomplete type. Remove it from the list. */
11060 *basep = TREE_CHAIN (*basep);
11061 else
11063 max_bases++;
11064 if (TREE_TYPE (*basep))
11065 max_vbases++;
11066 if (CLASS_TYPE_P (basetype))
11067 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11068 basep = &TREE_CHAIN (*basep);
11072 TYPE_MARKED_P (ref) = 1;
11074 /* The binfo slot should be empty, unless this is an (ill-formed)
11075 redefinition. */
11076 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
11077 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11079 binfo = make_tree_binfo (max_bases);
11081 TYPE_BINFO (ref) = binfo;
11082 BINFO_OFFSET (binfo) = size_zero_node;
11083 BINFO_TYPE (binfo) = ref;
11085 /* Apply base-class info set up to the variants of this type. */
11086 fixup_type_variants (ref);
11088 if (max_bases)
11090 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11091 /* An aggregate cannot have baseclasses. */
11092 CLASSTYPE_NON_AGGREGATE (ref) = 1;
11094 if (TREE_CODE (ref) == UNION_TYPE)
11096 error ("derived union %qT invalid", ref);
11097 return false;
11101 if (max_bases > 1)
11103 if (TYPE_FOR_JAVA (ref))
11105 error ("Java class %qT cannot have multiple bases", ref);
11106 return false;
11110 if (max_vbases)
11112 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11114 if (TYPE_FOR_JAVA (ref))
11116 error ("Java class %qT cannot have virtual bases", ref);
11117 return false;
11121 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11123 tree access = TREE_PURPOSE (base_list);
11124 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11125 tree basetype = TREE_VALUE (base_list);
11127 if (access == access_default_node)
11128 access = default_access;
11130 if (PACK_EXPANSION_P (basetype))
11131 basetype = PACK_EXPANSION_PATTERN (basetype);
11132 if (TREE_CODE (basetype) == TYPE_DECL)
11133 basetype = TREE_TYPE (basetype);
11134 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11136 error ("base type %qT fails to be a struct or class type",
11137 basetype);
11138 return false;
11141 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11142 TYPE_FOR_JAVA (ref) = 1;
11144 base_binfo = NULL_TREE;
11145 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11147 base_binfo = TYPE_BINFO (basetype);
11148 /* The original basetype could have been a typedef'd type. */
11149 basetype = BINFO_TYPE (base_binfo);
11151 /* Inherit flags from the base. */
11152 TYPE_HAS_NEW_OPERATOR (ref)
11153 |= TYPE_HAS_NEW_OPERATOR (basetype);
11154 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11155 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11156 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11157 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11158 CLASSTYPE_DIAMOND_SHAPED_P (ref)
11159 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11160 CLASSTYPE_REPEATED_BASE_P (ref)
11161 |= CLASSTYPE_REPEATED_BASE_P (basetype);
11164 /* We must do this test after we've seen through a typedef
11165 type. */
11166 if (TYPE_MARKED_P (basetype))
11168 if (basetype == ref)
11169 error ("recursive type %qT undefined", basetype);
11170 else
11171 error ("duplicate base type %qT invalid", basetype);
11172 return false;
11175 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11176 /* Regenerate the pack expansion for the bases. */
11177 basetype = make_pack_expansion (basetype);
11179 TYPE_MARKED_P (basetype) = 1;
11181 base_binfo = copy_binfo (base_binfo, basetype, ref,
11182 &igo_prev, via_virtual);
11183 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11184 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11186 BINFO_BASE_APPEND (binfo, base_binfo);
11187 BINFO_BASE_ACCESS_APPEND (binfo, access);
11190 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11191 /* If we have space in the vbase vector, we must have shared at
11192 least one of them, and are therefore diamond shaped. */
11193 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11195 /* Unmark all the types. */
11196 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11197 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11198 TYPE_MARKED_P (ref) = 0;
11200 /* Now see if we have a repeated base type. */
11201 if (!CLASSTYPE_REPEATED_BASE_P (ref))
11203 for (base_binfo = binfo; base_binfo;
11204 base_binfo = TREE_CHAIN (base_binfo))
11206 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11208 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11209 break;
11211 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11213 for (base_binfo = binfo; base_binfo;
11214 base_binfo = TREE_CHAIN (base_binfo))
11215 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11216 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11217 else
11218 break;
11221 return true;
11225 /* Begin compiling the definition of an enumeration type.
11226 NAME is its name,
11228 UNDERLYING_TYPE is the type that will be used as the storage for
11229 the enumeration type. This should be NULL_TREE if no storage type
11230 was specified.
11232 SCOPED_ENUM_P is true if this is a scoped enumeration type.
11234 Returns the type object, as yet incomplete.
11235 Also records info about it so that build_enumerator
11236 may be used to declare the individual values as they are read. */
11238 tree
11239 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
11241 tree enumtype;
11243 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11245 /* If this is the real definition for a previous forward reference,
11246 fill in the contents in the same object that used to be the
11247 forward reference. */
11249 enumtype = lookup_and_check_tag (enum_type, name,
11250 /*tag_scope=*/ts_current,
11251 /*template_header_p=*/false);
11253 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11255 error_at (input_location, "multiple definition of %q#T", enumtype);
11256 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11257 "previous definition here");
11258 /* Clear out TYPE_VALUES, and start again. */
11259 TYPE_VALUES (enumtype) = NULL_TREE;
11261 else
11263 /* In case of error, make a dummy enum to allow parsing to
11264 continue. */
11265 if (enumtype == error_mark_node)
11266 name = make_anon_name ();
11268 enumtype = cxx_make_type (ENUMERAL_TYPE);
11269 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11272 if (enumtype == error_mark_node)
11273 return enumtype;
11275 if (scoped_enum_p)
11277 SET_SCOPED_ENUM_P (enumtype, 1);
11278 begin_scope (sk_scoped_enum, enumtype);
11280 /* [C++0x dcl.enum]p5:
11282 If not explicitly specified, the underlying type of a scoped
11283 enumeration type is int. */
11284 if (!underlying_type)
11285 underlying_type = integer_type_node;
11288 if (underlying_type)
11290 if (CP_INTEGRAL_TYPE_P (underlying_type))
11292 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11293 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11294 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11295 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11296 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11297 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11298 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11299 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11300 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11301 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11303 else if (!dependent_type_p (underlying_type))
11304 error ("underlying type %<%T%> of %<%T%> must be an integral type",
11305 underlying_type, enumtype);
11308 return enumtype;
11311 /* After processing and defining all the values of an enumeration type,
11312 install their decls in the enumeration type and finish it off.
11313 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
11315 void
11316 finish_enum (tree enumtype)
11318 tree values;
11319 tree decl;
11320 tree minnode;
11321 tree maxnode;
11322 tree value;
11323 tree t;
11324 tree underlying_type = NULL_TREE;
11325 bool fixed_underlying_type_p
11326 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11328 /* We built up the VALUES in reverse order. */
11329 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11331 /* For an enum defined in a template, just set the type of the values;
11332 all further processing is postponed until the template is
11333 instantiated. We need to set the type so that tsubst of a CONST_DECL
11334 works. */
11335 if (processing_template_decl)
11337 for (values = TYPE_VALUES (enumtype);
11338 values;
11339 values = TREE_CHAIN (values))
11340 TREE_TYPE (TREE_VALUE (values)) = enumtype;
11341 if (at_function_scope_p ())
11342 add_stmt (build_min (TAG_DEFN, enumtype));
11343 if (SCOPED_ENUM_P (enumtype))
11344 finish_scope ();
11345 return;
11348 /* Determine the minimum and maximum values of the enumerators. */
11349 if (TYPE_VALUES (enumtype))
11351 minnode = maxnode = NULL_TREE;
11353 for (values = TYPE_VALUES (enumtype);
11354 values;
11355 values = TREE_CHAIN (values))
11357 decl = TREE_VALUE (values);
11359 /* [dcl.enum]: Following the closing brace of an enum-specifier,
11360 each enumerator has the type of its enumeration. Prior to the
11361 closing brace, the type of each enumerator is the type of its
11362 initializing value. */
11363 TREE_TYPE (decl) = enumtype;
11365 /* Update the minimum and maximum values, if appropriate. */
11366 value = DECL_INITIAL (decl);
11367 if (value == error_mark_node)
11368 value = integer_zero_node;
11369 /* Figure out what the minimum and maximum values of the
11370 enumerators are. */
11371 if (!minnode)
11372 minnode = maxnode = value;
11373 else if (tree_int_cst_lt (maxnode, value))
11374 maxnode = value;
11375 else if (tree_int_cst_lt (value, minnode))
11376 minnode = value;
11379 else
11380 /* [dcl.enum]
11382 If the enumerator-list is empty, the underlying type is as if
11383 the enumeration had a single enumerator with value 0. */
11384 minnode = maxnode = integer_zero_node;
11386 if (!fixed_underlying_type_p)
11388 /* Compute the number of bits require to represent all values of the
11389 enumeration. We must do this before the type of MINNODE and
11390 MAXNODE are transformed, since tree_int_cst_min_precision relies
11391 on the TREE_TYPE of the value it is passed. */
11392 bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
11393 int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11394 int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11395 int precision = MAX (lowprec, highprec);
11396 unsigned int itk;
11397 bool use_short_enum;
11399 /* Determine the underlying type of the enumeration.
11401 [dcl.enum]
11403 The underlying type of an enumeration is an integral type that
11404 can represent all the enumerator values defined in the
11405 enumeration. It is implementation-defined which integral type is
11406 used as the underlying type for an enumeration except that the
11407 underlying type shall not be larger than int unless the value of
11408 an enumerator cannot fit in an int or unsigned int.
11410 We use "int" or an "unsigned int" as the underlying type, even if
11411 a smaller integral type would work, unless the user has
11412 explicitly requested that we use the smallest possible type. The
11413 user can request that for all enumerations with a command line
11414 flag, or for just one enumeration with an attribute. */
11416 use_short_enum = flag_short_enums
11417 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11419 for (itk = (use_short_enum ? itk_char : itk_int);
11420 itk != itk_none;
11421 itk++)
11423 underlying_type = integer_types[itk];
11424 if (TYPE_PRECISION (underlying_type) >= precision
11425 && TYPE_UNSIGNED (underlying_type) == unsignedp)
11426 break;
11428 if (itk == itk_none)
11430 /* DR 377
11432 IF no integral type can represent all the enumerator values, the
11433 enumeration is ill-formed. */
11434 error ("no integral type can represent all of the enumerator values "
11435 "for %qT", enumtype);
11436 precision = TYPE_PRECISION (long_long_integer_type_node);
11437 underlying_type = integer_types[itk_unsigned_long_long];
11440 /* [dcl.enum]
11442 The value of sizeof() applied to an enumeration type, an object
11443 of an enumeration type, or an enumerator, is the value of sizeof()
11444 applied to the underlying type. */
11445 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11446 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11447 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11448 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11449 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11450 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11451 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11452 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11453 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11455 /* Compute the minimum and maximum values for the type.
11457 [dcl.enum]
11459 For an enumeration where emin is the smallest enumerator and emax
11460 is the largest, the values of the enumeration are the values of the
11461 underlying type in the range bmin to bmax, where bmin and bmax are,
11462 respectively, the smallest and largest values of the smallest bit-
11463 field that can store emin and emax. */
11465 /* The middle-end currently assumes that types with TYPE_PRECISION
11466 narrower than their underlying type are suitably zero or sign
11467 extended to fill their mode. Similarly, it assumes that the front
11468 end assures that a value of a particular type must be within
11469 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
11471 We used to set these fields based on bmin and bmax, but that led
11472 to invalid assumptions like optimizing away bounds checking. So
11473 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
11474 TYPE_MAX_VALUE to the values for the mode above and only restrict
11475 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
11476 ENUM_UNDERLYING_TYPE (enumtype)
11477 = build_distinct_type_copy (underlying_type);
11478 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
11479 set_min_and_max_values_for_integral_type
11480 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11482 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
11483 if (flag_strict_enums)
11484 set_min_and_max_values_for_integral_type (enumtype, precision,
11485 unsignedp);
11487 else
11488 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11490 /* Convert each of the enumerators to the type of the underlying
11491 type of the enumeration. */
11492 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11494 location_t saved_location;
11496 decl = TREE_VALUE (values);
11497 saved_location = input_location;
11498 input_location = DECL_SOURCE_LOCATION (decl);
11499 if (fixed_underlying_type_p)
11500 /* If the enumeration type has a fixed underlying type, we
11501 already checked all of the enumerator values. */
11502 value = DECL_INITIAL (decl);
11503 else
11504 value = perform_implicit_conversion (underlying_type,
11505 DECL_INITIAL (decl),
11506 tf_warning_or_error);
11507 input_location = saved_location;
11509 /* Do not clobber shared ints. */
11510 value = copy_node (value);
11512 TREE_TYPE (value) = enumtype;
11513 DECL_INITIAL (decl) = value;
11516 /* Fix up all variant types of this enum type. */
11517 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11519 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11520 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11521 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11522 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11523 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11524 SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11525 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11526 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11527 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11528 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11529 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11532 /* Finish up the scope of a scoped enumeration. */
11533 if (SCOPED_ENUM_P (enumtype))
11534 finish_scope ();
11536 /* Finish debugging output for this type. */
11537 rest_of_type_compilation (enumtype, namespace_bindings_p ());
11540 /* Build and install a CONST_DECL for an enumeration constant of the
11541 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11542 Assignment of sequential values by default is handled here. */
11544 void
11545 build_enumerator (tree name, tree value, tree enumtype)
11547 tree decl;
11548 tree context;
11549 tree type;
11551 /* If the VALUE was erroneous, pretend it wasn't there; that will
11552 result in the enum being assigned the next value in sequence. */
11553 if (value == error_mark_node)
11554 value = NULL_TREE;
11556 /* Remove no-op casts from the value. */
11557 if (value)
11558 STRIP_TYPE_NOPS (value);
11560 if (! processing_template_decl)
11562 /* Validate and default VALUE. */
11563 if (value != NULL_TREE)
11565 value = integral_constant_value (value);
11567 if (TREE_CODE (value) == INTEGER_CST)
11569 value = perform_integral_promotions (value);
11570 constant_expression_warning (value);
11572 else
11574 error ("enumerator value for %qD is not an integer constant", name);
11575 value = NULL_TREE;
11579 /* Default based on previous value. */
11580 if (value == NULL_TREE)
11582 if (TYPE_VALUES (enumtype))
11584 HOST_WIDE_INT hi;
11585 unsigned HOST_WIDE_INT lo;
11586 tree prev_value;
11587 bool overflowed;
11589 /* The next value is the previous value plus one.
11590 add_double doesn't know the type of the target expression,
11591 so we must check with int_fits_type_p as well. */
11592 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11593 if (error_operand_p (prev_value))
11594 value = error_mark_node;
11595 else
11597 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11598 TREE_INT_CST_HIGH (prev_value),
11599 1, 0, &lo, &hi);
11600 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11601 overflowed
11602 |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11604 if (overflowed)
11606 error ("overflow in enumeration values at %qD", name);
11607 value = error_mark_node;
11611 else
11612 value = integer_zero_node;
11615 /* Remove no-op casts from the value. */
11616 STRIP_TYPE_NOPS (value);
11618 /* If the underlying type of the enum is fixed, check whether
11619 the enumerator values fits in the underlying type. If it
11620 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11621 if (ENUM_UNDERLYING_TYPE (enumtype)
11622 && value
11623 && TREE_CODE (value) == INTEGER_CST
11624 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11626 error ("enumerator value %E is too large for underlying type %<%T%>",
11627 value, ENUM_UNDERLYING_TYPE (enumtype));
11629 /* Silently convert the value so that we can continue. */
11630 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11631 value, tf_none);
11635 /* C++ associates enums with global, function, or class declarations. */
11636 context = current_scope ();
11638 /* Build the actual enumeration constant. Note that the enumeration
11639 constants have the underlying type of the enum (if it is fixed)
11640 or the type of their initializer (if the underlying type of the
11641 enum is not fixed):
11643 [ C++0x dcl.enum ]
11645 If the underlying type is fixed, the type of each enumerator
11646 prior to the closing brace is the underlying type; if the
11647 initializing value of an enumerator cannot be represented by
11648 the underlying type, the program is ill-formed. If the
11649 underlying type is not fixed, the type of each enumerator is
11650 the type of its initializing value.
11652 If the underlying type is not fixed, it will be computed by
11653 finish_enum and we will reset the type of this enumerator. Of
11654 course, if we're processing a template, there may be no value. */
11655 type = value ? TREE_TYPE (value) : NULL_TREE;
11657 if (context && context == current_class_type)
11658 /* This enum declaration is local to the class. We need the full
11659 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
11660 decl = build_lang_decl (CONST_DECL, name, type);
11661 else
11662 /* It's a global enum, or it's local to a function. (Note local to
11663 a function could mean local to a class method. */
11664 decl = build_decl (input_location, CONST_DECL, name, type);
11666 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11667 TREE_CONSTANT (decl) = 1;
11668 TREE_READONLY (decl) = 1;
11669 DECL_INITIAL (decl) = value;
11671 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
11672 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11673 on the TYPE_FIELDS list for `S'. (That's so that you can say
11674 things like `S::i' later.) */
11675 finish_member_declaration (decl);
11676 else
11677 pushdecl (decl);
11679 /* Add this enumeration constant to the list for this type. */
11680 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11683 /* Look for an enumerator with the given NAME within the enumeration
11684 type ENUMTYPE. This routine is used primarily for qualified name
11685 lookup into an enumerator in C++0x, e.g.,
11687 enum class Color { Red, Green, Blue };
11689 Color color = Color::Red;
11691 Returns the value corresponding to the enumerator, or
11692 NULL_TREE if no such enumerator was found. */
11693 tree
11694 lookup_enumerator (tree enumtype, tree name)
11696 tree e;
11697 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11699 e = purpose_member (name, TYPE_VALUES (enumtype));
11700 return e? TREE_VALUE (e) : NULL_TREE;
11704 /* We're defining DECL. Make sure that its type is OK. */
11706 static void
11707 check_function_type (tree decl, tree current_function_parms)
11709 tree fntype = TREE_TYPE (decl);
11710 tree return_type = complete_type (TREE_TYPE (fntype));
11712 /* In a function definition, arg types must be complete. */
11713 require_complete_types_for_parms (current_function_parms);
11715 /* constexpr functions must have literal argument types and
11716 literal return type. */
11717 validate_constexpr_fundecl (decl);
11719 if (dependent_type_p (return_type))
11720 return;
11721 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11722 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11724 tree args = TYPE_ARG_TYPES (fntype);
11726 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11727 error ("return type %q#T is incomplete", return_type);
11728 else
11729 error ("return type has Java class type %q#T", return_type);
11731 /* Make it return void instead. */
11732 if (TREE_CODE (fntype) == METHOD_TYPE)
11733 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11734 void_type_node,
11735 TREE_CHAIN (args));
11736 else
11737 fntype = build_function_type (void_type_node, args);
11738 fntype
11739 = build_exception_variant (fntype,
11740 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11741 fntype = (cp_build_type_attribute_variant
11742 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
11743 TREE_TYPE (decl) = fntype;
11745 else
11746 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11749 /* Create the FUNCTION_DECL for a function definition.
11750 DECLSPECS and DECLARATOR are the parts of the declaration;
11751 they describe the function's name and the type it returns,
11752 but twisted together in a fashion that parallels the syntax of C.
11754 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11755 DECLARATOR is really the DECL for the function we are about to
11756 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11757 indicating that the function is an inline defined in-class.
11759 This function creates a binding context for the function body
11760 as well as setting up the FUNCTION_DECL in current_function_decl.
11762 For C++, we must first check whether that datum makes any sense.
11763 For example, "class A local_a(1,2);" means that variable local_a
11764 is an aggregate of type A, which should have a constructor
11765 applied to it with the argument list [1, 2].
11767 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11768 or may be a BLOCK if the function has been defined previously
11769 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11770 error_mark_node if the function has never been defined, or
11771 a BLOCK if the function has been defined somewhere. */
11773 void
11774 start_preparsed_function (tree decl1, tree attrs, int flags)
11776 tree ctype = NULL_TREE;
11777 tree fntype;
11778 tree restype;
11779 int doing_friend = 0;
11780 struct cp_binding_level *bl;
11781 tree current_function_parms;
11782 struct c_fileinfo *finfo
11783 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11784 bool honor_interface;
11786 /* Sanity check. */
11787 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11788 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11790 fntype = TREE_TYPE (decl1);
11791 if (TREE_CODE (fntype) == METHOD_TYPE)
11792 ctype = TYPE_METHOD_BASETYPE (fntype);
11794 /* ISO C++ 11.4/5. A friend function defined in a class is in
11795 the (lexical) scope of the class in which it is defined. */
11796 if (!ctype && DECL_FRIEND_P (decl1))
11798 ctype = DECL_FRIEND_CONTEXT (decl1);
11800 /* CTYPE could be null here if we're dealing with a template;
11801 for example, `inline friend float foo()' inside a template
11802 will have no CTYPE set. */
11803 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11804 ctype = NULL_TREE;
11805 else
11806 doing_friend = 1;
11809 if (DECL_DECLARED_INLINE_P (decl1)
11810 && lookup_attribute ("noinline", attrs))
11811 warning (0, "inline function %q+D given attribute noinline", decl1);
11813 /* Handle gnu_inline attribute. */
11814 if (GNU_INLINE_P (decl1))
11816 DECL_EXTERNAL (decl1) = 1;
11817 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11818 DECL_INTERFACE_KNOWN (decl1) = 1;
11819 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11822 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11823 /* This is a constructor, we must ensure that any default args
11824 introduced by this definition are propagated to the clones
11825 now. The clones are used directly in overload resolution. */
11826 adjust_clone_args (decl1);
11828 /* Sometimes we don't notice that a function is a static member, and
11829 build a METHOD_TYPE for it. Fix that up now. */
11830 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11831 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11833 revert_static_member_fn (decl1);
11834 ctype = NULL_TREE;
11837 /* Set up current_class_type, and enter the scope of the class, if
11838 appropriate. */
11839 if (ctype)
11840 push_nested_class (ctype);
11841 else if (DECL_STATIC_FUNCTION_P (decl1))
11842 push_nested_class (DECL_CONTEXT (decl1));
11844 /* Now that we have entered the scope of the class, we must restore
11845 the bindings for any template parameters surrounding DECL1, if it
11846 is an inline member template. (Order is important; consider the
11847 case where a template parameter has the same name as a field of
11848 the class.) It is not until after this point that
11849 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
11850 if (flags & SF_INCLASS_INLINE)
11851 maybe_begin_member_template_processing (decl1);
11853 /* Effective C++ rule 15. */
11854 if (warn_ecpp
11855 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11856 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11857 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11859 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11860 error_mark_node is replaced below (in poplevel) with the BLOCK. */
11861 if (!DECL_INITIAL (decl1))
11862 DECL_INITIAL (decl1) = error_mark_node;
11864 /* This function exists in static storage.
11865 (This does not mean `static' in the C sense!) */
11866 TREE_STATIC (decl1) = 1;
11868 /* We must call push_template_decl after current_class_type is set
11869 up. (If we are processing inline definitions after exiting a
11870 class scope, current_class_type will be NULL_TREE until set above
11871 by push_nested_class.) */
11872 if (processing_template_decl)
11874 /* FIXME: Handle error_mark_node more gracefully. */
11875 tree newdecl1 = push_template_decl (decl1);
11876 if (newdecl1 != error_mark_node)
11877 decl1 = newdecl1;
11880 /* We are now in the scope of the function being defined. */
11881 current_function_decl = decl1;
11883 /* Save the parm names or decls from this function's declarator
11884 where store_parm_decls will find them. */
11885 current_function_parms = DECL_ARGUMENTS (decl1);
11887 /* Make sure the parameter and return types are reasonable. When
11888 you declare a function, these types can be incomplete, but they
11889 must be complete when you define the function. */
11890 check_function_type (decl1, current_function_parms);
11892 /* Build the return declaration for the function. */
11893 restype = TREE_TYPE (fntype);
11894 if (DECL_RESULT (decl1) == NULL_TREE)
11896 tree resdecl;
11898 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
11899 DECL_ARTIFICIAL (resdecl) = 1;
11900 DECL_IGNORED_P (resdecl) = 1;
11901 DECL_RESULT (decl1) = resdecl;
11903 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11906 /* Let the user know we're compiling this function. */
11907 announce_function (decl1);
11909 /* Record the decl so that the function name is defined.
11910 If we already have a decl for this name, and it is a FUNCTION_DECL,
11911 use the old decl. */
11912 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11914 /* A specialization is not used to guide overload resolution. */
11915 if (!DECL_FUNCTION_MEMBER_P (decl1)
11916 && !(DECL_USE_TEMPLATE (decl1) &&
11917 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11919 tree olddecl = pushdecl (decl1);
11921 if (olddecl == error_mark_node)
11922 /* If something went wrong when registering the declaration,
11923 use DECL1; we have to have a FUNCTION_DECL to use when
11924 parsing the body of the function. */
11926 else
11928 /* Otherwise, OLDDECL is either a previous declaration
11929 of the same function or DECL1 itself. */
11931 if (warn_missing_declarations
11932 && olddecl == decl1
11933 && !DECL_MAIN_P (decl1)
11934 && TREE_PUBLIC (decl1)
11935 && !DECL_DECLARED_INLINE_P (decl1))
11937 tree context;
11939 /* Check whether DECL1 is in an anonymous
11940 namespace. */
11941 for (context = DECL_CONTEXT (decl1);
11942 context;
11943 context = DECL_CONTEXT (context))
11945 if (TREE_CODE (context) == NAMESPACE_DECL
11946 && DECL_NAME (context) == NULL_TREE)
11947 break;
11950 if (context == NULL)
11951 warning (OPT_Wmissing_declarations,
11952 "no previous declaration for %q+D", decl1);
11955 decl1 = olddecl;
11958 else
11960 /* We need to set the DECL_CONTEXT. */
11961 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11962 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11964 fntype = TREE_TYPE (decl1);
11966 /* If #pragma weak applies, mark the decl appropriately now.
11967 The pragma only applies to global functions. Because
11968 determining whether or not the #pragma applies involves
11969 computing the mangled name for the declaration, we cannot
11970 apply the pragma until after we have merged this declaration
11971 with any previous declarations; if the original declaration
11972 has a linkage specification, that specification applies to
11973 the definition as well, and may affect the mangled name. */
11974 if (!DECL_CONTEXT (decl1))
11975 maybe_apply_pragma_weak (decl1);
11978 /* Reset this in case the call to pushdecl changed it. */
11979 current_function_decl = decl1;
11981 gcc_assert (DECL_INITIAL (decl1));
11983 /* This function may already have been parsed, in which case just
11984 return; our caller will skip over the body without parsing. */
11985 if (DECL_INITIAL (decl1) != error_mark_node)
11986 return;
11988 /* Initialize RTL machinery. We cannot do this until
11989 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11990 even when processing a template; this is how we get
11991 CFUN set up, and our per-function variables initialized.
11992 FIXME factor out the non-RTL stuff. */
11993 bl = current_binding_level;
11994 allocate_struct_function (decl1, processing_template_decl);
11996 /* Initialize the language data structures. Whenever we start
11997 a new function, we destroy temporaries in the usual way. */
11998 cfun->language = GGC_CNEW (struct language_function);
11999 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12000 current_binding_level = bl;
12002 /* Even though we're inside a function body, we still don't want to
12003 call expand_expr to calculate the size of a variable-sized array.
12004 We haven't necessarily assigned RTL to all variables yet, so it's
12005 not safe to try to expand expressions involving them. */
12006 cfun->dont_save_pending_sizes_p = 1;
12008 /* Start the statement-tree, start the tree now. */
12009 DECL_SAVED_TREE (decl1) = push_stmt_list ();
12011 /* If we are (erroneously) defining a function that we have already
12012 defined before, wipe out what we knew before. */
12013 if (!DECL_PENDING_INLINE_P (decl1))
12014 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12016 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12018 /* We know that this was set up by `grokclassfn'. We do not
12019 wait until `store_parm_decls', since evil parse errors may
12020 never get us to that point. Here we keep the consistency
12021 between `current_class_type' and `current_class_ptr'. */
12022 tree t = DECL_ARGUMENTS (decl1);
12024 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12025 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12027 cp_function_chain->x_current_class_ref
12028 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12029 cp_function_chain->x_current_class_ptr = t;
12031 /* Constructors and destructors need to know whether they're "in
12032 charge" of initializing virtual base classes. */
12033 t = TREE_CHAIN (t);
12034 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12036 current_in_charge_parm = t;
12037 t = TREE_CHAIN (t);
12039 if (DECL_HAS_VTT_PARM_P (decl1))
12041 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12042 current_vtt_parm = t;
12046 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12047 /* Implicitly-defined methods (like the
12048 destructor for a class in which no destructor
12049 is explicitly declared) must not be defined
12050 until their definition is needed. So, we
12051 ignore interface specifications for
12052 compiler-generated functions. */
12053 && !DECL_ARTIFICIAL (decl1));
12055 if (DECL_INTERFACE_KNOWN (decl1))
12057 tree ctx = decl_function_context (decl1);
12059 if (DECL_NOT_REALLY_EXTERN (decl1))
12060 DECL_EXTERNAL (decl1) = 0;
12062 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12063 && TREE_PUBLIC (ctx))
12064 /* This is a function in a local class in an extern inline
12065 function. */
12066 comdat_linkage (decl1);
12068 /* If this function belongs to an interface, it is public.
12069 If it belongs to someone else's interface, it is also external.
12070 This only affects inlines and template instantiations. */
12071 else if (!finfo->interface_unknown && honor_interface)
12073 if (DECL_DECLARED_INLINE_P (decl1)
12074 || DECL_TEMPLATE_INSTANTIATION (decl1)
12075 || processing_template_decl)
12077 DECL_EXTERNAL (decl1)
12078 = (finfo->interface_only
12079 || (DECL_DECLARED_INLINE_P (decl1)
12080 && ! flag_implement_inlines
12081 && !DECL_VINDEX (decl1)));
12083 /* For WIN32 we also want to put these in linkonce sections. */
12084 maybe_make_one_only (decl1);
12086 else
12087 DECL_EXTERNAL (decl1) = 0;
12088 DECL_INTERFACE_KNOWN (decl1) = 1;
12089 /* If this function is in an interface implemented in this file,
12090 make sure that the back end knows to emit this function
12091 here. */
12092 if (!DECL_EXTERNAL (decl1))
12093 mark_needed (decl1);
12095 else if (finfo->interface_unknown && finfo->interface_only
12096 && honor_interface)
12098 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12099 interface, we will have both finfo->interface_unknown and
12100 finfo->interface_only set. In that case, we don't want to
12101 use the normal heuristics because someone will supply a
12102 #pragma implementation elsewhere, and deducing it here would
12103 produce a conflict. */
12104 comdat_linkage (decl1);
12105 DECL_EXTERNAL (decl1) = 0;
12106 DECL_INTERFACE_KNOWN (decl1) = 1;
12107 DECL_DEFER_OUTPUT (decl1) = 1;
12109 else
12111 /* This is a definition, not a reference.
12112 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
12113 if (!GNU_INLINE_P (decl1))
12114 DECL_EXTERNAL (decl1) = 0;
12116 if ((DECL_DECLARED_INLINE_P (decl1)
12117 || DECL_TEMPLATE_INSTANTIATION (decl1))
12118 && ! DECL_INTERFACE_KNOWN (decl1))
12119 DECL_DEFER_OUTPUT (decl1) = 1;
12120 else
12121 DECL_INTERFACE_KNOWN (decl1) = 1;
12124 /* Determine the ELF visibility attribute for the function. We must not
12125 do this before calling "pushdecl", as we must allow "duplicate_decls"
12126 to merge any attributes appropriately. We also need to wait until
12127 linkage is set. */
12128 if (!DECL_CLONED_FUNCTION_P (decl1))
12129 determine_visibility (decl1);
12131 begin_scope (sk_function_parms, decl1);
12133 ++function_depth;
12135 if (DECL_DESTRUCTOR_P (decl1)
12136 || (DECL_CONSTRUCTOR_P (decl1)
12137 && targetm.cxx.cdtor_returns_this ()))
12139 cdtor_label = build_decl (input_location,
12140 LABEL_DECL, NULL_TREE, NULL_TREE);
12141 DECL_CONTEXT (cdtor_label) = current_function_decl;
12144 start_fname_decls ();
12146 store_parm_decls (current_function_parms);
12150 /* Like start_preparsed_function, except that instead of a
12151 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12153 Returns 1 on success. If the DECLARATOR is not suitable for a function
12154 (it defines a datum instead), we return 0, which tells
12155 yyparse to report a parse error. */
12158 start_function (cp_decl_specifier_seq *declspecs,
12159 const cp_declarator *declarator,
12160 tree attrs)
12162 tree decl1;
12164 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12165 if (decl1 == error_mark_node)
12166 return 0;
12167 /* If the declarator is not suitable for a function definition,
12168 cause a syntax error. */
12169 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12171 error ("invalid function declaration");
12172 return 0;
12175 if (DECL_MAIN_P (decl1))
12176 /* main must return int. grokfndecl should have corrected it
12177 (and issued a diagnostic) if the user got it wrong. */
12178 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12179 integer_type_node));
12181 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12183 return 1;
12186 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12187 FN. */
12189 static bool
12190 use_eh_spec_block (tree fn)
12192 return (flag_exceptions && flag_enforce_eh_specs
12193 && !processing_template_decl
12194 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
12195 /* We insert the EH_SPEC_BLOCK only in the original
12196 function; then, it is copied automatically to the
12197 clones. */
12198 && !DECL_CLONED_FUNCTION_P (fn)
12199 /* Implicitly-generated constructors and destructors have
12200 exception specifications. However, those specifications
12201 are the union of the possible exceptions specified by the
12202 constructors/destructors for bases and members, so no
12203 unallowed exception will ever reach this function. By
12204 not creating the EH_SPEC_BLOCK we save a little memory,
12205 and we avoid spurious warnings about unreachable
12206 code. */
12207 && !DECL_ARTIFICIAL (fn));
12210 /* Store the parameter declarations into the current function declaration.
12211 This is called after parsing the parameter declarations, before
12212 digesting the body of the function.
12214 Also install to binding contour return value identifier, if any. */
12216 static void
12217 store_parm_decls (tree current_function_parms)
12219 tree fndecl = current_function_decl;
12220 tree parm;
12222 /* This is a chain of any other decls that came in among the parm
12223 declarations. If a parm is declared with enum {foo, bar} x;
12224 then CONST_DECLs for foo and bar are put here. */
12225 tree nonparms = NULL_TREE;
12227 if (current_function_parms)
12229 /* This case is when the function was defined with an ANSI prototype.
12230 The parms already have decls, so we need not do anything here
12231 except record them as in effect
12232 and complain if any redundant old-style parm decls were written. */
12234 tree specparms = current_function_parms;
12235 tree next;
12237 /* Must clear this because it might contain TYPE_DECLs declared
12238 at class level. */
12239 current_binding_level->names = NULL;
12241 /* If we're doing semantic analysis, then we'll call pushdecl
12242 for each of these. We must do them in reverse order so that
12243 they end in the correct forward order. */
12244 specparms = nreverse (specparms);
12246 for (parm = specparms; parm; parm = next)
12248 next = TREE_CHAIN (parm);
12249 if (TREE_CODE (parm) == PARM_DECL)
12251 if (DECL_NAME (parm) == NULL_TREE
12252 || TREE_CODE (parm) != VOID_TYPE)
12253 pushdecl (parm);
12254 else
12255 error ("parameter %qD declared void", parm);
12257 else
12259 /* If we find an enum constant or a type tag,
12260 put it aside for the moment. */
12261 TREE_CHAIN (parm) = NULL_TREE;
12262 nonparms = chainon (nonparms, parm);
12266 /* Get the decls in their original chain order and record in the
12267 function. This is all and only the PARM_DECLs that were
12268 pushed into scope by the loop above. */
12269 DECL_ARGUMENTS (fndecl) = getdecls ();
12271 else
12272 DECL_ARGUMENTS (fndecl) = NULL_TREE;
12274 /* Now store the final chain of decls for the arguments
12275 as the decl-chain of the current lexical scope.
12276 Put the enumerators in as well, at the front so that
12277 DECL_ARGUMENTS is not modified. */
12278 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12280 if (use_eh_spec_block (current_function_decl))
12281 current_eh_spec_block = begin_eh_spec_block ();
12285 /* We have finished doing semantic analysis on DECL, but have not yet
12286 generated RTL for its body. Save away our current state, so that
12287 when we want to generate RTL later we know what to do. */
12289 static void
12290 save_function_data (tree decl)
12292 struct language_function *f;
12294 /* Save the language-specific per-function data so that we can
12295 get it back when we really expand this function. */
12296 gcc_assert (!DECL_PENDING_INLINE_P (decl));
12298 /* Make a copy. */
12299 f = GGC_NEW (struct language_function);
12300 memcpy (f, cp_function_chain, sizeof (struct language_function));
12301 DECL_SAVED_FUNCTION_DATA (decl) = f;
12303 /* Clear out the bits we don't need. */
12304 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12305 f->bindings = NULL;
12306 f->x_local_names = NULL;
12310 /* Set the return value of the constructor (if present). */
12312 static void
12313 finish_constructor_body (void)
12315 tree val;
12316 tree exprstmt;
12318 if (targetm.cxx.cdtor_returns_this ()
12319 && (! TYPE_FOR_JAVA (current_class_type)))
12321 /* Any return from a constructor will end up here. */
12322 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12324 val = DECL_ARGUMENTS (current_function_decl);
12325 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12326 DECL_RESULT (current_function_decl), val);
12327 /* Return the address of the object. */
12328 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12329 add_stmt (exprstmt);
12333 /* Do all the processing for the beginning of a destructor; set up the
12334 vtable pointers and cleanups for bases and members. */
12336 static void
12337 begin_destructor_body (void)
12339 tree compound_stmt;
12341 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12342 issued an error message. We still want to try to process the
12343 body of the function, but initialize_vtbl_ptrs will crash if
12344 TYPE_BINFO is NULL. */
12345 if (COMPLETE_TYPE_P (current_class_type))
12347 compound_stmt = begin_compound_stmt (0);
12348 /* Make all virtual function table pointers in non-virtual base
12349 classes point to CURRENT_CLASS_TYPE's virtual function
12350 tables. */
12351 initialize_vtbl_ptrs (current_class_ptr);
12352 finish_compound_stmt (compound_stmt);
12354 /* And insert cleanups for our bases and members so that they
12355 will be properly destroyed if we throw. */
12356 push_base_cleanups ();
12360 /* At the end of every destructor we generate code to delete the object if
12361 necessary. Do that now. */
12363 static void
12364 finish_destructor_body (void)
12366 tree exprstmt;
12368 /* Any return from a destructor will end up here; that way all base
12369 and member cleanups will be run when the function returns. */
12370 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12372 /* In a virtual destructor, we must call delete. */
12373 if (DECL_VIRTUAL_P (current_function_decl))
12375 tree if_stmt;
12376 tree virtual_size = cxx_sizeof (current_class_type);
12378 /* [class.dtor]
12380 At the point of definition of a virtual destructor (including
12381 an implicit definition), non-placement operator delete shall
12382 be looked up in the scope of the destructor's class and if
12383 found shall be accessible and unambiguous. */
12384 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12385 virtual_size,
12386 /*global_p=*/false,
12387 /*placement=*/NULL_TREE,
12388 /*alloc_fn=*/NULL_TREE);
12390 if_stmt = begin_if_stmt ();
12391 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12392 current_in_charge_parm,
12393 integer_one_node),
12394 if_stmt);
12395 finish_expr_stmt (exprstmt);
12396 finish_then_clause (if_stmt);
12397 finish_if_stmt (if_stmt);
12400 if (targetm.cxx.cdtor_returns_this ())
12402 tree val;
12404 val = DECL_ARGUMENTS (current_function_decl);
12405 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12406 DECL_RESULT (current_function_decl), val);
12407 /* Return the address of the object. */
12408 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12409 add_stmt (exprstmt);
12413 /* Do the necessary processing for the beginning of a function body, which
12414 in this case includes member-initializers, but not the catch clauses of
12415 a function-try-block. Currently, this means opening a binding level
12416 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
12418 tree
12419 begin_function_body (void)
12421 tree stmt;
12423 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12424 return NULL_TREE;
12426 if (processing_template_decl)
12427 /* Do nothing now. */;
12428 else
12429 /* Always keep the BLOCK node associated with the outermost pair of
12430 curly braces of a function. These are needed for correct
12431 operation of dwarfout.c. */
12432 keep_next_level (true);
12434 stmt = begin_compound_stmt (BCS_FN_BODY);
12436 if (processing_template_decl)
12437 /* Do nothing now. */;
12438 else if (DECL_DESTRUCTOR_P (current_function_decl))
12439 begin_destructor_body ();
12441 return stmt;
12444 /* Do the processing for the end of a function body. Currently, this means
12445 closing out the cleanups for fully-constructed bases and members, and in
12446 the case of the destructor, deleting the object if desired. Again, this
12447 is only meaningful for [cd]tors, since they are the only functions where
12448 there is a significant distinction between the main body and any
12449 function catch clauses. Handling, say, main() return semantics here
12450 would be wrong, as flowing off the end of a function catch clause for
12451 main() would also need to return 0. */
12453 void
12454 finish_function_body (tree compstmt)
12456 if (compstmt == NULL_TREE)
12457 return;
12459 /* Close the block. */
12460 finish_compound_stmt (compstmt);
12462 if (processing_template_decl)
12463 /* Do nothing now. */;
12464 else if (DECL_CONSTRUCTOR_P (current_function_decl))
12465 finish_constructor_body ();
12466 else if (DECL_DESTRUCTOR_P (current_function_decl))
12467 finish_destructor_body ();
12470 /* Given a function, returns the BLOCK corresponding to the outermost level
12471 of curly braces, skipping the artificial block created for constructor
12472 initializers. */
12474 tree
12475 outer_curly_brace_block (tree fndecl)
12477 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12478 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12479 /* Skip the artificial function body block. */
12480 block = BLOCK_SUBBLOCKS (block);
12481 return block;
12484 /* Subroutine of finish_function.
12485 Save the body of constexpr functions for possible
12486 future compile time evaluation. */
12488 static void
12489 maybe_save_function_definition (tree fun)
12491 if (!processing_template_decl
12492 && DECL_DECLARED_CONSTEXPR_P (fun)
12493 && !DECL_CLONED_FUNCTION_P (fun))
12495 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
12496 && !DECL_CONSTRUCTOR_P (fun)
12497 && !literal_type_p (DECL_CONTEXT (fun)))
12499 error ("containing class of %qD is not a literal type",
12500 DECL_CONTEXT (fun));
12501 DECL_DECLARED_CONSTEXPR_P (fun) = false;
12502 return;
12504 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
12508 /* Finish up a function declaration and compile that function
12509 all the way to assembler language output. The free the storage
12510 for the function definition.
12512 FLAGS is a bitwise or of the following values:
12513 2 - INCLASS_INLINE
12514 We just finished processing the body of an in-class inline
12515 function definition. (This processing will have taken place
12516 after the class definition is complete.) */
12518 tree
12519 finish_function (int flags)
12521 tree fndecl = current_function_decl;
12522 tree fntype, ctype = NULL_TREE;
12523 int inclass_inline = (flags & 2) != 0;
12524 int nested;
12526 /* When we get some parse errors, we can end up without a
12527 current_function_decl, so cope. */
12528 if (fndecl == NULL_TREE)
12529 return error_mark_node;
12531 gcc_assert (!defer_mark_used_calls);
12532 defer_mark_used_calls = true;
12534 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12535 && DECL_VIRTUAL_P (fndecl)
12536 && !processing_template_decl)
12538 tree fnclass = DECL_CONTEXT (fndecl);
12539 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12540 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12543 nested = function_depth > 1;
12544 fntype = TREE_TYPE (fndecl);
12546 /* TREE_READONLY (fndecl) = 1;
12547 This caused &foo to be of type ptr-to-const-function
12548 which then got a warning when stored in a ptr-to-function variable. */
12550 gcc_assert (building_stmt_tree ());
12551 /* The current function is being defined, so its DECL_INITIAL should
12552 be set, and unless there's a multiple definition, it should be
12553 error_mark_node. */
12554 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12556 /* For a cloned function, we've already got all the code we need;
12557 there's no need to add any extra bits. */
12558 if (!DECL_CLONED_FUNCTION_P (fndecl))
12560 if (DECL_MAIN_P (current_function_decl))
12562 tree stmt;
12564 /* Make it so that `main' always returns 0 by default (or
12565 1 for VMS). */
12566 #if VMS_TARGET
12567 stmt = finish_return_stmt (integer_one_node);
12568 #else
12569 stmt = finish_return_stmt (integer_zero_node);
12570 #endif
12571 /* Hack. We don't want the middle-end to warn that this
12572 return is unreachable, so put the statement on the
12573 special line 0. */
12575 location_t linezero = linemap_line_start (line_table, 0, 1);
12576 SET_EXPR_LOCATION (stmt, linezero);
12580 if (use_eh_spec_block (current_function_decl))
12581 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12582 (TREE_TYPE (current_function_decl)),
12583 current_eh_spec_block);
12586 /* If we're saving up tree structure, tie off the function now. */
12587 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12589 finish_fname_decls ();
12591 /* If this function can't throw any exceptions, remember that. */
12592 if (!processing_template_decl
12593 && !cp_function_chain->can_throw
12594 && !flag_non_call_exceptions
12595 && !DECL_REPLACEABLE_P (fndecl))
12596 TREE_NOTHROW (fndecl) = 1;
12598 /* This must come after expand_function_end because cleanups might
12599 have declarations (from inline functions) that need to go into
12600 this function's blocks. */
12602 /* If the current binding level isn't the outermost binding level
12603 for this function, either there is a bug, or we have experienced
12604 syntax errors and the statement tree is malformed. */
12605 if (current_binding_level->kind != sk_function_parms)
12607 /* Make sure we have already experienced errors. */
12608 gcc_assert (errorcount);
12610 /* Throw away the broken statement tree and extra binding
12611 levels. */
12612 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12614 while (current_binding_level->kind != sk_function_parms)
12616 if (current_binding_level->kind == sk_class)
12617 pop_nested_class ();
12618 else
12619 poplevel (0, 0, 0);
12622 poplevel (1, 0, 1);
12624 /* Statements should always be full-expressions at the outermost set
12625 of curly braces for a function. */
12626 gcc_assert (stmts_are_full_exprs_p ());
12628 /* Save constexpr function body before it gets munged by
12629 the NRV transformation. */
12630 maybe_save_function_definition (fndecl);
12632 /* Set up the named return value optimization, if we can. Candidate
12633 variables are selected in check_return_expr. */
12634 if (current_function_return_value)
12636 tree r = current_function_return_value;
12637 tree outer;
12639 if (r != error_mark_node
12640 /* This is only worth doing for fns that return in memory--and
12641 simpler, since we don't have to worry about promoted modes. */
12642 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12643 /* Only allow this for variables declared in the outer scope of
12644 the function so we know that their lifetime always ends with a
12645 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12646 we were to do this optimization in tree-ssa. */
12647 && (outer = outer_curly_brace_block (fndecl))
12648 && chain_member (r, BLOCK_VARS (outer)))
12649 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12651 current_function_return_value = NULL_TREE;
12654 /* Remember that we were in class scope. */
12655 if (current_class_name)
12656 ctype = current_class_type;
12658 /* Must mark the RESULT_DECL as being in this function. */
12659 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12661 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12662 to the FUNCTION_DECL node itself. */
12663 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12665 /* Save away current state, if appropriate. */
12666 if (!processing_template_decl)
12667 save_function_data (fndecl);
12669 /* Complain if there's just no return statement. */
12670 if (warn_return_type
12671 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12672 && !dependent_type_p (TREE_TYPE (fntype))
12673 && !current_function_returns_value && !current_function_returns_null
12674 /* Don't complain if we abort or throw. */
12675 && !current_function_returns_abnormally
12676 /* Don't complain if we are declared noreturn. */
12677 && !TREE_THIS_VOLATILE (fndecl)
12678 && !DECL_NAME (DECL_RESULT (fndecl))
12679 && !TREE_NO_WARNING (fndecl)
12680 /* Structor return values (if any) are set by the compiler. */
12681 && !DECL_CONSTRUCTOR_P (fndecl)
12682 && !DECL_DESTRUCTOR_P (fndecl))
12684 warning (OPT_Wreturn_type,
12685 "no return statement in function returning non-void");
12686 TREE_NO_WARNING (fndecl) = 1;
12689 /* Store the end of the function, so that we get good line number
12690 info for the epilogue. */
12691 cfun->function_end_locus = input_location;
12693 /* Complain about parameters that are only set, but never otherwise used. */
12694 if (warn_unused_but_set_parameter
12695 && !processing_template_decl
12696 && errorcount == unused_but_set_errorcount
12697 && !DECL_CLONED_FUNCTION_P (fndecl))
12699 tree decl;
12701 for (decl = DECL_ARGUMENTS (fndecl);
12702 decl;
12703 decl = TREE_CHAIN (decl))
12704 if (TREE_USED (decl)
12705 && TREE_CODE (decl) == PARM_DECL
12706 && !DECL_READ_P (decl)
12707 && DECL_NAME (decl)
12708 && !DECL_ARTIFICIAL (decl)
12709 && !TREE_NO_WARNING (decl)
12710 && !DECL_IN_SYSTEM_HEADER (decl)
12711 && TREE_TYPE (decl) != error_mark_node
12712 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
12713 && (!CLASS_TYPE_P (TREE_TYPE (decl))
12714 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
12715 warning (OPT_Wunused_but_set_parameter,
12716 "parameter %q+D set but not used", decl);
12717 unused_but_set_errorcount = errorcount;
12720 /* Genericize before inlining. */
12721 if (!processing_template_decl)
12723 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12724 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
12725 cp_genericize (fndecl);
12726 /* Clear out the bits we don't need. */
12727 f->x_current_class_ptr = NULL;
12728 f->x_current_class_ref = NULL;
12729 f->x_eh_spec_block = NULL;
12730 f->x_in_charge_parm = NULL;
12731 f->x_vtt_parm = NULL;
12732 f->x_return_value = NULL;
12733 f->bindings = NULL;
12734 f->extern_decl_map = NULL;
12736 /* Clear out the bits we don't need. */
12737 local_names = NULL;
12739 /* We're leaving the context of this function, so zap cfun. It's still in
12740 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
12741 set_cfun (NULL);
12742 current_function_decl = NULL;
12744 /* If this is an in-class inline definition, we may have to pop the
12745 bindings for the template parameters that we added in
12746 maybe_begin_member_template_processing when start_function was
12747 called. */
12748 if (inclass_inline)
12749 maybe_end_member_template_processing ();
12751 /* Leave the scope of the class. */
12752 if (ctype)
12753 pop_nested_class ();
12755 --function_depth;
12757 /* Clean up. */
12758 if (! nested)
12759 /* Let the error reporting routines know that we're outside a
12760 function. For a nested function, this value is used in
12761 cxx_pop_function_context and then reset via pop_function_context. */
12762 current_function_decl = NULL_TREE;
12764 defer_mark_used_calls = false;
12765 if (deferred_mark_used_calls)
12767 unsigned int i;
12768 tree decl;
12770 for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12771 mark_used (decl);
12772 VEC_free (tree, gc, deferred_mark_used_calls);
12775 return fndecl;
12778 /* Create the FUNCTION_DECL for a function definition.
12779 DECLSPECS and DECLARATOR are the parts of the declaration;
12780 they describe the return type and the name of the function,
12781 but twisted together in a fashion that parallels the syntax of C.
12783 This function creates a binding context for the function body
12784 as well as setting up the FUNCTION_DECL in current_function_decl.
12786 Returns a FUNCTION_DECL on success.
12788 If the DECLARATOR is not suitable for a function (it defines a datum
12789 instead), we return 0, which tells yyparse to report a parse error.
12791 May return void_type_node indicating that this method is actually
12792 a friend. See grokfield for more details.
12794 Came here with a `.pushlevel' .
12796 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12797 CHANGES TO CODE IN `grokfield'. */
12799 tree
12800 grokmethod (cp_decl_specifier_seq *declspecs,
12801 const cp_declarator *declarator, tree attrlist)
12803 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12804 &attrlist);
12806 if (fndecl == error_mark_node)
12807 return error_mark_node;
12809 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12811 error ("invalid member function declaration");
12812 return error_mark_node;
12815 if (attrlist)
12816 cplus_decl_attributes (&fndecl, attrlist, 0);
12818 /* Pass friends other than inline friend functions back. */
12819 if (fndecl == void_type_node)
12820 return fndecl;
12822 if (DECL_IN_AGGR_P (fndecl))
12824 if (DECL_CONTEXT (fndecl)
12825 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12826 error ("%qD is already defined in class %qT", fndecl,
12827 DECL_CONTEXT (fndecl));
12828 return error_mark_node;
12831 check_template_shadow (fndecl);
12833 DECL_DECLARED_INLINE_P (fndecl) = 1;
12834 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12836 /* We process method specializations in finish_struct_1. */
12837 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12839 fndecl = push_template_decl (fndecl);
12840 if (fndecl == error_mark_node)
12841 return fndecl;
12844 if (! DECL_FRIEND_P (fndecl))
12846 if (TREE_CHAIN (fndecl))
12848 fndecl = copy_node (fndecl);
12849 TREE_CHAIN (fndecl) = NULL_TREE;
12853 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
12855 DECL_IN_AGGR_P (fndecl) = 1;
12856 return fndecl;
12860 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12861 we can lay it out later, when and if its type becomes complete. */
12863 void
12864 maybe_register_incomplete_var (tree var)
12866 gcc_assert (TREE_CODE (var) == VAR_DECL);
12868 /* Keep track of variables with incomplete types. */
12869 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12870 && DECL_EXTERNAL (var))
12872 tree inner_type = TREE_TYPE (var);
12874 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12875 inner_type = TREE_TYPE (inner_type);
12876 inner_type = TYPE_MAIN_VARIANT (inner_type);
12878 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12879 /* RTTI TD entries are created while defining the type_info. */
12880 || (TYPE_LANG_SPECIFIC (inner_type)
12881 && TYPE_BEING_DEFINED (inner_type)))
12882 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12886 /* Called when a class type (given by TYPE) is defined. If there are
12887 any existing VAR_DECLs whose type has been completed by this
12888 declaration, update them now. */
12890 void
12891 complete_vars (tree type)
12893 tree *list = &incomplete_vars;
12895 gcc_assert (CLASS_TYPE_P (type));
12896 while (*list)
12898 if (same_type_p (type, TREE_PURPOSE (*list)))
12900 tree var = TREE_VALUE (*list);
12901 tree type = TREE_TYPE (var);
12902 /* Complete the type of the variable. The VAR_DECL itself
12903 will be laid out in expand_expr. */
12904 complete_type (type);
12905 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12906 /* Remove this entry from the list. */
12907 *list = TREE_CHAIN (*list);
12909 else
12910 list = &TREE_CHAIN (*list);
12913 /* Check for pending declarations which may have abstract type. */
12914 complete_type_check_abstract (type);
12917 /* If DECL is of a type which needs a cleanup, build and return an
12918 expression to perform that cleanup here. Return NULL_TREE if no
12919 cleanup need be done. */
12921 tree
12922 cxx_maybe_build_cleanup (tree decl)
12924 tree type;
12925 tree attr;
12926 tree cleanup;
12928 /* Assume no cleanup is required. */
12929 cleanup = NULL_TREE;
12931 if (error_operand_p (decl))
12932 return cleanup;
12934 /* Handle "__attribute__((cleanup))". We run the cleanup function
12935 before the destructor since the destructor is what actually
12936 terminates the lifetime of the object. */
12937 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12938 if (attr)
12940 tree id;
12941 tree fn;
12942 tree arg;
12944 /* Get the name specified by the user for the cleanup function. */
12945 id = TREE_VALUE (TREE_VALUE (attr));
12946 /* Look up the name to find the cleanup function to call. It is
12947 important to use lookup_name here because that is what is
12948 used in c-common.c:handle_cleanup_attribute when performing
12949 initial checks on the attribute. Note that those checks
12950 include ensuring that the function found is not an overloaded
12951 function, or an object with an overloaded call operator,
12952 etc.; we can rely on the fact that the function found is an
12953 ordinary FUNCTION_DECL. */
12954 fn = lookup_name (id);
12955 arg = build_address (decl);
12956 mark_used (decl);
12957 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12958 arg),
12959 tf_warning_or_error);
12961 /* Handle ordinary C++ destructors. */
12962 type = TREE_TYPE (decl);
12963 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12965 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12966 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12967 && CLASSTYPE_VBASECLASSES (type));
12968 tree addr;
12969 tree call;
12971 if (TREE_CODE (type) == ARRAY_TYPE)
12972 addr = decl;
12973 else
12974 addr = build_address (decl);
12976 /* Optimize for space over speed here. */
12977 if (!has_vbases || flag_expensive_optimizations)
12978 flags |= LOOKUP_NONVIRTUAL;
12980 call = build_delete (TREE_TYPE (addr), addr,
12981 sfk_complete_destructor, flags, 0);
12982 if (cleanup)
12983 cleanup = build_compound_expr (input_location, cleanup, call);
12984 else
12985 cleanup = call;
12988 return cleanup;
12991 /* When a stmt has been parsed, this function is called. */
12993 void
12994 finish_stmt (void)
12998 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
12999 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13000 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
13002 tree
13003 static_fn_type (tree memfntype)
13005 tree fntype;
13006 tree args;
13007 int quals;
13009 if (TYPE_PTRMEMFUNC_P (memfntype))
13010 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13011 if (POINTER_TYPE_P (memfntype)
13012 || TREE_CODE (memfntype) == FUNCTION_DECL)
13013 memfntype = TREE_TYPE (memfntype);
13014 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13015 return memfntype;
13016 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13017 args = TYPE_ARG_TYPES (memfntype);
13018 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13019 quals = cp_type_quals (TREE_TYPE (TREE_VALUE (args)));
13020 fntype = build_qualified_type (fntype, quals);
13021 fntype = (cp_build_type_attribute_variant
13022 (fntype, TYPE_ATTRIBUTES (memfntype)));
13023 fntype = (build_exception_variant
13024 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13025 return fntype;
13028 /* DECL was originally constructed as a non-static member function,
13029 but turned out to be static. Update it accordingly. */
13031 void
13032 revert_static_member_fn (tree decl)
13034 TREE_TYPE (decl) = static_fn_type (decl);
13036 if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
13037 error ("static member function %q#D declared with type qualifiers", decl);
13039 if (DECL_ARGUMENTS (decl))
13040 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
13041 DECL_STATIC_FUNCTION_P (decl) = 1;
13044 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13045 one of the language-independent trees. */
13047 enum cp_tree_node_structure_enum
13048 cp_tree_node_structure (union lang_tree_node * t)
13050 switch (TREE_CODE (&t->generic))
13052 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
13053 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
13054 case OVERLOAD: return TS_CP_OVERLOAD;
13055 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
13056 case PTRMEM_CST: return TS_CP_PTRMEM;
13057 case BASELINK: return TS_CP_BASELINK;
13058 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
13059 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
13060 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
13061 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
13062 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
13063 default: return TS_CP_GENERIC;
13067 /* Build the void_list_node (void_type_node having been created). */
13068 tree
13069 build_void_list_node (void)
13071 tree t = build_tree_list (NULL_TREE, void_type_node);
13072 return t;
13075 bool
13076 cp_missing_noreturn_ok_p (tree decl)
13078 /* A missing noreturn is ok for the `main' function. */
13079 return DECL_MAIN_P (decl);
13082 /* Return the COMDAT group into which DECL should be placed. */
13084 tree
13085 cxx_comdat_group (tree decl)
13087 tree name;
13089 /* Virtual tables, construction virtual tables, and virtual table
13090 tables all go in a single COMDAT group, named after the primary
13091 virtual table. */
13092 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13093 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13094 /* For all other DECLs, the COMDAT group is the mangled name of the
13095 declaration itself. */
13096 else
13098 while (DECL_THUNK_P (decl))
13100 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13101 into the same section as the target function. In that case
13102 we must return target's name. */
13103 tree target = THUNK_TARGET (decl);
13104 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13105 && DECL_SECTION_NAME (target) != NULL
13106 && DECL_ONE_ONLY (target))
13107 decl = target;
13108 else
13109 break;
13111 name = DECL_ASSEMBLER_NAME (decl);
13114 return name;
13117 #include "gt-cp-decl.h"