PR c++/41970
[official-gcc/constexpr.git] / gcc / cp / decl.c
blob4ae924b32ad42e72276c5d94efc1de57c1fb88eb
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
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 /* Exit a binding level.
502 Pop the level off, and restore the state of the identifier-decl mappings
503 that were in effect when this level was entered.
505 If KEEP == 1, this level had explicit declarations, so
506 and create a "block" (a BLOCK node) for the level
507 to record its declarations and subblocks for symbol table output.
509 If FUNCTIONBODY is nonzero, this level is the body of a function,
510 so create a block as if KEEP were set and also clear out all
511 label names.
513 If REVERSE is nonzero, reverse the order of decls before putting
514 them into the BLOCK. */
516 tree
517 poplevel (int keep, int reverse, int functionbody)
519 tree link;
520 /* The chain of decls was accumulated in reverse order.
521 Put it into forward order, just for cleanliness. */
522 tree decls;
523 tree subblocks;
524 tree block;
525 tree decl;
526 int leaving_for_scope;
527 scope_kind kind;
529 timevar_push (TV_NAME_LOOKUP);
530 restart:
532 block = NULL_TREE;
534 gcc_assert (current_binding_level->kind != sk_class);
536 if (current_binding_level->kind == sk_cleanup)
537 functionbody = 0;
538 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
540 gcc_assert (!VEC_length(cp_class_binding,
541 current_binding_level->class_shadowed));
543 /* We used to use KEEP == 2 to indicate that the new block should go
544 at the beginning of the list of blocks at this binding level,
545 rather than the end. This hack is no longer used. */
546 gcc_assert (keep == 0 || keep == 1);
548 if (current_binding_level->keep)
549 keep = 1;
551 /* Any uses of undefined labels, and any defined labels, now operate
552 under constraints of next binding contour. */
553 if (cfun && !functionbody && named_labels)
554 htab_traverse (named_labels, poplevel_named_label_1,
555 current_binding_level);
557 /* Get the decls in the order they were written.
558 Usually current_binding_level->names is in reverse order.
559 But parameter decls were previously put in forward order. */
561 if (reverse)
562 current_binding_level->names
563 = decls = nreverse (current_binding_level->names);
564 else
565 decls = current_binding_level->names;
567 /* If there were any declarations or structure tags in that level,
568 or if this level is a function body,
569 create a BLOCK to record them for the life of this function. */
570 block = NULL_TREE;
571 if (keep == 1 || functionbody)
572 block = make_node (BLOCK);
573 if (block != NULL_TREE)
575 BLOCK_VARS (block) = decls;
576 BLOCK_SUBBLOCKS (block) = subblocks;
579 /* In each subblock, record that this is its superior. */
580 if (keep >= 0)
581 for (link = subblocks; link; link = BLOCK_CHAIN (link))
582 BLOCK_SUPERCONTEXT (link) = block;
584 /* We still support the old for-scope rules, whereby the variables
585 in a for-init statement were in scope after the for-statement
586 ended. We only use the new rules if flag_new_for_scope is
587 nonzero. */
588 leaving_for_scope
589 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
591 /* Before we remove the declarations first check for unused variables. */
592 if (warn_unused_variable
593 && !processing_template_decl)
594 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
595 if (TREE_CODE (decl) == VAR_DECL
596 && ! TREE_USED (decl)
597 && ! DECL_IN_SYSTEM_HEADER (decl)
598 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
599 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
601 /* Remove declarations for all the DECLs in this level. */
602 for (link = decls; link; link = TREE_CHAIN (link))
604 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
605 && DECL_NAME (link))
607 tree name = DECL_NAME (link);
608 cxx_binding *ob;
609 tree ns_binding;
611 ob = outer_binding (name,
612 IDENTIFIER_BINDING (name),
613 /*class_p=*/true);
614 if (!ob)
615 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
616 else
617 ns_binding = NULL_TREE;
619 if (ob && ob->scope == current_binding_level->level_chain)
620 /* We have something like:
622 int i;
623 for (int i; ;);
625 and we are leaving the `for' scope. There's no reason to
626 keep the binding of the inner `i' in this case. */
627 pop_binding (name, link);
628 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
629 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
630 /* Here, we have something like:
632 typedef int I;
634 void f () {
635 for (int I; ;);
638 We must pop the for-scope binding so we know what's a
639 type and what isn't. */
640 pop_binding (name, link);
641 else
643 /* Mark this VAR_DECL as dead so that we can tell we left it
644 there only for backward compatibility. */
645 DECL_DEAD_FOR_LOCAL (link) = 1;
647 /* Keep track of what should have happened when we
648 popped the binding. */
649 if (ob && ob->value)
651 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
652 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
655 /* Add it to the list of dead variables in the next
656 outermost binding to that we can remove these when we
657 leave that binding. */
658 current_binding_level->level_chain->dead_vars_from_for
659 = tree_cons (NULL_TREE, link,
660 current_binding_level->level_chain->
661 dead_vars_from_for);
663 /* Although we don't pop the cxx_binding, we do clear
664 its SCOPE since the scope is going away now. */
665 IDENTIFIER_BINDING (name)->scope
666 = current_binding_level->level_chain;
669 else
671 tree name;
673 /* Remove the binding. */
674 decl = link;
676 if (TREE_CODE (decl) == TREE_LIST)
677 decl = TREE_VALUE (decl);
678 name = decl;
680 if (TREE_CODE (name) == OVERLOAD)
681 name = OVL_FUNCTION (name);
683 gcc_assert (DECL_P (name));
684 pop_binding (DECL_NAME (name), decl);
688 /* Remove declarations for any `for' variables from inner scopes
689 that we kept around. */
690 for (link = current_binding_level->dead_vars_from_for;
691 link; link = TREE_CHAIN (link))
692 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
694 /* Restore the IDENTIFIER_TYPE_VALUEs. */
695 for (link = current_binding_level->type_shadowed;
696 link; link = TREE_CHAIN (link))
697 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
699 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
700 for (link = current_binding_level->shadowed_labels;
701 link;
702 link = TREE_CHAIN (link))
703 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
705 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
706 list if a `using' declaration put them there. The debugging
707 back ends won't understand OVERLOAD, so we remove them here.
708 Because the BLOCK_VARS are (temporarily) shared with
709 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
710 popped all the bindings. */
711 if (block)
713 tree* d;
715 for (d = &BLOCK_VARS (block); *d; )
717 if (TREE_CODE (*d) == TREE_LIST)
718 *d = TREE_CHAIN (*d);
719 else
720 d = &TREE_CHAIN (*d);
724 /* If the level being exited is the top level of a function,
725 check over all the labels. */
726 if (functionbody)
728 /* Since this is the top level block of a function, the vars are
729 the function's parameters. Don't leave them in the BLOCK
730 because they are found in the FUNCTION_DECL instead. */
731 BLOCK_VARS (block) = 0;
732 pop_labels (block);
735 kind = current_binding_level->kind;
736 if (kind == sk_cleanup)
738 tree stmt;
740 /* If this is a temporary binding created for a cleanup, then we'll
741 have pushed a statement list level. Pop that, create a new
742 BIND_EXPR for the block, and insert it into the stream. */
743 stmt = pop_stmt_list (current_binding_level->statement_list);
744 stmt = c_build_bind_expr (input_location, block, stmt);
745 add_stmt (stmt);
748 leave_scope ();
749 if (functionbody)
751 /* The current function is being defined, so its DECL_INITIAL
752 should be error_mark_node. */
753 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
754 DECL_INITIAL (current_function_decl) = block;
756 else if (block)
757 current_binding_level->blocks
758 = chainon (current_binding_level->blocks, block);
760 /* If we did not make a block for the level just exited,
761 any blocks made for inner levels
762 (since they cannot be recorded as subblocks in that level)
763 must be carried forward so they will later become subblocks
764 of something else. */
765 else if (subblocks)
766 current_binding_level->blocks
767 = chainon (current_binding_level->blocks, subblocks);
769 /* Each and every BLOCK node created here in `poplevel' is important
770 (e.g. for proper debugging information) so if we created one
771 earlier, mark it as "used". */
772 if (block)
773 TREE_USED (block) = 1;
775 /* All temporary bindings created for cleanups are popped silently. */
776 if (kind == sk_cleanup)
777 goto restart;
779 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
782 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
783 itself, calling F for each. The DATA is passed to F as well. */
785 static int
786 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
788 int result = 0;
789 tree current = NAMESPACE_LEVEL (name_space)->namespaces;
791 result |= (*f) (name_space, data);
793 for (; current; current = TREE_CHAIN (current))
794 result |= walk_namespaces_r (current, f, data);
796 return result;
799 /* Walk all the namespaces, calling F for each. The DATA is passed to
800 F as well. */
803 walk_namespaces (walk_namespaces_fn f, void* data)
805 return walk_namespaces_r (global_namespace, f, data);
808 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
809 DATA is non-NULL, this is the last time we will call
810 wrapup_global_declarations for this NAMESPACE. */
813 wrapup_globals_for_namespace (tree name_space, void* data)
815 struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
816 VEC(tree,gc) *statics = level->static_decls;
817 tree *vec = VEC_address (tree, statics);
818 int len = VEC_length (tree, statics);
819 int last_time = (data != 0);
821 if (last_time)
823 check_global_declarations (vec, len);
824 emit_debug_global_declarations (vec, len);
825 return 0;
828 /* Write out any globals that need to be output. */
829 return wrapup_global_declarations (vec, len);
833 /* In C++, you don't have to write `struct S' to refer to `S'; you
834 can just use `S'. We accomplish this by creating a TYPE_DECL as
835 if the user had written `typedef struct S S'. Create and return
836 the TYPE_DECL for TYPE. */
838 tree
839 create_implicit_typedef (tree name, tree type)
841 tree decl;
843 decl = build_decl (input_location, TYPE_DECL, name, type);
844 DECL_ARTIFICIAL (decl) = 1;
845 /* There are other implicit type declarations, like the one *within*
846 a class that allows you to write `S::S'. We must distinguish
847 amongst these. */
848 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
849 TYPE_NAME (type) = decl;
850 TYPE_STUB_DECL (type) = decl;
852 return decl;
855 /* Remember a local name for name-mangling purposes. */
857 static void
858 push_local_name (tree decl)
860 size_t i, nelts;
861 tree t, name;
863 timevar_push (TV_NAME_LOOKUP);
865 name = DECL_NAME (decl);
867 nelts = VEC_length (tree, local_names);
868 for (i = 0; i < nelts; i++)
870 t = VEC_index (tree, local_names, i);
871 if (DECL_NAME (t) == name)
873 if (!DECL_LANG_SPECIFIC (decl))
874 retrofit_lang_decl (decl);
875 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
876 if (DECL_LANG_SPECIFIC (t))
877 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
878 else
879 DECL_DISCRIMINATOR (decl) = 1;
881 VEC_replace (tree, local_names, i, decl);
882 timevar_pop (TV_NAME_LOOKUP);
883 return;
887 VEC_safe_push (tree, gc, local_names, decl);
888 timevar_pop (TV_NAME_LOOKUP);
891 /* Subroutine of duplicate_decls: return truthvalue of whether
892 or not types of these decls match.
894 For C++, we must compare the parameter list so that `int' can match
895 `int&' in a parameter position, but `int&' is not confused with
896 `const int&'. */
899 decls_match (tree newdecl, tree olddecl)
901 int types_match;
903 if (newdecl == olddecl)
904 return 1;
906 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
907 /* If the two DECLs are not even the same kind of thing, we're not
908 interested in their types. */
909 return 0;
911 if (TREE_CODE (newdecl) == FUNCTION_DECL)
913 tree f1 = TREE_TYPE (newdecl);
914 tree f2 = TREE_TYPE (olddecl);
915 tree p1 = TYPE_ARG_TYPES (f1);
916 tree p2 = TYPE_ARG_TYPES (f2);
918 /* Specializations of different templates are different functions
919 even if they have the same type. */
920 tree t1 = (DECL_USE_TEMPLATE (newdecl)
921 ? DECL_TI_TEMPLATE (newdecl)
922 : NULL_TREE);
923 tree t2 = (DECL_USE_TEMPLATE (olddecl)
924 ? DECL_TI_TEMPLATE (olddecl)
925 : NULL_TREE);
926 if (t1 != t2)
927 return 0;
929 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
930 && ! (DECL_EXTERN_C_P (newdecl)
931 && DECL_EXTERN_C_P (olddecl)))
932 return 0;
934 #ifdef NO_IMPLICIT_EXTERN_C
935 /* A new declaration doesn't match a built-in one unless it
936 is also extern "C". */
937 if (DECL_IS_BUILTIN (olddecl)
938 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
939 return 0;
940 #endif
942 if (TREE_CODE (f1) != TREE_CODE (f2))
943 return 0;
945 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
947 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
948 && (DECL_BUILT_IN (olddecl)
949 #ifndef NO_IMPLICIT_EXTERN_C
950 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
951 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
952 #endif
955 types_match = self_promoting_args_p (p1);
956 if (p1 == void_list_node)
957 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
959 #ifndef NO_IMPLICIT_EXTERN_C
960 else if (p1 == NULL_TREE
961 && (DECL_EXTERN_C_P (olddecl)
962 && DECL_IN_SYSTEM_HEADER (olddecl)
963 && !DECL_CLASS_SCOPE_P (olddecl))
964 && (DECL_EXTERN_C_P (newdecl)
965 && DECL_IN_SYSTEM_HEADER (newdecl)
966 && !DECL_CLASS_SCOPE_P (newdecl)))
968 types_match = self_promoting_args_p (p2);
969 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
971 #endif
972 else
973 types_match = compparms (p1, p2);
975 else
976 types_match = 0;
978 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
980 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
981 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
982 return 0;
984 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
985 DECL_TEMPLATE_PARMS (olddecl)))
986 return 0;
988 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
989 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
990 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
991 else
992 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
993 DECL_TEMPLATE_RESULT (newdecl));
995 else
997 /* Need to check scope for variable declaration (VAR_DECL).
998 For typedef (TYPE_DECL), scope is ignored. */
999 if (TREE_CODE (newdecl) == VAR_DECL
1000 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1001 /* [dcl.link]
1002 Two declarations for an object with C language linkage
1003 with the same name (ignoring the namespace that qualify
1004 it) that appear in different namespace scopes refer to
1005 the same object. */
1006 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1007 return 0;
1009 if (TREE_TYPE (newdecl) == error_mark_node)
1010 types_match = TREE_TYPE (olddecl) == error_mark_node;
1011 else if (TREE_TYPE (olddecl) == NULL_TREE)
1012 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1013 else if (TREE_TYPE (newdecl) == NULL_TREE)
1014 types_match = 0;
1015 else
1016 types_match = comptypes (TREE_TYPE (newdecl),
1017 TREE_TYPE (olddecl),
1018 COMPARE_REDECLARATION);
1021 return types_match;
1024 /* If NEWDECL is `static' and an `extern' was seen previously,
1025 warn about it. OLDDECL is the previous declaration.
1027 Note that this does not apply to the C++ case of declaring
1028 a variable `extern const' and then later `const'.
1030 Don't complain about built-in functions, since they are beyond
1031 the user's control. */
1033 void
1034 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1036 if (TREE_CODE (newdecl) == TYPE_DECL
1037 || TREE_CODE (newdecl) == TEMPLATE_DECL
1038 || TREE_CODE (newdecl) == CONST_DECL
1039 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1040 return;
1042 /* Don't get confused by static member functions; that's a different
1043 use of `static'. */
1044 if (TREE_CODE (newdecl) == FUNCTION_DECL
1045 && DECL_STATIC_FUNCTION_P (newdecl))
1046 return;
1048 /* If the old declaration was `static', or the new one isn't, then
1049 then everything is OK. */
1050 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1051 return;
1053 /* It's OK to declare a builtin function as `static'. */
1054 if (TREE_CODE (olddecl) == FUNCTION_DECL
1055 && DECL_ARTIFICIAL (olddecl))
1056 return;
1058 permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1059 permerror (input_location, "previous declaration of %q+D", olddecl);
1062 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1063 function templates. If their exception specifications do not
1064 match, issue a diagnostic. */
1066 static void
1067 check_redeclaration_exception_specification (tree new_decl,
1068 tree old_decl)
1070 tree new_type;
1071 tree old_type;
1072 tree new_exceptions;
1073 tree old_exceptions;
1075 new_type = TREE_TYPE (new_decl);
1076 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1077 old_type = TREE_TYPE (old_decl);
1078 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1080 /* [except.spec]
1082 If any declaration of a function has an exception-specification,
1083 all declarations, including the definition and an explicit
1084 specialization, of that function shall have an
1085 exception-specification with the same set of type-ids. */
1086 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1087 && ! DECL_IS_BUILTIN (old_decl)
1088 && flag_exceptions
1089 && !comp_except_specs (new_exceptions, old_exceptions,
1090 /*exact=*/true))
1092 error ("declaration of %qF throws different exceptions", new_decl);
1093 error ("from previous declaration %q+F", old_decl);
1097 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1098 && lookup_attribute ("gnu_inline", \
1099 DECL_ATTRIBUTES (fn)))
1101 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1102 If the redeclaration is invalid, a diagnostic is issued, and the
1103 error_mark_node is returned. Otherwise, OLDDECL is returned.
1105 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1106 returned.
1108 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1110 tree
1111 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1113 unsigned olddecl_uid = DECL_UID (olddecl);
1114 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1115 int new_defines_function = 0;
1116 tree new_template_info;
1118 if (newdecl == olddecl)
1119 return olddecl;
1121 types_match = decls_match (newdecl, olddecl);
1123 /* If either the type of the new decl or the type of the old decl is an
1124 error_mark_node, then that implies that we have already issued an
1125 error (earlier) for some bogus type specification, and in that case,
1126 it is rather pointless to harass the user with yet more error message
1127 about the same declaration, so just pretend the types match here. */
1128 if (TREE_TYPE (newdecl) == error_mark_node
1129 || TREE_TYPE (olddecl) == error_mark_node)
1130 return error_mark_node;
1132 if (DECL_P (olddecl)
1133 && TREE_CODE (newdecl) == FUNCTION_DECL
1134 && TREE_CODE (olddecl) == FUNCTION_DECL
1135 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1137 if (DECL_DECLARED_INLINE_P (newdecl)
1138 && DECL_UNINLINABLE (newdecl)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1140 /* Already warned elsewhere. */;
1141 else if (DECL_DECLARED_INLINE_P (olddecl)
1142 && DECL_UNINLINABLE (olddecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1144 /* Already warned. */;
1145 else if (DECL_DECLARED_INLINE_P (newdecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1149 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1150 newdecl);
1151 warning (OPT_Wattributes, "previous declaration of %q+D "
1152 "with attribute noinline", olddecl);
1154 else if (DECL_DECLARED_INLINE_P (olddecl)
1155 && DECL_UNINLINABLE (newdecl)
1156 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1158 warning (OPT_Wattributes, "function %q+D redeclared with "
1159 "attribute noinline", newdecl);
1160 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1161 olddecl);
1165 /* Check for redeclaration and other discrepancies. */
1166 if (TREE_CODE (olddecl) == FUNCTION_DECL
1167 && DECL_ARTIFICIAL (olddecl))
1169 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1170 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1172 /* Avoid warnings redeclaring built-ins which have not been
1173 explicitly declared. */
1174 if (DECL_ANTICIPATED (olddecl))
1175 return NULL_TREE;
1177 /* If you declare a built-in or predefined function name as static,
1178 the old definition is overridden, but optionally warn this was a
1179 bad choice of name. */
1180 if (! TREE_PUBLIC (newdecl))
1182 warning (OPT_Wshadow,
1183 DECL_BUILT_IN (olddecl)
1184 ? G_("shadowing built-in function %q#D")
1185 : G_("shadowing library function %q#D"), olddecl);
1186 /* Discard the old built-in function. */
1187 return NULL_TREE;
1189 /* If the built-in is not ansi, then programs can override
1190 it even globally without an error. */
1191 else if (! DECL_BUILT_IN (olddecl))
1192 warning (0, "library function %q#D redeclared as non-function %q#D",
1193 olddecl, newdecl);
1194 else
1196 error ("declaration of %q#D", newdecl);
1197 error ("conflicts with built-in declaration %q#D",
1198 olddecl);
1200 return NULL_TREE;
1202 else if (!types_match)
1204 /* Avoid warnings redeclaring built-ins which have not been
1205 explicitly declared. */
1206 if (DECL_ANTICIPATED (olddecl))
1208 /* Deal with fileptr_type_node. FILE type is not known
1209 at the time we create the builtins. */
1210 tree t1, t2;
1212 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1213 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1214 t1 || t2;
1215 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1216 if (!t1 || !t2)
1217 break;
1218 else if (TREE_VALUE (t2) == fileptr_type_node)
1220 tree t = TREE_VALUE (t1);
1222 if (TREE_CODE (t) == POINTER_TYPE
1223 && TYPE_NAME (TREE_TYPE (t))
1224 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1225 == get_identifier ("FILE")
1226 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1228 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1230 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1231 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1232 types_match = decls_match (newdecl, olddecl);
1233 if (types_match)
1234 return duplicate_decls (newdecl, olddecl,
1235 newdecl_is_friend);
1236 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1239 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1240 break;
1242 else if ((DECL_EXTERN_C_P (newdecl)
1243 && DECL_EXTERN_C_P (olddecl))
1244 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1245 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1247 /* A near match; override the builtin. */
1249 if (TREE_PUBLIC (newdecl))
1251 warning (0, "new declaration %q#D", newdecl);
1252 warning (0, "ambiguates built-in declaration %q#D",
1253 olddecl);
1255 else
1256 warning (OPT_Wshadow,
1257 DECL_BUILT_IN (olddecl)
1258 ? G_("shadowing built-in function %q#D")
1259 : G_("shadowing library function %q#D"), olddecl);
1261 else
1262 /* Discard the old built-in function. */
1263 return NULL_TREE;
1265 /* Replace the old RTL to avoid problems with inlining. */
1266 COPY_DECL_RTL (newdecl, olddecl);
1268 /* Even if the types match, prefer the new declarations type for
1269 built-ins which have not been explicitly declared, for
1270 exception lists, etc... */
1271 else if (DECL_ANTICIPATED (olddecl))
1273 tree type = TREE_TYPE (newdecl);
1274 tree attribs = (*targetm.merge_type_attributes)
1275 (TREE_TYPE (olddecl), type);
1277 type = cp_build_type_attribute_variant (type, attribs);
1278 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1281 /* If a function is explicitly declared "throw ()", propagate that to
1282 the corresponding builtin. */
1283 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1284 && DECL_ANTICIPATED (olddecl)
1285 && TREE_NOTHROW (newdecl)
1286 && !TREE_NOTHROW (olddecl)
1287 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1288 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1289 && types_match)
1290 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1292 /* Whether or not the builtin can throw exceptions has no
1293 bearing on this declarator. */
1294 TREE_NOTHROW (olddecl) = 0;
1296 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1298 /* If a builtin function is redeclared as `static', merge
1299 the declarations, but make the original one static. */
1300 DECL_THIS_STATIC (olddecl) = 1;
1301 TREE_PUBLIC (olddecl) = 0;
1303 /* Make the old declaration consistent with the new one so
1304 that all remnants of the builtin-ness of this function
1305 will be banished. */
1306 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1307 COPY_DECL_RTL (newdecl, olddecl);
1310 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1312 /* C++ Standard, 3.3, clause 4:
1313 "[Note: a namespace name or a class template name must be unique
1314 in its declarative region (7.3.2, clause 14). ]" */
1315 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1316 && TREE_CODE (newdecl) != NAMESPACE_DECL
1317 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1318 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1319 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1320 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1322 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1323 && TREE_CODE (newdecl) != TYPE_DECL)
1324 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1325 && TREE_CODE (olddecl) != TYPE_DECL))
1327 /* We do nothing special here, because C++ does such nasty
1328 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1329 get shadowed, and know that if we need to find a TYPE_DECL
1330 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1331 slot of the identifier. */
1332 return NULL_TREE;
1335 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1336 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1337 || (TREE_CODE (olddecl) == FUNCTION_DECL
1338 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1339 return NULL_TREE;
1342 error ("%q#D redeclared as different kind of symbol", newdecl);
1343 if (TREE_CODE (olddecl) == TREE_LIST)
1344 olddecl = TREE_VALUE (olddecl);
1345 error ("previous declaration of %q+#D", olddecl);
1347 return error_mark_node;
1349 else if (!types_match)
1351 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1352 /* These are certainly not duplicate declarations; they're
1353 from different scopes. */
1354 return NULL_TREE;
1356 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1358 /* The name of a class template may not be declared to refer to
1359 any other template, class, function, object, namespace, value,
1360 or type in the same scope. */
1361 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1362 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1364 error ("declaration of template %q#D", newdecl);
1365 error ("conflicts with previous declaration %q+#D", olddecl);
1367 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1368 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1369 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1370 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1371 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1372 DECL_TEMPLATE_PARMS (olddecl))
1373 /* Template functions can be disambiguated by
1374 return type. */
1375 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1376 TREE_TYPE (TREE_TYPE (olddecl))))
1378 error ("new declaration %q#D", newdecl);
1379 error ("ambiguates old declaration %q+#D", olddecl);
1381 return NULL_TREE;
1383 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1385 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1387 error ("declaration of C function %q#D conflicts with",
1388 newdecl);
1389 error ("previous declaration %q+#D here", olddecl);
1391 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1392 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1394 error ("new declaration %q#D", newdecl);
1395 error ("ambiguates old declaration %q+#D", olddecl);
1396 return error_mark_node;
1398 else
1399 return NULL_TREE;
1401 else
1403 error ("conflicting declaration %q#D", newdecl);
1404 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1405 return error_mark_node;
1408 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1409 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1410 && (!DECL_TEMPLATE_INFO (newdecl)
1411 || (DECL_TI_TEMPLATE (newdecl)
1412 != DECL_TI_TEMPLATE (olddecl))))
1413 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1414 && (!DECL_TEMPLATE_INFO (olddecl)
1415 || (DECL_TI_TEMPLATE (olddecl)
1416 != DECL_TI_TEMPLATE (newdecl))))))
1417 /* It's OK to have a template specialization and a non-template
1418 with the same type, or to have specializations of two
1419 different templates with the same type. Note that if one is a
1420 specialization, and the other is an instantiation of the same
1421 template, that we do not exit at this point. That situation
1422 can occur if we instantiate a template class, and then
1423 specialize one of its methods. This situation is valid, but
1424 the declarations must be merged in the usual way. */
1425 return NULL_TREE;
1426 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1427 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1428 && !DECL_USE_TEMPLATE (newdecl))
1429 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1430 && !DECL_USE_TEMPLATE (olddecl))))
1431 /* One of the declarations is a template instantiation, and the
1432 other is not a template at all. That's OK. */
1433 return NULL_TREE;
1434 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1436 /* In [namespace.alias] we have:
1438 In a declarative region, a namespace-alias-definition can be
1439 used to redefine a namespace-alias declared in that declarative
1440 region to refer only to the namespace to which it already
1441 refers.
1443 Therefore, if we encounter a second alias directive for the same
1444 alias, we can just ignore the second directive. */
1445 if (DECL_NAMESPACE_ALIAS (newdecl)
1446 && (DECL_NAMESPACE_ALIAS (newdecl)
1447 == DECL_NAMESPACE_ALIAS (olddecl)))
1448 return olddecl;
1449 /* [namespace.alias]
1451 A namespace-name or namespace-alias shall not be declared as
1452 the name of any other entity in the same declarative region.
1453 A namespace-name defined at global scope shall not be
1454 declared as the name of any other entity in any global scope
1455 of the program. */
1456 error ("declaration of namespace %qD conflicts with", newdecl);
1457 error ("previous declaration of namespace %q+D here", olddecl);
1458 return error_mark_node;
1460 else
1462 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1463 if (errmsg)
1465 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1466 if (DECL_NAME (olddecl) != NULL_TREE)
1467 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1468 ? "%q+#D previously defined here"
1469 : "%q+#D previously declared here", olddecl);
1470 return error_mark_node;
1472 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1473 && DECL_INITIAL (olddecl) != NULL_TREE
1474 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1475 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1477 /* Prototype decl follows defn w/o prototype. */
1478 warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1479 warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1480 "follows non-prototype definition here");
1482 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1483 || TREE_CODE (olddecl) == VAR_DECL)
1484 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1486 /* [dcl.link]
1487 If two declarations of the same function or object
1488 specify different linkage-specifications ..., the program
1489 is ill-formed.... Except for functions with C++ linkage,
1490 a function declaration without a linkage specification
1491 shall not precede the first linkage specification for
1492 that function. A function can be declared without a
1493 linkage specification after an explicit linkage
1494 specification has been seen; the linkage explicitly
1495 specified in the earlier declaration is not affected by
1496 such a function declaration.
1498 DR 563 raises the question why the restrictions on
1499 functions should not also apply to objects. Older
1500 versions of G++ silently ignore the linkage-specification
1501 for this example:
1503 namespace N {
1504 extern int i;
1505 extern "C" int i;
1508 which is clearly wrong. Therefore, we now treat objects
1509 like functions. */
1510 if (current_lang_depth () == 0)
1512 /* There is no explicit linkage-specification, so we use
1513 the linkage from the previous declaration. */
1514 if (!DECL_LANG_SPECIFIC (newdecl))
1515 retrofit_lang_decl (newdecl);
1516 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1518 else
1520 error ("previous declaration of %q+#D with %qL linkage",
1521 olddecl, DECL_LANGUAGE (olddecl));
1522 error ("conflicts with new declaration with %qL linkage",
1523 DECL_LANGUAGE (newdecl));
1527 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1529 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1531 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1532 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1533 int i = 1;
1535 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1536 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1538 for (; t1 && t1 != void_list_node;
1539 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1540 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1542 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1543 TREE_PURPOSE (t2)))
1545 permerror (input_location, "default argument given for parameter %d of %q#D",
1546 i, newdecl);
1547 permerror (input_location, "after previous specification in %q+#D", olddecl);
1549 else
1551 error ("default argument given for parameter %d of %q#D",
1552 i, newdecl);
1553 error ("after previous specification in %q+#D",
1554 olddecl);
1560 /* Do not merge an implicit typedef with an explicit one. In:
1562 class A;
1564 typedef class A A __attribute__ ((foo));
1566 the attribute should apply only to the typedef. */
1567 if (TREE_CODE (olddecl) == TYPE_DECL
1568 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1569 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1570 return NULL_TREE;
1572 /* If new decl is `static' and an `extern' was seen previously,
1573 warn about it. */
1574 warn_extern_redeclared_static (newdecl, olddecl);
1576 /* We have committed to returning 1 at this point. */
1577 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1579 /* Now that functions must hold information normally held
1580 by field decls, there is extra work to do so that
1581 declaration information does not get destroyed during
1582 definition. */
1583 if (DECL_VINDEX (olddecl))
1584 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1585 if (DECL_CONTEXT (olddecl))
1586 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1587 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1588 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1589 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1590 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1591 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1592 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1593 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1594 SET_OVERLOADED_OPERATOR_CODE
1595 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1596 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1598 /* Optionally warn about more than one declaration for the same
1599 name, but don't warn about a function declaration followed by a
1600 definition. */
1601 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1602 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1603 /* Don't warn about extern decl followed by definition. */
1604 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1605 /* Don't warn about friends, let add_friend take care of it. */
1606 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1608 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1609 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1612 if (DECL_DELETED_FN (newdecl))
1614 error ("deleted definition of %qD", newdecl);
1615 error ("after previous declaration %q+D", olddecl);
1619 /* Deal with C++: must preserve virtual function table size. */
1620 if (TREE_CODE (olddecl) == TYPE_DECL)
1622 tree newtype = TREE_TYPE (newdecl);
1623 tree oldtype = TREE_TYPE (olddecl);
1625 if (newtype != error_mark_node && oldtype != error_mark_node
1626 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1627 CLASSTYPE_FRIEND_CLASSES (newtype)
1628 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1630 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1633 /* Copy all the DECL_... slots specified in the new decl
1634 except for any that we copy here from the old type. */
1635 DECL_ATTRIBUTES (newdecl)
1636 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1638 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1640 tree old_result;
1641 tree new_result;
1642 old_result = DECL_TEMPLATE_RESULT (olddecl);
1643 new_result = DECL_TEMPLATE_RESULT (newdecl);
1644 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1645 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1646 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1647 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1649 DECL_ATTRIBUTES (old_result)
1650 = (*targetm.merge_decl_attributes) (old_result, new_result);
1652 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1654 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1655 && DECL_INITIAL (new_result))
1657 if (DECL_INITIAL (old_result))
1658 DECL_UNINLINABLE (old_result) = 1;
1659 else
1660 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1661 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1662 DECL_NOT_REALLY_EXTERN (old_result)
1663 = DECL_NOT_REALLY_EXTERN (new_result);
1664 DECL_INTERFACE_KNOWN (old_result)
1665 = DECL_INTERFACE_KNOWN (new_result);
1666 DECL_DECLARED_INLINE_P (old_result)
1667 = DECL_DECLARED_INLINE_P (new_result);
1668 DECL_DISREGARD_INLINE_LIMITS (old_result)
1669 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1672 else
1674 DECL_DECLARED_INLINE_P (old_result)
1675 |= DECL_DECLARED_INLINE_P (new_result);
1676 DECL_DISREGARD_INLINE_LIMITS (old_result)
1677 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1678 check_redeclaration_exception_specification (newdecl, olddecl);
1682 /* If the new declaration is a definition, update the file and
1683 line information on the declaration, and also make
1684 the old declaration the same definition. */
1685 if (DECL_INITIAL (new_result) != NULL_TREE)
1687 DECL_SOURCE_LOCATION (olddecl)
1688 = DECL_SOURCE_LOCATION (old_result)
1689 = DECL_SOURCE_LOCATION (newdecl);
1690 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1691 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1693 tree parm;
1694 DECL_ARGUMENTS (old_result)
1695 = DECL_ARGUMENTS (new_result);
1696 for (parm = DECL_ARGUMENTS (old_result); parm;
1697 parm = TREE_CHAIN (parm))
1698 DECL_CONTEXT (parm) = old_result;
1702 return olddecl;
1705 if (types_match)
1707 /* Automatically handles default parameters. */
1708 tree oldtype = TREE_TYPE (olddecl);
1709 tree newtype;
1711 /* Merge the data types specified in the two decls. */
1712 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1714 /* If merge_types produces a non-typedef type, just use the old type. */
1715 if (TREE_CODE (newdecl) == TYPE_DECL
1716 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1717 newtype = oldtype;
1719 if (TREE_CODE (newdecl) == VAR_DECL)
1721 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1722 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1723 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1724 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1725 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1726 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1728 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1729 if (DECL_LANG_SPECIFIC (olddecl)
1730 && CP_DECL_THREADPRIVATE_P (olddecl))
1732 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1733 if (!DECL_LANG_SPECIFIC (newdecl))
1734 retrofit_lang_decl (newdecl);
1736 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1737 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1741 /* Do this after calling `merge_types' so that default
1742 parameters don't confuse us. */
1743 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1744 check_redeclaration_exception_specification (newdecl, olddecl);
1745 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1747 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1748 check_default_args (newdecl);
1750 /* Lay the type out, unless already done. */
1751 if (! same_type_p (newtype, oldtype)
1752 && TREE_TYPE (newdecl) != error_mark_node
1753 && !(processing_template_decl && uses_template_parms (newdecl)))
1754 layout_type (TREE_TYPE (newdecl));
1756 if ((TREE_CODE (newdecl) == VAR_DECL
1757 || TREE_CODE (newdecl) == PARM_DECL
1758 || TREE_CODE (newdecl) == RESULT_DECL
1759 || TREE_CODE (newdecl) == FIELD_DECL
1760 || TREE_CODE (newdecl) == TYPE_DECL)
1761 && !(processing_template_decl && uses_template_parms (newdecl)))
1762 layout_decl (newdecl, 0);
1764 /* Merge the type qualifiers. */
1765 if (TREE_READONLY (newdecl))
1766 TREE_READONLY (olddecl) = 1;
1767 if (TREE_THIS_VOLATILE (newdecl))
1768 TREE_THIS_VOLATILE (olddecl) = 1;
1769 if (TREE_NOTHROW (newdecl))
1770 TREE_NOTHROW (olddecl) = 1;
1772 /* Merge deprecatedness. */
1773 if (TREE_DEPRECATED (newdecl))
1774 TREE_DEPRECATED (olddecl) = 1;
1776 /* Preserve function specific target and optimization options */
1777 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1779 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1780 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1781 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1782 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1784 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1785 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1786 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1787 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1790 /* Merge the initialization information. */
1791 if (DECL_INITIAL (newdecl) == NULL_TREE
1792 && DECL_INITIAL (olddecl) != NULL_TREE)
1794 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1795 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1796 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1798 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1799 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1803 /* Merge the section attribute.
1804 We want to issue an error if the sections conflict but that must be
1805 done later in decl_attributes since we are called before attributes
1806 are assigned. */
1807 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1808 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1810 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1812 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1813 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1814 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1815 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1816 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1817 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1818 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1819 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1820 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1821 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1822 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1823 /* Keep the old RTL. */
1824 COPY_DECL_RTL (olddecl, newdecl);
1826 else if (TREE_CODE (newdecl) == VAR_DECL
1827 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1829 /* Keep the old RTL. We cannot keep the old RTL if the old
1830 declaration was for an incomplete object and the new
1831 declaration is not since many attributes of the RTL will
1832 change. */
1833 COPY_DECL_RTL (olddecl, newdecl);
1836 /* If cannot merge, then use the new type and qualifiers,
1837 and don't preserve the old rtl. */
1838 else
1840 /* Clean out any memory we had of the old declaration. */
1841 tree oldstatic = value_member (olddecl, static_aggregates);
1842 if (oldstatic)
1843 TREE_VALUE (oldstatic) = error_mark_node;
1845 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1846 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1847 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1848 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1851 /* Merge the storage class information. */
1852 merge_weak (newdecl, olddecl);
1854 if (DECL_ONE_ONLY (olddecl))
1855 DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1857 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1858 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1859 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1860 if (! DECL_EXTERNAL (olddecl))
1861 DECL_EXTERNAL (newdecl) = 0;
1863 new_template_info = NULL_TREE;
1864 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1866 bool new_redefines_gnu_inline = false;
1868 if (new_defines_function
1869 && ((DECL_INTERFACE_KNOWN (olddecl)
1870 && TREE_CODE (olddecl) == FUNCTION_DECL)
1871 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1872 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1873 == FUNCTION_DECL))))
1875 tree fn = olddecl;
1877 if (TREE_CODE (fn) == TEMPLATE_DECL)
1878 fn = DECL_TEMPLATE_RESULT (olddecl);
1880 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1883 if (!new_redefines_gnu_inline)
1885 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1886 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1887 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1889 DECL_TEMPLATE_INSTANTIATED (newdecl)
1890 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1891 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1893 /* If the OLDDECL is an instantiation and/or specialization,
1894 then the NEWDECL must be too. But, it may not yet be marked
1895 as such if the caller has created NEWDECL, but has not yet
1896 figured out that it is a redeclaration. */
1897 if (!DECL_USE_TEMPLATE (newdecl))
1898 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1900 /* Don't really know how much of the language-specific
1901 values we should copy from old to new. */
1902 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1903 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1904 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1905 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1907 if (LANG_DECL_HAS_MIN (newdecl))
1909 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1910 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1911 if (DECL_TEMPLATE_INFO (newdecl))
1912 new_template_info = DECL_TEMPLATE_INFO (newdecl);
1913 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1915 /* Only functions have these fields. */
1916 if (TREE_CODE (newdecl) == FUNCTION_DECL
1917 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1919 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1920 olddecl_friend = DECL_FRIEND_P (olddecl);
1921 hidden_friend = (DECL_ANTICIPATED (olddecl)
1922 && DECL_HIDDEN_FRIEND_P (olddecl)
1923 && newdecl_is_friend);
1924 DECL_BEFRIENDING_CLASSES (newdecl)
1925 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1926 DECL_BEFRIENDING_CLASSES (olddecl));
1927 /* DECL_THUNKS is only valid for virtual functions,
1928 otherwise it is a DECL_FRIEND_CONTEXT. */
1929 if (DECL_VIRTUAL_P (newdecl))
1930 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1934 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1936 tree parm;
1938 /* Merge parameter attributes. */
1939 tree oldarg, newarg;
1940 for (oldarg = DECL_ARGUMENTS(olddecl),
1941 newarg = DECL_ARGUMENTS(newdecl);
1942 oldarg && newarg;
1943 oldarg = TREE_CHAIN(oldarg), newarg = TREE_CHAIN(newarg)) {
1944 DECL_ATTRIBUTES (newarg)
1945 = (*targetm.merge_decl_attributes) (oldarg, newarg);
1946 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
1949 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1950 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1952 /* If newdecl is not a specialization, then it is not a
1953 template-related function at all. And that means that we
1954 should have exited above, returning 0. */
1955 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1957 if (DECL_ODR_USED (olddecl))
1958 /* From [temp.expl.spec]:
1960 If a template, a member template or the member of a class
1961 template is explicitly specialized then that
1962 specialization shall be declared before the first use of
1963 that specialization that would cause an implicit
1964 instantiation to take place, in every translation unit in
1965 which such a use occurs. */
1966 error ("explicit specialization of %qD after first use",
1967 olddecl);
1969 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1971 /* Don't propagate visibility from the template to the
1972 specialization here. We'll do that in determine_visibility if
1973 appropriate. */
1974 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1976 /* [temp.expl.spec/14] We don't inline explicit specialization
1977 just because the primary template says so. */
1979 else if (new_defines_function && DECL_INITIAL (olddecl))
1981 /* Never inline re-defined extern inline functions.
1982 FIXME: this could be better handled by keeping both
1983 function as separate declarations. */
1984 DECL_UNINLINABLE (newdecl) = 1;
1986 else
1988 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1989 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1991 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1993 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1994 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1996 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1997 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1998 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1999 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2002 /* Preserve abstractness on cloned [cd]tors. */
2003 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2005 /* Update newdecl's parms to point at olddecl. */
2006 for (parm = DECL_ARGUMENTS (newdecl); parm;
2007 parm = TREE_CHAIN (parm))
2008 DECL_CONTEXT (parm) = olddecl;
2010 if (! types_match)
2012 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2013 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2014 COPY_DECL_RTL (newdecl, olddecl);
2016 if (! types_match || new_defines_function)
2018 /* These need to be copied so that the names are available.
2019 Note that if the types do match, we'll preserve inline
2020 info and other bits, but if not, we won't. */
2021 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2022 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2024 if (new_defines_function)
2025 /* If defining a function declared with other language
2026 linkage, use the previously declared language linkage. */
2027 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2028 else if (types_match)
2030 /* If redeclaring a builtin function, and not a definition,
2031 it stays built in. */
2032 if (DECL_BUILT_IN (olddecl))
2034 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2035 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2036 /* If we're keeping the built-in definition, keep the rtl,
2037 regardless of declaration matches. */
2038 COPY_DECL_RTL (olddecl, newdecl);
2041 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2042 /* Don't clear out the arguments if we're just redeclaring a
2043 function. */
2044 if (DECL_ARGUMENTS (olddecl))
2045 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2048 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2049 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2051 /* Now preserve various other info from the definition. */
2052 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2053 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2054 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2055 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2057 /* Warn about conflicting visibility specifications. */
2058 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2059 && DECL_VISIBILITY_SPECIFIED (newdecl)
2060 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2062 warning_at (input_location, OPT_Wattributes,
2063 "%q+D: visibility attribute ignored because it", newdecl);
2064 warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2065 "conflicts with previous declaration here");
2067 /* Choose the declaration which specified visibility. */
2068 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2070 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2071 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2073 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2074 so keep this behavior. */
2075 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2077 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2078 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2081 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2082 with that from NEWDECL below. */
2083 if (DECL_LANG_SPECIFIC (olddecl))
2085 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2086 != DECL_LANG_SPECIFIC (newdecl));
2087 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2090 /* Merge the USED information. */
2091 if (TREE_USED (olddecl))
2092 TREE_USED (newdecl) = 1;
2093 else if (TREE_USED (newdecl))
2094 TREE_USED (olddecl) = 1;
2095 if (DECL_PRESERVE_P (olddecl))
2096 DECL_PRESERVE_P (newdecl) = 1;
2097 else if (DECL_PRESERVE_P (newdecl))
2098 DECL_PRESERVE_P (olddecl) = 1;
2100 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2102 int function_size;
2104 function_size = sizeof (struct tree_decl_common);
2106 memcpy ((char *) olddecl + sizeof (struct tree_common),
2107 (char *) newdecl + sizeof (struct tree_common),
2108 function_size - sizeof (struct tree_common));
2110 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2111 (char *) newdecl + sizeof (struct tree_decl_common),
2112 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2113 if (new_template_info)
2114 /* If newdecl is a template instantiation, it is possible that
2115 the following sequence of events has occurred:
2117 o A friend function was declared in a class template. The
2118 class template was instantiated.
2120 o The instantiation of the friend declaration was
2121 recorded on the instantiation list, and is newdecl.
2123 o Later, however, instantiate_class_template called pushdecl
2124 on the newdecl to perform name injection. But, pushdecl in
2125 turn called duplicate_decls when it discovered that another
2126 declaration of a global function with the same name already
2127 existed.
2129 o Here, in duplicate_decls, we decided to clobber newdecl.
2131 If we're going to do that, we'd better make sure that
2132 olddecl, and not newdecl, is on the list of
2133 instantiations so that if we try to do the instantiation
2134 again we won't get the clobbered declaration. */
2135 reregister_specialization (newdecl,
2136 new_template_info,
2137 olddecl);
2139 else
2141 size_t size = tree_code_size (TREE_CODE (olddecl));
2142 memcpy ((char *) olddecl + sizeof (struct tree_common),
2143 (char *) newdecl + sizeof (struct tree_common),
2144 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2145 switch (TREE_CODE (olddecl))
2147 case LABEL_DECL:
2148 case VAR_DECL:
2149 case RESULT_DECL:
2150 case PARM_DECL:
2151 case FIELD_DECL:
2152 case TYPE_DECL:
2153 case CONST_DECL:
2155 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2156 (char *) newdecl + sizeof (struct tree_decl_common),
2157 size - sizeof (struct tree_decl_common)
2158 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2160 break;
2161 default:
2162 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2163 (char *) newdecl + sizeof (struct tree_decl_common),
2164 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2165 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2166 break;
2169 DECL_UID (olddecl) = olddecl_uid;
2170 if (olddecl_friend)
2171 DECL_FRIEND_P (olddecl) = 1;
2172 if (hidden_friend)
2174 DECL_ANTICIPATED (olddecl) = 1;
2175 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2178 /* NEWDECL contains the merged attribute lists.
2179 Update OLDDECL to be the same. */
2180 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2182 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2183 so that encode_section_info has a chance to look at the new decl
2184 flags and attributes. */
2185 if (DECL_RTL_SET_P (olddecl)
2186 && (TREE_CODE (olddecl) == FUNCTION_DECL
2187 || (TREE_CODE (olddecl) == VAR_DECL
2188 && TREE_STATIC (olddecl))))
2189 make_decl_rtl (olddecl);
2191 /* The NEWDECL will no longer be needed. Because every out-of-class
2192 declaration of a member results in a call to duplicate_decls,
2193 freeing these nodes represents in a significant savings. */
2194 ggc_free (newdecl);
2196 return olddecl;
2199 /* Return zero if the declaration NEWDECL is valid
2200 when the declaration OLDDECL (assumed to be for the same name)
2201 has already been seen.
2202 Otherwise return an error message format string with a %s
2203 where the identifier should go. */
2205 static const char *
2206 redeclaration_error_message (tree newdecl, tree olddecl)
2208 if (TREE_CODE (newdecl) == TYPE_DECL)
2210 /* Because C++ can put things into name space for free,
2211 constructs like "typedef struct foo { ... } foo"
2212 would look like an erroneous redeclaration. */
2213 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2214 return NULL;
2215 else
2216 return G_("redefinition of %q#D");
2218 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2220 /* If this is a pure function, its olddecl will actually be
2221 the original initialization to `0' (which we force to call
2222 abort()). Don't complain about redefinition in this case. */
2223 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2224 && DECL_INITIAL (olddecl) == NULL_TREE)
2225 return NULL;
2227 /* If both functions come from different namespaces, this is not
2228 a redeclaration - this is a conflict with a used function. */
2229 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2230 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2231 && ! decls_match (olddecl, newdecl))
2232 return G_("%qD conflicts with used function");
2234 /* We'll complain about linkage mismatches in
2235 warn_extern_redeclared_static. */
2237 /* Defining the same name twice is no good. */
2238 if (DECL_INITIAL (olddecl) != NULL_TREE
2239 && DECL_INITIAL (newdecl) != NULL_TREE)
2241 if (DECL_NAME (olddecl) == NULL_TREE)
2242 return G_("%q#D not declared in class");
2243 else if (!GNU_INLINE_P (olddecl)
2244 || GNU_INLINE_P (newdecl))
2245 return G_("redefinition of %q#D");
2248 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2250 bool olda = GNU_INLINE_P (olddecl);
2251 bool newa = GNU_INLINE_P (newdecl);
2253 if (olda != newa)
2255 if (newa)
2256 return G_("%q+D redeclared inline with "
2257 "%<gnu_inline%> attribute");
2258 else
2259 return G_("%q+D redeclared inline without "
2260 "%<gnu_inline%> attribute");
2264 return NULL;
2266 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2268 tree nt, ot;
2270 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2272 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2273 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2274 return G_("redefinition of %q#D");
2275 return NULL;
2278 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2279 || (DECL_TEMPLATE_RESULT (newdecl)
2280 == DECL_TEMPLATE_RESULT (olddecl)))
2281 return NULL;
2283 nt = DECL_TEMPLATE_RESULT (newdecl);
2284 if (DECL_TEMPLATE_INFO (nt))
2285 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2286 ot = DECL_TEMPLATE_RESULT (olddecl);
2287 if (DECL_TEMPLATE_INFO (ot))
2288 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2289 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2290 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2291 return G_("redefinition of %q#D");
2293 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2295 bool olda = GNU_INLINE_P (ot);
2296 bool newa = GNU_INLINE_P (nt);
2298 if (olda != newa)
2300 if (newa)
2301 return G_("%q+D redeclared inline with "
2302 "%<gnu_inline%> attribute");
2303 else
2304 return G_("%q+D redeclared inline without "
2305 "%<gnu_inline%> attribute");
2309 /* Core issue #226 (C++0x):
2311 If a friend function template declaration specifies a
2312 default template-argument, that declaration shall be a
2313 definition and shall be the only declaration of the
2314 function template in the translation unit. */
2315 if ((cxx_dialect != cxx98)
2316 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2317 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2318 /*is_primary=*/1, /*is_partial=*/0,
2319 /*is_friend_decl=*/2))
2320 return G_("redeclaration of friend %q#D "
2321 "may not have default template arguments");
2323 return NULL;
2325 else if (TREE_CODE (newdecl) == VAR_DECL
2326 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2327 && (! DECL_LANG_SPECIFIC (olddecl)
2328 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2329 || DECL_THREAD_LOCAL_P (newdecl)))
2331 /* Only variables can be thread-local, and all declarations must
2332 agree on this property. */
2333 if (DECL_THREAD_LOCAL_P (newdecl))
2334 return G_("thread-local declaration of %q#D follows "
2335 "non-thread-local declaration");
2336 else
2337 return G_("non-thread-local declaration of %q#D follows "
2338 "thread-local declaration");
2340 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2342 /* The objects have been declared at namespace scope. If either
2343 is a member of an anonymous union, then this is an invalid
2344 redeclaration. For example:
2346 int i;
2347 union { int i; };
2349 is invalid. */
2350 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2351 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2352 return G_("redeclaration of %q#D");
2353 /* If at least one declaration is a reference, there is no
2354 conflict. For example:
2356 int i = 3;
2357 extern int i;
2359 is valid. */
2360 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2361 return NULL;
2362 /* Reject two definitions. */
2363 return G_("redefinition of %q#D");
2365 else
2367 /* Objects declared with block scope: */
2368 /* Reject two definitions, and reject a definition
2369 together with an external reference. */
2370 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2371 return G_("redeclaration of %q#D");
2372 return NULL;
2376 /* Hash and equality functions for the named_label table. */
2378 static hashval_t
2379 named_label_entry_hash (const void *data)
2381 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2382 return DECL_UID (ent->label_decl);
2385 static int
2386 named_label_entry_eq (const void *a, const void *b)
2388 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2389 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2390 return ent_a->label_decl == ent_b->label_decl;
2393 /* Create a new label, named ID. */
2395 static tree
2396 make_label_decl (tree id, int local_p)
2398 struct named_label_entry *ent;
2399 void **slot;
2400 tree decl;
2402 decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2404 DECL_CONTEXT (decl) = current_function_decl;
2405 DECL_MODE (decl) = VOIDmode;
2406 C_DECLARED_LABEL_FLAG (decl) = local_p;
2408 /* Say where one reference is to the label, for the sake of the
2409 error if it is not defined. */
2410 DECL_SOURCE_LOCATION (decl) = input_location;
2412 /* Record the fact that this identifier is bound to this label. */
2413 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2415 /* Create the label htab for the function on demand. */
2416 if (!named_labels)
2417 named_labels = htab_create_ggc (13, named_label_entry_hash,
2418 named_label_entry_eq, NULL);
2420 /* Record this label on the list of labels used in this function.
2421 We do this before calling make_label_decl so that we get the
2422 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2423 ent = GGC_CNEW (struct named_label_entry);
2424 ent->label_decl = decl;
2426 slot = htab_find_slot (named_labels, ent, INSERT);
2427 gcc_assert (*slot == NULL);
2428 *slot = ent;
2430 return decl;
2433 /* Look for a label named ID in the current function. If one cannot
2434 be found, create one. (We keep track of used, but undefined,
2435 labels, and complain about them at the end of a function.) */
2437 tree
2438 lookup_label (tree id)
2440 tree decl;
2442 timevar_push (TV_NAME_LOOKUP);
2443 /* You can't use labels at global scope. */
2444 if (current_function_decl == NULL_TREE)
2446 error ("label %qE referenced outside of any function", id);
2447 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2450 /* See if we've already got this label. */
2451 decl = IDENTIFIER_LABEL_VALUE (id);
2452 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2453 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2455 decl = make_label_decl (id, /*local_p=*/0);
2456 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2459 /* Declare a local label named ID. */
2461 tree
2462 declare_local_label (tree id)
2464 tree decl, shadow;
2466 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2467 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2468 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2469 current_binding_level->shadowed_labels);
2470 current_binding_level->shadowed_labels = shadow;
2472 decl = make_label_decl (id, /*local_p=*/1);
2473 TREE_VALUE (shadow) = decl;
2475 return decl;
2478 /* Returns nonzero if it is ill-formed to jump past the declaration of
2479 DECL. Returns 2 if it's also a real problem. */
2481 static int
2482 decl_jump_unsafe (tree decl)
2484 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2485 with automatic storage duration is not in scope to a point where it is
2486 in scope is ill-formed unless the variable has scalar type, class type
2487 with a trivial default constructor and a trivial destructor, a
2488 cv-qualified version of one of these types, or an array of one of the
2489 preceding types and is declared without an initializer (8.5). */
2490 tree type = TREE_TYPE (decl);
2492 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2493 || type == error_mark_node)
2494 return 0;
2496 type = strip_array_types (type);
2498 if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2499 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2500 return 2;
2502 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2503 return 1;
2505 return 0;
2508 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2510 static void
2511 identify_goto (tree decl, const location_t *locus)
2513 if (decl)
2514 permerror (input_location, "jump to label %qD", decl);
2515 else
2516 permerror (input_location, "jump to case label");
2517 if (locus)
2518 permerror (*locus, " from here");
2521 /* Check that a single previously seen jump to a newly defined label
2522 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2523 the jump context; NAMES are the names in scope in LEVEL at the jump
2524 context; LOCUS is the source position of the jump or 0. Returns
2525 true if all is well. */
2527 static bool
2528 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2529 bool exited_omp, const location_t *locus)
2531 struct cp_binding_level *b;
2532 bool identified = false, saw_eh = false, saw_omp = false;
2534 if (exited_omp)
2536 identify_goto (decl, locus);
2537 error (" exits OpenMP structured block");
2538 identified = saw_omp = true;
2541 for (b = current_binding_level; b ; b = b->level_chain)
2543 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2545 for (new_decls = b->names; new_decls != old_decls;
2546 new_decls = TREE_CHAIN (new_decls))
2548 int problem = decl_jump_unsafe (new_decls);
2549 if (! problem)
2550 continue;
2552 if (!identified)
2554 identify_goto (decl, locus);
2555 identified = true;
2557 if (problem > 1)
2558 error (" crosses initialization of %q+#D", new_decls);
2559 else
2560 permerror (input_location, " enters scope of %q+#D which has "
2561 "non-trivial destructor", new_decls);
2564 if (b == level)
2565 break;
2566 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2568 if (!identified)
2570 identify_goto (decl, locus);
2571 identified = true;
2573 if (b->kind == sk_try)
2574 error (" enters try block");
2575 else
2576 error (" enters catch block");
2577 saw_eh = true;
2579 if (b->kind == sk_omp && !saw_omp)
2581 if (!identified)
2583 identify_goto (decl, locus);
2584 identified = true;
2586 error (" enters OpenMP structured block");
2587 saw_omp = true;
2591 return !identified;
2594 static void
2595 check_previous_goto (tree decl, struct named_label_use_entry *use)
2597 check_previous_goto_1 (decl, use->binding_level,
2598 use->names_in_scope, use->in_omp_scope,
2599 &use->o_goto_locus);
2602 static bool
2603 check_switch_goto (struct cp_binding_level* level)
2605 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2608 /* Check that a new jump to a label DECL is OK. Called by
2609 finish_goto_stmt. */
2611 void
2612 check_goto (tree decl)
2614 struct named_label_entry *ent, dummy;
2615 bool saw_catch = false, identified = false;
2616 tree bad;
2618 /* We can't know where a computed goto is jumping.
2619 So we assume that it's OK. */
2620 if (TREE_CODE (decl) != LABEL_DECL)
2621 return;
2623 /* We didn't record any information about this label when we created it,
2624 and there's not much point since it's trivial to analyze as a return. */
2625 if (decl == cdtor_label)
2626 return;
2628 dummy.label_decl = decl;
2629 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2630 gcc_assert (ent != NULL);
2632 /* If the label hasn't been defined yet, defer checking. */
2633 if (! DECL_INITIAL (decl))
2635 struct named_label_use_entry *new_use;
2637 /* Don't bother creating another use if the last goto had the
2638 same data, and will therefore create the same set of errors. */
2639 if (ent->uses
2640 && ent->uses->names_in_scope == current_binding_level->names)
2641 return;
2643 new_use = GGC_NEW (struct named_label_use_entry);
2644 new_use->binding_level = current_binding_level;
2645 new_use->names_in_scope = current_binding_level->names;
2646 new_use->o_goto_locus = input_location;
2647 new_use->in_omp_scope = false;
2649 new_use->next = ent->uses;
2650 ent->uses = new_use;
2651 return;
2654 if (ent->in_try_scope || ent->in_catch_scope
2655 || ent->in_omp_scope || ent->bad_decls)
2657 permerror (input_location, "jump to label %q+D", decl);
2658 permerror (input_location, " from here");
2659 identified = true;
2662 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2664 tree b = TREE_VALUE (bad);
2665 int u = decl_jump_unsafe (b);
2667 if (u > 1 && DECL_ARTIFICIAL (b))
2669 /* Can't skip init of __exception_info. */
2670 error_at (DECL_SOURCE_LOCATION (b), " enters catch block");
2671 saw_catch = true;
2673 else if (u > 1)
2674 error (" skips initialization of %q+#D", b);
2675 else
2676 permerror (input_location, " enters scope of %q+#D which has "
2677 "non-trivial destructor", b);
2680 if (ent->in_try_scope)
2681 error (" enters try block");
2682 else if (ent->in_catch_scope && !saw_catch)
2683 error (" enters catch block");
2685 if (ent->in_omp_scope)
2686 error (" enters OpenMP structured block");
2687 else if (flag_openmp)
2689 struct cp_binding_level *b;
2690 for (b = current_binding_level; b ; b = b->level_chain)
2692 if (b == ent->binding_level)
2693 break;
2694 if (b->kind == sk_omp)
2696 if (!identified)
2698 permerror (input_location, "jump to label %q+D", decl);
2699 permerror (input_location, " from here");
2700 identified = true;
2702 error (" exits OpenMP structured block");
2703 break;
2709 /* Check that a return is ok wrt OpenMP structured blocks.
2710 Called by finish_return_stmt. Returns true if all is well. */
2712 bool
2713 check_omp_return (void)
2715 struct cp_binding_level *b;
2716 for (b = current_binding_level; b ; b = b->level_chain)
2717 if (b->kind == sk_omp)
2719 error ("invalid exit from OpenMP structured block");
2720 return false;
2722 return true;
2725 /* Define a label, specifying the location in the source file.
2726 Return the LABEL_DECL node for the label. */
2728 tree
2729 define_label (location_t location, tree name)
2731 struct named_label_entry *ent, dummy;
2732 struct cp_binding_level *p;
2733 tree decl;
2735 timevar_push (TV_NAME_LOOKUP);
2737 decl = lookup_label (name);
2739 dummy.label_decl = decl;
2740 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2741 gcc_assert (ent != NULL);
2743 /* After labels, make any new cleanups in the function go into their
2744 own new (temporary) binding contour. */
2745 for (p = current_binding_level;
2746 p->kind != sk_function_parms;
2747 p = p->level_chain)
2748 p->more_cleanups_ok = 0;
2750 if (name == get_identifier ("wchar_t"))
2751 permerror (input_location, "label named wchar_t");
2753 if (DECL_INITIAL (decl) != NULL_TREE)
2755 error ("duplicate label %qD", decl);
2756 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2758 else
2760 struct named_label_use_entry *use;
2762 /* Mark label as having been defined. */
2763 DECL_INITIAL (decl) = error_mark_node;
2764 /* Say where in the source. */
2765 DECL_SOURCE_LOCATION (decl) = location;
2767 ent->binding_level = current_binding_level;
2768 ent->names_in_scope = current_binding_level->names;
2770 for (use = ent->uses; use ; use = use->next)
2771 check_previous_goto (decl, use);
2772 ent->uses = NULL;
2775 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2778 struct cp_switch
2780 struct cp_binding_level *level;
2781 struct cp_switch *next;
2782 /* The SWITCH_STMT being built. */
2783 tree switch_stmt;
2784 /* A splay-tree mapping the low element of a case range to the high
2785 element, or NULL_TREE if there is no high element. Used to
2786 determine whether or not a new case label duplicates an old case
2787 label. We need a tree, rather than simply a hash table, because
2788 of the GNU case range extension. */
2789 splay_tree cases;
2792 /* A stack of the currently active switch statements. The innermost
2793 switch statement is on the top of the stack. There is no need to
2794 mark the stack for garbage collection because it is only active
2795 during the processing of the body of a function, and we never
2796 collect at that point. */
2798 static struct cp_switch *switch_stack;
2800 /* Called right after a switch-statement condition is parsed.
2801 SWITCH_STMT is the switch statement being parsed. */
2803 void
2804 push_switch (tree switch_stmt)
2806 struct cp_switch *p = XNEW (struct cp_switch);
2807 p->level = current_binding_level;
2808 p->next = switch_stack;
2809 p->switch_stmt = switch_stmt;
2810 p->cases = splay_tree_new (case_compare, NULL, NULL);
2811 switch_stack = p;
2814 void
2815 pop_switch (void)
2817 struct cp_switch *cs = switch_stack;
2818 location_t switch_location;
2820 /* Emit warnings as needed. */
2821 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2822 switch_location = EXPR_LOCATION (cs->switch_stmt);
2823 else
2824 switch_location = input_location;
2825 if (!processing_template_decl)
2826 c_do_switch_warnings (cs->cases, switch_location,
2827 SWITCH_STMT_TYPE (cs->switch_stmt),
2828 SWITCH_STMT_COND (cs->switch_stmt));
2830 splay_tree_delete (cs->cases);
2831 switch_stack = switch_stack->next;
2832 free (cs);
2835 /* Note that we've seen a definition of a case label, and complain if this
2836 is a bad place for one. */
2838 tree
2839 finish_case_label (location_t loc, tree low_value, tree high_value)
2841 tree cond, r;
2842 struct cp_binding_level *p;
2844 if (processing_template_decl)
2846 tree label;
2848 /* For templates, just add the case label; we'll do semantic
2849 analysis at instantiation-time. */
2850 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
2851 return add_stmt (build_case_label (loc, low_value, high_value, label));
2854 /* Find the condition on which this switch statement depends. */
2855 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2856 if (cond && TREE_CODE (cond) == TREE_LIST)
2857 cond = TREE_VALUE (cond);
2859 if (!check_switch_goto (switch_stack->level))
2860 return error_mark_node;
2862 r = c_add_case_label (loc, switch_stack->cases, cond,
2863 SWITCH_STMT_TYPE (switch_stack->switch_stmt),
2864 low_value, high_value);
2866 /* After labels, make any new cleanups in the function go into their
2867 own new (temporary) binding contour. */
2868 for (p = current_binding_level;
2869 p->kind != sk_function_parms;
2870 p = p->level_chain)
2871 p->more_cleanups_ok = 0;
2873 return r;
2876 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2878 static hashval_t
2879 typename_hash (const void* k)
2881 hashval_t hash;
2882 const_tree const t = (const_tree) k;
2884 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2885 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2887 return hash;
2890 typedef struct typename_info {
2891 tree scope;
2892 tree name;
2893 tree template_id;
2894 bool enum_p;
2895 bool class_p;
2896 } typename_info;
2898 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2899 really of type `typename_info*' */
2901 static int
2902 typename_compare (const void * k1, const void * k2)
2904 const_tree const t1 = (const_tree) k1;
2905 const typename_info *const t2 = (const typename_info *) k2;
2907 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2908 && TYPE_CONTEXT (t1) == t2->scope
2909 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2910 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2911 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2914 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2915 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2917 Returns the new TYPENAME_TYPE. */
2919 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2921 static tree
2922 build_typename_type (tree context, tree name, tree fullname,
2923 enum tag_types tag_type)
2925 tree t;
2926 tree d;
2927 typename_info ti;
2928 void **e;
2929 hashval_t hash;
2931 if (typename_htab == NULL)
2932 typename_htab = htab_create_ggc (61, &typename_hash,
2933 &typename_compare, NULL);
2935 ti.scope = FROB_CONTEXT (context);
2936 ti.name = name;
2937 ti.template_id = fullname;
2938 ti.enum_p = tag_type == enum_type;
2939 ti.class_p = (tag_type == class_type
2940 || tag_type == record_type
2941 || tag_type == union_type);
2942 hash = (htab_hash_pointer (ti.scope)
2943 ^ htab_hash_pointer (ti.name));
2945 /* See if we already have this type. */
2946 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2947 if (*e)
2948 t = (tree) *e;
2949 else
2951 /* Build the TYPENAME_TYPE. */
2952 t = cxx_make_type (TYPENAME_TYPE);
2953 TYPE_CONTEXT (t) = ti.scope;
2954 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2955 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2956 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2958 /* Build the corresponding TYPE_DECL. */
2959 d = build_decl (input_location, TYPE_DECL, name, t);
2960 TYPE_NAME (TREE_TYPE (d)) = d;
2961 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2962 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2963 DECL_ARTIFICIAL (d) = 1;
2965 /* Store it in the hash table. */
2966 *e = t;
2968 /* TYPENAME_TYPEs must always be compared structurally, because
2969 they may or may not resolve down to another type depending on
2970 the currently open classes. */
2971 SET_TYPE_STRUCTURAL_EQUALITY (t);
2974 return t;
2977 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2978 provided to name the type. Returns an appropriate type, unless an
2979 error occurs, in which case error_mark_node is returned. If we
2980 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2981 return that, rather than the _TYPE it corresponds to, in other
2982 cases we look through the type decl. If TF_ERROR is set, complain
2983 about errors, otherwise be quiet. */
2985 tree
2986 make_typename_type (tree context, tree name, enum tag_types tag_type,
2987 tsubst_flags_t complain)
2989 tree fullname;
2990 tree t;
2991 bool want_template;
2993 if (name == error_mark_node
2994 || context == NULL_TREE
2995 || context == error_mark_node)
2996 return error_mark_node;
2998 if (TYPE_P (name))
3000 if (!(TYPE_LANG_SPECIFIC (name)
3001 && (CLASSTYPE_IS_TEMPLATE (name)
3002 || CLASSTYPE_USE_TEMPLATE (name))))
3003 name = TYPE_IDENTIFIER (name);
3004 else
3005 /* Create a TEMPLATE_ID_EXPR for the type. */
3006 name = build_nt (TEMPLATE_ID_EXPR,
3007 CLASSTYPE_TI_TEMPLATE (name),
3008 CLASSTYPE_TI_ARGS (name));
3010 else if (TREE_CODE (name) == TYPE_DECL)
3011 name = DECL_NAME (name);
3013 fullname = name;
3015 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3017 name = TREE_OPERAND (name, 0);
3018 if (TREE_CODE (name) == TEMPLATE_DECL)
3019 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3020 else if (TREE_CODE (name) == OVERLOAD)
3022 error ("%qD is not a type", name);
3023 return error_mark_node;
3026 if (TREE_CODE (name) == TEMPLATE_DECL)
3028 error ("%qD used without template parameters", name);
3029 return error_mark_node;
3031 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3032 gcc_assert (TYPE_P (context));
3034 if (!MAYBE_CLASS_TYPE_P (context))
3036 if (complain & tf_error)
3037 error ("%q#T is not a class", context);
3038 return error_mark_node;
3041 /* When the CONTEXT is a dependent type, NAME could refer to a
3042 dependent base class of CONTEXT. But look inside it anyway
3043 if CONTEXT is a currently open scope, in case it refers to a
3044 member of the current instantiation or a non-dependent base;
3045 lookup will stop when we hit a dependent base. */
3046 if (!dependent_scope_p (context))
3047 /* We should only set WANT_TYPE when we're a nested typename type.
3048 Then we can give better diagnostics if we find a non-type. */
3049 t = lookup_field (context, name, 2, /*want_type=*/true);
3050 else
3051 t = NULL_TREE;
3053 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3054 return build_typename_type (context, name, fullname, tag_type);
3056 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3058 if (!t)
3060 if (complain & tf_error)
3061 error (want_template ? "no class template named %q#T in %q#T"
3062 : "no type named %q#T in %q#T", name, context);
3063 return error_mark_node;
3066 /* Pull out the template from an injected-class-name (or multiple). */
3067 if (want_template)
3068 t = maybe_get_template_decl_from_type_decl (t);
3070 if (TREE_CODE (t) == TREE_LIST)
3072 if (complain & tf_error)
3074 error ("lookup of %qT in %qT is ambiguous", name, context);
3075 print_candidates (t);
3077 return error_mark_node;
3080 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3082 if (complain & tf_error)
3083 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3084 context, name, t);
3085 return error_mark_node;
3087 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3089 if (complain & tf_error)
3090 error ("%<typename %T::%D%> names %q#T, which is not a type",
3091 context, name, t);
3092 return error_mark_node;
3095 if (complain & tf_error)
3096 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3098 /* If we are currently parsing a template and if T is a typedef accessed
3099 through CONTEXT then we need to remember and check access of T at
3100 template instantiation time. */
3101 add_typedef_to_current_template_for_access_check (t, context, input_location);
3103 if (want_template)
3104 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3105 NULL_TREE, context,
3106 /*entering_scope=*/0,
3107 tf_warning_or_error | tf_user);
3109 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3110 t = TREE_TYPE (t);
3112 return t;
3115 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3116 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3117 in which case error_mark_node is returned.
3119 If PARM_LIST is non-NULL, also make sure that the template parameter
3120 list of TEMPLATE_DECL matches.
3122 If COMPLAIN zero, don't complain about any errors that occur. */
3124 tree
3125 make_unbound_class_template (tree context, tree name, tree parm_list,
3126 tsubst_flags_t complain)
3128 tree t;
3129 tree d;
3131 if (TYPE_P (name))
3132 name = TYPE_IDENTIFIER (name);
3133 else if (DECL_P (name))
3134 name = DECL_NAME (name);
3135 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3137 if (!dependent_type_p (context)
3138 || currently_open_class (context))
3140 tree tmpl = NULL_TREE;
3142 if (MAYBE_CLASS_TYPE_P (context))
3143 tmpl = lookup_field (context, name, 0, false);
3145 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3147 if (complain & tf_error)
3148 error ("no class template named %q#T in %q#T", name, context);
3149 return error_mark_node;
3152 if (parm_list
3153 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3155 if (complain & tf_error)
3157 error ("template parameters do not match template");
3158 error ("%q+D declared here", tmpl);
3160 return error_mark_node;
3163 if (complain & tf_error)
3164 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3166 return tmpl;
3169 /* Build the UNBOUND_CLASS_TEMPLATE. */
3170 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3171 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3172 TREE_TYPE (t) = NULL_TREE;
3173 SET_TYPE_STRUCTURAL_EQUALITY (t);
3175 /* Build the corresponding TEMPLATE_DECL. */
3176 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3177 TYPE_NAME (TREE_TYPE (d)) = d;
3178 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3179 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3180 DECL_ARTIFICIAL (d) = 1;
3181 DECL_TEMPLATE_PARMS (d) = parm_list;
3183 return t;
3188 /* Push the declarations of builtin types into the namespace.
3189 RID_INDEX is the index of the builtin type in the array
3190 RID_POINTERS. NAME is the name used when looking up the builtin
3191 type. TYPE is the _TYPE node for the builtin type. */
3193 void
3194 record_builtin_type (enum rid rid_index,
3195 const char* name,
3196 tree type)
3198 tree rname = NULL_TREE, tname = NULL_TREE;
3199 tree tdecl = NULL_TREE;
3201 if ((int) rid_index < (int) RID_MAX)
3202 rname = ridpointers[(int) rid_index];
3203 if (name)
3204 tname = get_identifier (name);
3206 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3207 eliminated. Built-in types should not be looked up name; their
3208 names are keywords that the parser can recognize. However, there
3209 is code in c-common.c that uses identifier_global_value to look
3210 up built-in types by name. */
3211 if (tname)
3213 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3214 DECL_ARTIFICIAL (tdecl) = 1;
3215 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3217 if (rname)
3219 if (!tdecl)
3221 tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3222 DECL_ARTIFICIAL (tdecl) = 1;
3224 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3227 if (!TYPE_NAME (type))
3228 TYPE_NAME (type) = tdecl;
3230 if (tdecl)
3231 debug_hooks->type_decl (tdecl, 0);
3234 /* Record one of the standard Java types.
3235 * Declare it as having the given NAME.
3236 * If SIZE > 0, it is the size of one of the integral types;
3237 * otherwise it is the negative of the size of one of the other types. */
3239 static tree
3240 record_builtin_java_type (const char* name, int size)
3242 tree type, decl;
3243 if (size > 0)
3244 type = build_nonstandard_integer_type (size, 0);
3245 else if (size > -32)
3247 tree stype;
3248 /* "__java_char" or ""__java_boolean". */
3249 type = build_nonstandard_integer_type (-size, 1);
3250 /* Get the signed type cached and attached to the unsigned type,
3251 so it doesn't get garbage-collected at "random" times,
3252 causing potential codegen differences out of different UIDs
3253 and different alias set numbers. */
3254 stype = build_nonstandard_integer_type (-size, 0);
3255 TREE_CHAIN (type) = stype;
3256 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3258 else
3259 { /* "__java_float" or ""__java_double". */
3260 type = make_node (REAL_TYPE);
3261 TYPE_PRECISION (type) = - size;
3262 layout_type (type);
3264 record_builtin_type (RID_MAX, name, type);
3265 decl = TYPE_NAME (type);
3267 /* Suppress generate debug symbol entries for these types,
3268 since for normal C++ they are just clutter.
3269 However, push_lang_context undoes this if extern "Java" is seen. */
3270 DECL_IGNORED_P (decl) = 1;
3272 TYPE_FOR_JAVA (type) = 1;
3273 return type;
3276 /* Push a type into the namespace so that the back ends ignore it. */
3278 static void
3279 record_unknown_type (tree type, const char* name)
3281 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3282 TYPE_DECL, get_identifier (name), type));
3283 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3284 DECL_IGNORED_P (decl) = 1;
3285 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3286 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3287 TYPE_ALIGN (type) = 1;
3288 TYPE_USER_ALIGN (type) = 0;
3289 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3292 /* A string for which we should create an IDENTIFIER_NODE at
3293 startup. */
3295 typedef struct predefined_identifier
3297 /* The name of the identifier. */
3298 const char *const name;
3299 /* The place where the IDENTIFIER_NODE should be stored. */
3300 tree *const node;
3301 /* Nonzero if this is the name of a constructor or destructor. */
3302 const int ctor_or_dtor_p;
3303 } predefined_identifier;
3305 /* Create all the predefined identifiers. */
3307 static void
3308 initialize_predefined_identifiers (void)
3310 const predefined_identifier *pid;
3312 /* A table of identifiers to create at startup. */
3313 static const predefined_identifier predefined_identifiers[] = {
3314 { "C++", &lang_name_cplusplus, 0 },
3315 { "C", &lang_name_c, 0 },
3316 { "Java", &lang_name_java, 0 },
3317 /* Some of these names have a trailing space so that it is
3318 impossible for them to conflict with names written by users. */
3319 { "__ct ", &ctor_identifier, 1 },
3320 { "__base_ctor ", &base_ctor_identifier, 1 },
3321 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3322 { "__dt ", &dtor_identifier, 1 },
3323 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3324 { "__base_dtor ", &base_dtor_identifier, 1 },
3325 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3326 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3327 { "nelts", &nelts_identifier, 0 },
3328 { THIS_NAME, &this_identifier, 0 },
3329 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3330 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3331 { "_vptr", &vptr_identifier, 0 },
3332 { "__vtt_parm", &vtt_parm_identifier, 0 },
3333 { "::", &global_scope_name, 0 },
3334 { "std", &std_identifier, 0 },
3335 { NULL, NULL, 0 }
3338 for (pid = predefined_identifiers; pid->name; ++pid)
3340 *pid->node = get_identifier (pid->name);
3341 if (pid->ctor_or_dtor_p)
3342 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3346 /* Create the predefined scalar types of C,
3347 and some nodes representing standard constants (0, 1, (void *)0).
3348 Initialize the global binding level.
3349 Make definitions for built-in primitive functions. */
3351 void
3352 cxx_init_decl_processing (void)
3354 tree void_ftype;
3355 tree void_ftype_ptr;
3357 build_common_tree_nodes (flag_signed_char, false);
3359 /* Create all the identifiers we need. */
3360 initialize_predefined_identifiers ();
3362 /* Create the global variables. */
3363 push_to_top_level ();
3365 current_function_decl = NULL_TREE;
3366 current_binding_level = NULL;
3367 /* Enter the global namespace. */
3368 gcc_assert (global_namespace == NULL_TREE);
3369 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3370 void_type_node);
3371 TREE_PUBLIC (global_namespace) = 1;
3372 begin_scope (sk_namespace, global_namespace);
3374 current_lang_name = NULL_TREE;
3376 if (flag_visibility_ms_compat)
3377 default_visibility = VISIBILITY_HIDDEN;
3379 /* Initially, C. */
3380 current_lang_name = lang_name_c;
3382 /* Create the `std' namespace. */
3383 push_namespace (std_identifier);
3384 std_node = current_namespace;
3385 pop_namespace ();
3387 c_common_nodes_and_builtins ();
3389 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3390 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3391 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3392 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3393 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3394 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3395 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3396 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3398 integer_two_node = build_int_cst (NULL_TREE, 2);
3399 integer_three_node = build_int_cst (NULL_TREE, 3);
3401 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3402 truthvalue_type_node = boolean_type_node;
3403 truthvalue_false_node = boolean_false_node;
3404 truthvalue_true_node = boolean_true_node;
3406 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3408 #if 0
3409 record_builtin_type (RID_MAX, NULL, string_type_node);
3410 #endif
3412 delta_type_node = ptrdiff_type_node;
3413 vtable_index_type = ptrdiff_type_node;
3415 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3416 void_ftype = build_function_type (void_type_node, void_list_node);
3417 void_ftype_ptr = build_function_type (void_type_node,
3418 tree_cons (NULL_TREE,
3419 ptr_type_node,
3420 void_list_node));
3421 void_ftype_ptr
3422 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3424 /* C++ extensions */
3426 unknown_type_node = make_node (UNKNOWN_TYPE);
3427 record_unknown_type (unknown_type_node, "unknown type");
3429 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3430 TREE_TYPE (unknown_type_node) = unknown_type_node;
3432 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3433 result. */
3434 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3435 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3437 init_list_type_node = make_node (UNKNOWN_TYPE);
3438 record_unknown_type (init_list_type_node, "init list");
3441 /* Make sure we get a unique function type, so we can give
3442 its pointer type a name. (This wins for gdb.) */
3443 tree vfunc_type = make_node (FUNCTION_TYPE);
3444 TREE_TYPE (vfunc_type) = integer_type_node;
3445 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3446 layout_type (vfunc_type);
3448 vtable_entry_type = build_pointer_type (vfunc_type);
3450 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3452 vtbl_type_node
3453 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3454 layout_type (vtbl_type_node);
3455 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3456 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3457 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3458 layout_type (vtbl_ptr_type_node);
3459 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3461 push_namespace (get_identifier ("__cxxabiv1"));
3462 abi_node = current_namespace;
3463 pop_namespace ();
3465 global_type_node = make_node (LANG_TYPE);
3466 record_unknown_type (global_type_node, "global type");
3468 /* Now, C++. */
3469 current_lang_name = lang_name_cplusplus;
3472 tree bad_alloc_id;
3473 tree bad_alloc_type_node;
3474 tree bad_alloc_decl;
3475 tree newtype, deltype;
3476 tree ptr_ftype_sizetype;
3478 push_namespace (std_identifier);
3479 bad_alloc_id = get_identifier ("bad_alloc");
3480 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3481 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3482 bad_alloc_decl
3483 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3484 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3485 pop_namespace ();
3487 ptr_ftype_sizetype
3488 = build_function_type (ptr_type_node,
3489 tree_cons (NULL_TREE,
3490 size_type_node,
3491 void_list_node));
3492 newtype = build_exception_variant
3493 (ptr_ftype_sizetype, add_exception_specifier
3494 (NULL_TREE, bad_alloc_type_node, -1));
3495 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3496 push_cp_library_fn (NEW_EXPR, newtype);
3497 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3498 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3499 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3502 abort_fndecl
3503 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3505 /* Perform other language dependent initializations. */
3506 init_class_processing ();
3507 init_rtti_processing ();
3508 init_template_processing ();
3510 if (flag_exceptions)
3511 init_exception_processing ();
3513 if (! supports_one_only ())
3514 flag_weak = 0;
3516 make_fname_decl = cp_make_fname_decl;
3517 start_fname_decls ();
3519 /* Show we use EH for cleanups. */
3520 if (flag_exceptions)
3521 using_eh_for_cleanups ();
3524 /* Generate an initializer for a function naming variable from
3525 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3526 filled in with the type of the init. */
3528 tree
3529 cp_fname_init (const char* name, tree *type_p)
3531 tree domain = NULL_TREE;
3532 tree type;
3533 tree init = NULL_TREE;
3534 size_t length = 0;
3536 if (name)
3538 length = strlen (name);
3539 domain = build_index_type (size_int (length));
3540 init = build_string (length + 1, name);
3543 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3544 type = build_cplus_array_type (type, domain);
3546 *type_p = type;
3548 if (init)
3549 TREE_TYPE (init) = type;
3550 else
3551 init = error_mark_node;
3553 return init;
3556 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3557 the decl, LOC is the location to give the decl, NAME is the
3558 initialization string and TYPE_DEP indicates whether NAME depended
3559 on the type of the function. We make use of that to detect
3560 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3561 at the point of first use, so we mustn't push the decl now. */
3563 static tree
3564 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3566 const char *const name = (type_dep && processing_template_decl
3567 ? NULL : fname_as_string (type_dep));
3568 tree type;
3569 tree init = cp_fname_init (name, &type);
3570 tree decl = build_decl (loc, VAR_DECL, id, type);
3572 if (name)
3573 free (CONST_CAST (char *, name));
3575 /* As we're using pushdecl_with_scope, we must set the context. */
3576 DECL_CONTEXT (decl) = current_function_decl;
3577 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3579 TREE_STATIC (decl) = 1;
3580 TREE_READONLY (decl) = 1;
3581 DECL_ARTIFICIAL (decl) = 1;
3583 TREE_USED (decl) = 1;
3585 if (current_function_decl)
3587 struct cp_binding_level *b = current_binding_level;
3588 while (b->level_chain->kind != sk_function_parms)
3589 b = b->level_chain;
3590 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3591 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3592 LOOKUP_ONLYCONVERTING);
3594 else
3595 pushdecl_top_level_and_finish (decl, init);
3597 return decl;
3600 static tree
3601 builtin_function_1 (tree decl, tree context, bool is_global)
3603 tree id = DECL_NAME (decl);
3604 const char *name = IDENTIFIER_POINTER (id);
3606 retrofit_lang_decl (decl);
3608 DECL_ARTIFICIAL (decl) = 1;
3609 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3610 SET_DECL_LANGUAGE (decl, lang_c);
3611 /* Runtime library routines are, by definition, available in an
3612 external shared object. */
3613 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3614 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3616 DECL_CONTEXT (decl) = context;
3618 if (is_global)
3619 pushdecl_top_level (decl);
3620 else
3621 pushdecl (decl);
3623 /* A function in the user's namespace should have an explicit
3624 declaration before it is used. Mark the built-in function as
3625 anticipated but not actually declared. */
3626 if (name[0] != '_' || name[1] != '_')
3627 DECL_ANTICIPATED (decl) = 1;
3628 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3630 size_t len = strlen (name);
3632 /* Treat __*_chk fortification functions as anticipated as well,
3633 unless they are __builtin_*. */
3634 if (len > strlen ("___chk")
3635 && memcmp (name + len - strlen ("_chk"),
3636 "_chk", strlen ("_chk") + 1) == 0)
3637 DECL_ANTICIPATED (decl) = 1;
3640 return decl;
3643 tree
3644 cxx_builtin_function (tree decl)
3646 tree id = DECL_NAME (decl);
3647 const char *name = IDENTIFIER_POINTER (id);
3648 /* All builtins that don't begin with an '_' should additionally
3649 go in the 'std' namespace. */
3650 if (name[0] != '_')
3652 tree decl2 = copy_node(decl);
3653 push_namespace (std_identifier);
3654 builtin_function_1 (decl2, std_node, false);
3655 pop_namespace ();
3658 return builtin_function_1 (decl, NULL_TREE, false);
3661 /* Like cxx_builtin_function, but guarantee the function is added to the global
3662 scope. This is to allow function specific options to add new machine
3663 dependent builtins when the target ISA changes via attribute((target(...)))
3664 which saves space on program startup if the program does not use non-generic
3665 ISAs. */
3667 tree
3668 cxx_builtin_function_ext_scope (tree decl)
3671 tree id = DECL_NAME (decl);
3672 const char *name = IDENTIFIER_POINTER (id);
3673 /* All builtins that don't begin with an '_' should additionally
3674 go in the 'std' namespace. */
3675 if (name[0] != '_')
3677 tree decl2 = copy_node(decl);
3678 push_namespace (std_identifier);
3679 builtin_function_1 (decl2, std_node, true);
3680 pop_namespace ();
3683 return builtin_function_1 (decl, NULL_TREE, true);
3686 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3687 function. Not called directly. */
3689 static tree
3690 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3692 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3693 DECL_EXTERNAL (fn) = 1;
3694 TREE_PUBLIC (fn) = 1;
3695 DECL_ARTIFICIAL (fn) = 1;
3696 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3697 SET_DECL_LANGUAGE (fn, lang_c);
3698 /* Runtime library routines are, by definition, available in an
3699 external shared object. */
3700 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3701 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3702 return fn;
3705 /* Returns the _DECL for a library function with C linkage.
3706 We assume that such functions never throw; if this is incorrect,
3707 callers should unset TREE_NOTHROW. */
3709 static tree
3710 build_library_fn (tree name, tree type)
3712 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3713 TREE_NOTHROW (fn) = 1;
3714 return fn;
3717 /* Returns the _DECL for a library function with C++ linkage. */
3719 static tree
3720 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3722 tree fn = build_library_fn_1 (name, operator_code, type);
3723 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3724 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3725 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3726 return fn;
3729 /* Like build_library_fn, but takes a C string instead of an
3730 IDENTIFIER_NODE. */
3732 tree
3733 build_library_fn_ptr (const char* name, tree type)
3735 return build_library_fn (get_identifier (name), type);
3738 /* Like build_cp_library_fn, but takes a C string instead of an
3739 IDENTIFIER_NODE. */
3741 tree
3742 build_cp_library_fn_ptr (const char* name, tree type)
3744 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3747 /* Like build_library_fn, but also pushes the function so that we will
3748 be able to find it via IDENTIFIER_GLOBAL_VALUE. Also, the function
3749 may throw exceptions listed in RAISES. */
3751 tree
3752 push_library_fn (tree name, tree type, tree raises)
3754 tree fn;
3756 if (raises)
3757 type = build_exception_variant (type, raises);
3759 fn = build_library_fn (name, type);
3760 pushdecl_top_level (fn);
3761 return fn;
3764 /* Like build_cp_library_fn, but also pushes the function so that it
3765 will be found by normal lookup. */
3767 static tree
3768 push_cp_library_fn (enum tree_code operator_code, tree type)
3770 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3771 operator_code,
3772 type);
3773 pushdecl (fn);
3774 return fn;
3777 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3778 a FUNCTION_TYPE. */
3780 tree
3781 push_void_library_fn (tree name, tree parmtypes)
3783 tree type = build_function_type (void_type_node, parmtypes);
3784 return push_library_fn (name, type, NULL_TREE);
3787 /* Like push_library_fn, but also note that this function throws
3788 and does not return. Used for __throw_foo and the like. */
3790 tree
3791 push_throw_library_fn (tree name, tree type)
3793 tree fn = push_library_fn (name, type, NULL_TREE);
3794 TREE_THIS_VOLATILE (fn) = 1;
3795 TREE_NOTHROW (fn) = 0;
3796 return fn;
3799 /* When we call finish_struct for an anonymous union, we create
3800 default copy constructors and such. But, an anonymous union
3801 shouldn't have such things; this function undoes the damage to the
3802 anonymous union type T.
3804 (The reason that we create the synthesized methods is that we don't
3805 distinguish `union { int i; }' from `typedef union { int i; } U'.
3806 The first is an anonymous union; the second is just an ordinary
3807 union type.) */
3809 void
3810 fixup_anonymous_aggr (tree t)
3812 tree *q;
3814 /* Wipe out memory of synthesized methods. */
3815 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3816 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3817 TYPE_HAS_INIT_REF (t) = 0;
3818 TYPE_HAS_CONST_INIT_REF (t) = 0;
3819 TYPE_HAS_ASSIGN_REF (t) = 0;
3820 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3822 /* Splice the implicitly generated functions out of the TYPE_METHODS
3823 list. */
3824 q = &TYPE_METHODS (t);
3825 while (*q)
3827 if (DECL_ARTIFICIAL (*q))
3828 *q = TREE_CHAIN (*q);
3829 else
3830 q = &TREE_CHAIN (*q);
3833 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3834 if (TYPE_METHODS (t))
3836 tree decl = TYPE_MAIN_DECL (t);
3838 if (TREE_CODE (t) != UNION_TYPE)
3839 error_at (DECL_SOURCE_LOCATION (decl),
3840 "an anonymous struct cannot have function members");
3841 else
3842 error_at (DECL_SOURCE_LOCATION (decl),
3843 "an anonymous union cannot have function members");
3846 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3847 assignment operators (because they cannot have these methods themselves).
3848 For anonymous unions this is already checked because they are not allowed
3849 in any union, otherwise we have to check it. */
3850 if (TREE_CODE (t) != UNION_TYPE)
3852 tree field, type;
3854 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3855 if (TREE_CODE (field) == FIELD_DECL)
3857 type = TREE_TYPE (field);
3858 if (CLASS_TYPE_P (type))
3860 if (TYPE_NEEDS_CONSTRUCTING (type))
3861 error ("member %q+#D with constructor not allowed "
3862 "in anonymous aggregate", field);
3863 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3864 error ("member %q+#D with destructor not allowed "
3865 "in anonymous aggregate", field);
3866 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3867 error ("member %q+#D with copy assignment operator "
3868 "not allowed in anonymous aggregate", field);
3874 /* Make sure that a declaration with no declarator is well-formed, i.e.
3875 just declares a tagged type or anonymous union.
3877 Returns the type declared; or NULL_TREE if none. */
3879 tree
3880 check_tag_decl (cp_decl_specifier_seq *declspecs)
3882 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3883 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3884 /* If a class, struct, or enum type is declared by the DECLSPECS
3885 (i.e, if a class-specifier, enum-specifier, or non-typename
3886 elaborated-type-specifier appears in the DECLSPECS),
3887 DECLARED_TYPE is set to the corresponding type. */
3888 tree declared_type = NULL_TREE;
3889 bool error_p = false;
3891 if (declspecs->multiple_types_p)
3892 error ("multiple types in one declaration");
3893 else if (declspecs->redefined_builtin_type)
3895 if (!in_system_header)
3896 permerror (input_location, "redeclaration of C++ built-in type %qT",
3897 declspecs->redefined_builtin_type);
3898 return NULL_TREE;
3901 if (declspecs->type
3902 && TYPE_P (declspecs->type)
3903 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3904 && MAYBE_CLASS_TYPE_P (declspecs->type))
3905 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3906 declared_type = declspecs->type;
3907 else if (declspecs->type == error_mark_node)
3908 error_p = true;
3909 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3910 permerror (input_location, "declaration does not declare anything");
3911 /* Check for an anonymous union. */
3912 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3913 && TYPE_ANONYMOUS_P (declared_type))
3915 /* 7/3 In a simple-declaration, the optional init-declarator-list
3916 can be omitted only when declaring a class (clause 9) or
3917 enumeration (7.2), that is, when the decl-specifier-seq contains
3918 either a class-specifier, an elaborated-type-specifier with
3919 a class-key (9.1), or an enum-specifier. In these cases and
3920 whenever a class-specifier or enum-specifier is present in the
3921 decl-specifier-seq, the identifiers in these specifiers are among
3922 the names being declared by the declaration (as class-name,
3923 enum-names, or enumerators, depending on the syntax). In such
3924 cases, and except for the declaration of an unnamed bit-field (9.6),
3925 the decl-specifier-seq shall introduce one or more names into the
3926 program, or shall redeclare a name introduced by a previous
3927 declaration. [Example:
3928 enum { }; // ill-formed
3929 typedef class { }; // ill-formed
3930 --end example] */
3931 if (saw_typedef)
3933 error ("missing type-name in typedef-declaration");
3934 return NULL_TREE;
3936 /* Anonymous unions are objects, so they can have specifiers. */;
3937 SET_ANON_AGGR_TYPE_P (declared_type);
3939 if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
3940 pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
3943 else
3945 if (declspecs->specs[(int)ds_inline]
3946 || declspecs->specs[(int)ds_virtual])
3947 error ("%qs can only be specified for functions",
3948 declspecs->specs[(int)ds_inline]
3949 ? "inline" : "virtual");
3950 else if (saw_friend
3951 && (!current_class_type
3952 || current_scope () != current_class_type))
3953 error ("%<friend%> can only be specified inside a class");
3954 else if (declspecs->specs[(int)ds_explicit])
3955 error ("%<explicit%> can only be specified for constructors");
3956 else if (declspecs->storage_class)
3957 error ("a storage class can only be specified for objects "
3958 "and functions");
3959 else if (declspecs->specs[(int)ds_const]
3960 || declspecs->specs[(int)ds_volatile]
3961 || declspecs->specs[(int)ds_restrict]
3962 || declspecs->specs[(int)ds_thread])
3963 error ("qualifiers can only be specified for objects "
3964 "and functions");
3965 else if (saw_typedef)
3966 warning (0, "%<typedef%> was ignored in this declaration");
3967 else if (declspecs->specs[(int) ds_constexpr])
3968 error ("%<constexpr> cannot be used for type declarations");
3971 return declared_type;
3974 /* Called when a declaration is seen that contains no names to declare.
3975 If its type is a reference to a structure, union or enum inherited
3976 from a containing scope, shadow that tag name for the current scope
3977 with a forward reference.
3978 If its type defines a new named structure or union
3979 or defines an enum, it is valid but we need not do anything here.
3980 Otherwise, it is an error.
3982 C++: may have to grok the declspecs to learn about static,
3983 complain for anonymous unions.
3985 Returns the TYPE declared -- or NULL_TREE if none. */
3987 tree
3988 shadow_tag (cp_decl_specifier_seq *declspecs)
3990 tree t = check_tag_decl (declspecs);
3992 if (!t)
3993 return NULL_TREE;
3995 if (declspecs->attributes)
3997 warning (0, "attribute ignored in declaration of %q+#T", t);
3998 warning (0, "attribute for %q+#T must follow the %qs keyword",
3999 t, class_key_or_enum_as_string (t));
4003 if (maybe_process_partial_specialization (t) == error_mark_node)
4004 return NULL_TREE;
4006 /* This is where the variables in an anonymous union are
4007 declared. An anonymous union declaration looks like:
4008 union { ... } ;
4009 because there is no declarator after the union, the parser
4010 sends that declaration here. */
4011 if (ANON_AGGR_TYPE_P (t))
4013 fixup_anonymous_aggr (t);
4015 if (TYPE_FIELDS (t))
4017 tree decl = grokdeclarator (/*declarator=*/NULL,
4018 declspecs, NORMAL, 0, NULL);
4019 finish_anon_union (decl);
4023 return t;
4026 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4028 tree
4029 groktypename (cp_decl_specifier_seq *type_specifiers,
4030 const cp_declarator *declarator,
4031 bool is_template_arg)
4033 tree attrs;
4034 tree type;
4035 enum decl_context context
4036 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4037 attrs = type_specifiers->attributes;
4038 type_specifiers->attributes = NULL_TREE;
4039 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4040 if (attrs && type != error_mark_node)
4042 if (CLASS_TYPE_P (type))
4043 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4044 "outside of definition", type);
4045 else if (MAYBE_CLASS_TYPE_P (type))
4046 /* A template type parameter or other dependent type. */
4047 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4048 "type %qT without an associated declaration", type);
4049 else
4050 cplus_decl_attributes (&type, attrs, 0);
4052 return type;
4055 /* Process a DECLARATOR for a function-scope variable declaration,
4056 namespace-scope variable declaration, or function declaration.
4057 (Function definitions go through start_function; class member
4058 declarations appearing in the body of the class go through
4059 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4060 If an error occurs, the error_mark_node is returned instead.
4062 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4063 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4064 for an explicitly defaulted function, or SD_DELETED for an explicitly
4065 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4066 implicitly initialized via a default constructor. ATTRIBUTES and
4067 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4068 *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4069 set, the caller is responsible for calling pop_scope. */
4071 tree
4072 start_decl (const cp_declarator *declarator,
4073 cp_decl_specifier_seq *declspecs,
4074 int initialized,
4075 tree attributes,
4076 tree prefix_attributes,
4077 tree *pushed_scope_p)
4079 tree decl;
4080 tree context;
4081 bool was_public;
4082 int flags;
4084 *pushed_scope_p = NULL_TREE;
4086 /* An object declared as __attribute__((deprecated)) suppresses
4087 warnings of uses of other deprecated items. */
4088 if (lookup_attribute ("deprecated", attributes))
4089 deprecated_state = DEPRECATED_SUPPRESS;
4091 attributes = chainon (attributes, prefix_attributes);
4093 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4094 &attributes);
4096 deprecated_state = DEPRECATED_NORMAL;
4098 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4099 || decl == error_mark_node)
4100 return error_mark_node;
4102 context = DECL_CONTEXT (decl);
4104 if (context)
4106 *pushed_scope_p = push_scope (context);
4108 /* We are only interested in class contexts, later. */
4109 if (TREE_CODE (context) == NAMESPACE_DECL)
4110 context = NULL_TREE;
4113 if (initialized)
4114 /* Is it valid for this decl to have an initializer at all?
4115 If not, set INITIALIZED to zero, which will indirectly
4116 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4117 switch (TREE_CODE (decl))
4119 case TYPE_DECL:
4120 error ("typedef %qD is initialized (use decltype instead)", decl);
4121 return error_mark_node;
4123 case FUNCTION_DECL:
4124 if (initialized == SD_DELETED)
4125 /* We'll handle the rest of the semantics later, but we need to
4126 set this now so it's visible to duplicate_decls. */
4127 DECL_DELETED_FN (decl) = 1;
4128 break;
4130 default:
4131 break;
4134 if (initialized)
4136 if (! toplevel_bindings_p ()
4137 && DECL_EXTERNAL (decl))
4138 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4139 decl);
4140 DECL_EXTERNAL (decl) = 0;
4141 if (toplevel_bindings_p ())
4142 TREE_STATIC (decl) = 1;
4145 /* If this is a typedef that names the class for linkage purposes
4146 (7.1.3p8), apply any attributes directly to the type. */
4147 if (TREE_CODE (decl) == TYPE_DECL
4148 && TAGGED_TYPE_P (TREE_TYPE (decl))
4149 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4150 flags = ATTR_FLAG_TYPE_IN_PLACE;
4151 else
4152 flags = 0;
4154 /* Set attributes here so if duplicate decl, will have proper attributes. */
4155 cplus_decl_attributes (&decl, attributes, flags);
4157 /* Dllimported symbols cannot be defined. Static data members (which
4158 can be initialized in-class and dllimported) go through grokfield,
4159 not here, so we don't need to exclude those decls when checking for
4160 a definition. */
4161 if (initialized && DECL_DLLIMPORT_P (decl))
4163 error ("definition of %q#D is marked %<dllimport%>", decl);
4164 DECL_DLLIMPORT_P (decl) = 0;
4167 /* If #pragma weak was used, mark the decl weak now. */
4168 maybe_apply_pragma_weak (decl);
4170 if (TREE_CODE (decl) == FUNCTION_DECL
4171 && DECL_DECLARED_INLINE_P (decl)
4172 && DECL_UNINLINABLE (decl)
4173 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4174 warning (0, "inline function %q+D given attribute noinline", decl);
4176 if (context && COMPLETE_TYPE_P (complete_type (context)))
4178 if (TREE_CODE (decl) == VAR_DECL)
4180 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4181 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4182 error ("%q#D is not a static member of %q#T", decl, context);
4183 else
4185 if (DECL_CONTEXT (field) != context)
4187 if (!same_type_p (DECL_CONTEXT (field), context))
4188 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4189 "to be defined as %<%T::%D%>",
4190 DECL_CONTEXT (field), DECL_NAME (decl),
4191 context, DECL_NAME (decl));
4192 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4194 if (processing_specialization
4195 && template_class_depth (context) == 0
4196 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4197 error ("template header not allowed in member definition "
4198 "of explicitly specialized class");
4199 /* Static data member are tricky; an in-class initialization
4200 still doesn't provide a definition, so the in-class
4201 declaration will have DECL_EXTERNAL set, but will have an
4202 initialization. Thus, duplicate_decls won't warn
4203 about this situation, and so we check here. */
4204 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4205 error ("duplicate initialization of %qD", decl);
4206 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4207 decl = field;
4208 if (declspecs->specs[(int) ds_constexpr]
4209 && !DECL_DECLARED_CONSTEXPR_P (field))
4210 error ("%qD declared %<constexpr%> outside its class", field);
4213 else
4215 tree field = check_classfn (context, decl,
4216 (processing_template_decl
4217 > template_class_depth (context))
4218 ? current_template_parms
4219 : NULL_TREE);
4220 if (field && field != error_mark_node
4221 && duplicate_decls (decl, field,
4222 /*newdecl_is_friend=*/false))
4223 decl = field;
4226 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4227 DECL_IN_AGGR_P (decl) = 0;
4228 /* Do not mark DECL as an explicit specialization if it was not
4229 already marked as an instantiation; a declaration should
4230 never be marked as a specialization unless we know what
4231 template is being specialized. */
4232 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4234 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4236 /* [temp.expl.spec] An explicit specialization of a static data
4237 member of a template is a definition if the declaration
4238 includes an initializer; otherwise, it is a declaration.
4240 We check for processing_specialization so this only applies
4241 to the new specialization syntax. */
4242 if (!initialized && processing_specialization)
4243 DECL_EXTERNAL (decl) = 1;
4246 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
4247 permerror (input_location, "declaration of %q#D outside of class is not definition",
4248 decl);
4250 if (!ensure_literal_type_for_constexpr_object (decl))
4251 return error_mark_node;
4254 was_public = TREE_PUBLIC (decl);
4256 /* Enter this declaration into the symbol table. */
4257 decl = maybe_push_decl (decl);
4259 if (processing_template_decl)
4260 decl = push_template_decl (decl);
4261 if (decl == error_mark_node)
4262 return error_mark_node;
4264 /* Tell the back end to use or not use .common as appropriate. If we say
4265 -fconserve-space, we want this to save .data space, at the expense of
4266 wrong semantics. If we say -fno-conserve-space, we want this to
4267 produce errors about redefs; to do this we force variables into the
4268 data segment. */
4269 if (flag_conserve_space
4270 && TREE_CODE (decl) == VAR_DECL
4271 && TREE_PUBLIC (decl)
4272 && !DECL_THREAD_LOCAL_P (decl)
4273 && !have_global_bss_p ())
4274 DECL_COMMON (decl) = 1;
4276 if (TREE_CODE (decl) == VAR_DECL
4277 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4278 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4280 /* This is a const variable with implicit 'static'. Set
4281 DECL_THIS_STATIC so we can tell it from variables that are
4282 !TREE_PUBLIC because of the anonymous namespace. */
4283 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4284 DECL_THIS_STATIC (decl) = 1;
4287 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4288 start_decl_1 (decl, initialized);
4290 return decl;
4293 /* Process the declaration of a variable DECL. INITIALIZED is true
4294 iff DECL is explicitly initialized. (INITIALIZED is false if the
4295 variable is initialized via an implicitly-called constructor.)
4296 This function must be called for ordinary variables (including, for
4297 example, implicit instantiations of templates), but must not be
4298 called for template declarations. */
4300 void
4301 start_decl_1 (tree decl, bool initialized)
4303 tree type;
4304 bool complete_p;
4305 bool aggregate_definition_p;
4307 gcc_assert (!processing_template_decl);
4309 if (error_operand_p (decl))
4310 return;
4312 gcc_assert (TREE_CODE (decl) == VAR_DECL);
4314 type = TREE_TYPE (decl);
4315 complete_p = COMPLETE_TYPE_P (type);
4316 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4318 /* If an explicit initializer is present, or if this is a definition
4319 of an aggregate, then we need a complete type at this point.
4320 (Scalars are always complete types, so there is nothing to
4321 check.) This code just sets COMPLETE_P; errors (if necessary)
4322 are issued below. */
4323 if ((initialized || aggregate_definition_p)
4324 && !complete_p
4325 && COMPLETE_TYPE_P (complete_type (type)))
4327 complete_p = true;
4328 /* We will not yet have set TREE_READONLY on DECL if the type
4329 was "const", but incomplete, before this point. But, now, we
4330 have a complete type, so we can try again. */
4331 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4334 if (initialized)
4335 /* Is it valid for this decl to have an initializer at all? */
4337 /* Don't allow initializations for incomplete types except for
4338 arrays which might be completed by the initialization. */
4339 if (complete_p)
4340 ; /* A complete type is ok. */
4341 else if (type_uses_auto (type))
4342 ; /* An auto type is ok. */
4343 else if (TREE_CODE (type) != ARRAY_TYPE)
4345 error ("variable %q#D has initializer but incomplete type", decl);
4346 type = TREE_TYPE (decl) = error_mark_node;
4348 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4350 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4351 error ("elements of array %q#D have incomplete type", decl);
4352 /* else we already gave an error in start_decl. */
4355 else if (aggregate_definition_p && !complete_p)
4357 if (type_uses_auto (type))
4358 error ("declaration of %q#D has no initializer", decl);
4359 else
4360 error ("aggregate %q#D has incomplete type and cannot be defined",
4361 decl);
4362 /* Change the type so that assemble_variable will give
4363 DECL an rtl we can live with: (mem (const_int 0)). */
4364 type = TREE_TYPE (decl) = error_mark_node;
4367 /* Create a new scope to hold this declaration if necessary.
4368 Whether or not a new scope is necessary cannot be determined
4369 until after the type has been completed; if the type is a
4370 specialization of a class template it is not until after
4371 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4372 will be set correctly. */
4373 maybe_push_cleanup_level (type);
4376 /* Handle initialization of references. DECL, TYPE, and INIT have the
4377 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4378 but will be set to a new CLEANUP_STMT if a temporary is created
4379 that must be destroyed subsequently.
4381 Returns an initializer expression to use to initialize DECL, or
4382 NULL if the initialization can be performed statically.
4384 Quotes on semantics can be found in ARM 8.4.3. */
4386 static tree
4387 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4389 tree tmp;
4391 if (init == NULL_TREE)
4393 if ((DECL_LANG_SPECIFIC (decl) == 0
4394 || DECL_IN_AGGR_P (decl) == 0)
4395 && ! DECL_THIS_EXTERN (decl))
4396 error ("%qD declared as reference but not initialized", decl);
4397 return NULL_TREE;
4400 if (TREE_CODE (init) == TREE_LIST)
4401 init = build_x_compound_expr_from_list (init, "initializer");
4403 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4404 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4405 /* Note: default conversion is only called in very special cases. */
4406 init = decay_conversion (init);
4408 /* Convert INIT to the reference type TYPE. This may involve the
4409 creation of a temporary, whose lifetime must be the same as that
4410 of the reference. If so, a DECL_EXPR for the temporary will be
4411 added just after the DECL_EXPR for DECL. That's why we don't set
4412 DECL_INITIAL for local references (instead assigning to them
4413 explicitly); we need to allow the temporary to be initialized
4414 first. */
4415 tmp = initialize_reference (type, init, decl, cleanup, tf_warning_or_error);
4417 if (tmp == error_mark_node)
4418 return NULL_TREE;
4419 else if (tmp == NULL_TREE)
4421 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4422 return NULL_TREE;
4425 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4426 return tmp;
4428 DECL_INITIAL (decl) = tmp;
4430 return NULL_TREE;
4433 /* Subroutine of check_initializer. We're initializing a DECL of
4434 std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4435 extend the lifetime of the underlying array to match that of the decl,
4436 just like for reference initialization. CLEANUP is as for
4437 grok_reference_init. */
4439 static tree
4440 build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4442 tree aggr_init, array, arrtype;
4443 init = perform_implicit_conversion (type, init, tf_warning_or_error);
4444 if (error_operand_p (init))
4445 return error_mark_node;
4447 aggr_init = TARGET_EXPR_INITIAL (init);
4448 init = build2 (INIT_EXPR, type, decl, init);
4450 array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4451 arrtype = TREE_TYPE (array);
4452 STRIP_NOPS (array);
4453 gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4454 array = TREE_OPERAND (array, 0);
4455 /* If the array is constant, finish_compound_literal already made it a
4456 static variable and we don't need to do anything here. */
4457 if (decl && TREE_CODE (array) == TARGET_EXPR)
4459 tree subinit;
4460 tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4461 var = build_address (var);
4462 var = convert (arrtype, var);
4463 AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4464 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4466 return init;
4469 /* Designated initializers in arrays are not supported in GNU C++.
4470 The parser cannot detect this error since it does not know whether
4471 a given brace-enclosed initializer is for a class type or for an
4472 array. This function checks that CE does not use a designated
4473 initializer. If it does, an error is issued. Returns true if CE
4474 is valid, i.e., does not have a designated initializer. */
4476 static bool
4477 check_array_designated_initializer (const constructor_elt *ce)
4479 /* Designated initializers for array elements are not supported. */
4480 if (ce->index)
4482 /* The parser only allows identifiers as designated
4483 initializers. */
4484 if (ce->index == error_mark_node)
4485 error ("name used in a GNU-style designated "
4486 "initializer for an array");
4487 else
4489 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4490 error ("name %qD used in a GNU-style designated "
4491 "initializer for an array", ce->index);
4493 return false;
4496 return true;
4499 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4500 array until we finish parsing the initializer. If that's the
4501 situation we're in, update DECL accordingly. */
4503 static void
4504 maybe_deduce_size_from_array_init (tree decl, tree init)
4506 tree type = TREE_TYPE (decl);
4508 if (TREE_CODE (type) == ARRAY_TYPE
4509 && TYPE_DOMAIN (type) == NULL_TREE
4510 && TREE_CODE (decl) != TYPE_DECL)
4512 /* do_default is really a C-ism to deal with tentative definitions.
4513 But let's leave it here to ease the eventual merge. */
4514 int do_default = !DECL_EXTERNAL (decl);
4515 tree initializer = init ? init : DECL_INITIAL (decl);
4516 int failure = 0;
4518 /* Check that there are no designated initializers in INIT, as
4519 those are not supported in GNU C++, and as the middle-end
4520 will crash if presented with a non-numeric designated
4521 initializer. */
4522 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4524 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4525 constructor_elt *ce;
4526 HOST_WIDE_INT i;
4527 for (i = 0;
4528 VEC_iterate (constructor_elt, v, i, ce);
4529 ++i)
4530 if (!check_array_designated_initializer (ce))
4531 failure = 1;
4534 if (!failure)
4536 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4537 do_default);
4538 if (failure == 1)
4540 error ("initializer fails to determine size of %qD", decl);
4541 TREE_TYPE (decl) = error_mark_node;
4543 else if (failure == 2)
4545 if (do_default)
4547 error ("array size missing in %qD", decl);
4548 TREE_TYPE (decl) = error_mark_node;
4550 /* If a `static' var's size isn't known, make it extern as
4551 well as static, so it does not get allocated. If it's not
4552 `static', then don't mark it extern; finish_incomplete_decl
4553 will give it a default size and it will get allocated. */
4554 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4555 DECL_EXTERNAL (decl) = 1;
4557 else if (failure == 3)
4559 error ("zero-size array %qD", decl);
4560 TREE_TYPE (decl) = error_mark_node;
4564 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4566 relayout_decl (decl);
4570 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4571 any appropriate error messages regarding the layout. */
4573 static void
4574 layout_var_decl (tree decl)
4576 tree type;
4578 type = TREE_TYPE (decl);
4579 if (type == error_mark_node)
4580 return;
4582 /* If we haven't already layed out this declaration, do so now.
4583 Note that we must not call complete type for an external object
4584 because it's type might involve templates that we are not
4585 supposed to instantiate yet. (And it's perfectly valid to say
4586 `extern X x' for some incomplete type `X'.) */
4587 if (!DECL_EXTERNAL (decl))
4588 complete_type (type);
4589 if (!DECL_SIZE (decl)
4590 && TREE_TYPE (decl) != error_mark_node
4591 && (COMPLETE_TYPE_P (type)
4592 || (TREE_CODE (type) == ARRAY_TYPE
4593 && !TYPE_DOMAIN (type)
4594 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4595 layout_decl (decl, 0);
4597 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4599 /* An automatic variable with an incomplete type: that is an error.
4600 Don't talk about array types here, since we took care of that
4601 message in grokdeclarator. */
4602 error ("storage size of %qD isn't known", decl);
4603 TREE_TYPE (decl) = error_mark_node;
4605 #if 0
4606 /* Keep this code around in case we later want to control debug info
4607 based on whether a type is "used". (jason 1999-11-11) */
4609 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4610 /* Let debugger know it should output info for this type. */
4611 note_debug_info_needed (ttype);
4613 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4614 note_debug_info_needed (DECL_CONTEXT (decl));
4615 #endif
4617 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4618 && DECL_SIZE (decl) != NULL_TREE
4619 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4621 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4622 constant_expression_warning (DECL_SIZE (decl));
4623 else
4625 error ("storage size of %qD isn't constant", decl);
4626 TREE_TYPE (decl) = error_mark_node;
4631 /* If a local static variable is declared in an inline function, or if
4632 we have a weak definition, we must endeavor to create only one
4633 instance of the variable at link-time. */
4635 void
4636 maybe_commonize_var (tree decl)
4638 /* Static data in a function with comdat linkage also has comdat
4639 linkage. */
4640 if (TREE_STATIC (decl)
4641 /* Don't mess with __FUNCTION__. */
4642 && ! DECL_ARTIFICIAL (decl)
4643 && DECL_FUNCTION_SCOPE_P (decl)
4644 && vague_linkage_p (DECL_CONTEXT (decl)))
4646 if (flag_weak)
4648 /* With weak symbols, we simply make the variable COMDAT;
4649 that will cause copies in multiple translations units to
4650 be merged. */
4651 comdat_linkage (decl);
4653 else
4655 if (DECL_INITIAL (decl) == NULL_TREE
4656 || DECL_INITIAL (decl) == error_mark_node)
4658 /* Without weak symbols, we can use COMMON to merge
4659 uninitialized variables. */
4660 TREE_PUBLIC (decl) = 1;
4661 DECL_COMMON (decl) = 1;
4663 else
4665 /* While for initialized variables, we must use internal
4666 linkage -- which means that multiple copies will not
4667 be merged. */
4668 TREE_PUBLIC (decl) = 0;
4669 DECL_COMMON (decl) = 0;
4670 warning_at (input_location, 0,
4671 "sorry: semantics of inline function static "
4672 "data %q+#D are wrong (you'll wind up "
4673 "with multiple copies)", decl);
4674 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4675 " you can work around this by removing "
4676 "the initializer");
4680 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4681 /* Set it up again; we might have set DECL_INITIAL since the last
4682 time. */
4683 comdat_linkage (decl);
4686 /* Issue an error message if DECL is an uninitialized const variable. */
4688 static void
4689 check_for_uninitialized_const_var (tree decl)
4691 tree type = TREE_TYPE (decl);
4693 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
4694 && DECL_INITIAL (decl) == NULL)
4695 error ("missing initializer for constexpr %qD", decl);
4697 /* ``Unless explicitly declared extern, a const object does not have
4698 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4699 7.1.6 */
4700 else if (TREE_CODE (decl) == VAR_DECL
4701 && TREE_CODE (type) != REFERENCE_TYPE
4702 && CP_TYPE_CONST_P (type)
4703 && !TYPE_NEEDS_CONSTRUCTING (type)
4704 && !DECL_INITIAL (decl))
4705 error ("uninitialized const %qD", decl);
4709 /* Structure holding the current initializer being processed by reshape_init.
4710 CUR is a pointer to the current element being processed, END is a pointer
4711 after the last element present in the initializer. */
4712 typedef struct reshape_iterator_t
4714 constructor_elt *cur;
4715 constructor_elt *end;
4716 } reshape_iter;
4718 static tree reshape_init_r (tree, reshape_iter *, bool);
4720 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4721 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4722 initialized. If there are no more such fields, the return value
4723 will be NULL. */
4725 tree
4726 next_initializable_field (tree field)
4728 while (field
4729 && (TREE_CODE (field) != FIELD_DECL
4730 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4731 || DECL_ARTIFICIAL (field)))
4732 field = TREE_CHAIN (field);
4734 return field;
4737 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4738 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4739 INTEGER_CST representing the size of the array minus one (the maximum index),
4740 or NULL_TREE if the array was declared without specifying the size. D is
4741 the iterator within the constructor. */
4743 static tree
4744 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4746 tree new_init;
4747 bool sized_array_p = (max_index != NULL_TREE);
4748 unsigned HOST_WIDE_INT max_index_cst = 0;
4749 unsigned HOST_WIDE_INT index;
4751 /* The initializer for an array is always a CONSTRUCTOR. */
4752 new_init = build_constructor (init_list_type_node, NULL);
4754 if (sized_array_p)
4756 /* Minus 1 is used for zero sized arrays. */
4757 if (integer_all_onesp (max_index))
4758 return new_init;
4760 if (host_integerp (max_index, 1))
4761 max_index_cst = tree_low_cst (max_index, 1);
4762 /* sizetype is sign extended, not zero extended. */
4763 else
4764 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4768 /* Loop until there are no more initializers. */
4769 for (index = 0;
4770 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4771 ++index)
4773 tree elt_init;
4775 check_array_designated_initializer (d->cur);
4776 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4777 if (elt_init == error_mark_node)
4778 return error_mark_node;
4779 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4782 return new_init;
4785 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4786 Parameters are the same of reshape_init_r. */
4788 static tree
4789 reshape_init_array (tree type, reshape_iter *d)
4791 tree max_index = NULL_TREE;
4793 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4795 if (TYPE_DOMAIN (type))
4796 max_index = array_type_nelts (type);
4798 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4801 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4802 Parameters are the same of reshape_init_r. */
4804 static tree
4805 reshape_init_vector (tree type, reshape_iter *d)
4807 tree max_index = NULL_TREE;
4808 tree rtype;
4810 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4812 if (COMPOUND_LITERAL_P (d->cur->value))
4814 tree value = d->cur->value;
4815 if (!same_type_p (TREE_TYPE (value), type))
4817 error ("invalid type %qT as initializer for a vector of type %qT",
4818 TREE_TYPE (d->cur->value), type);
4819 value = error_mark_node;
4821 ++d->cur;
4822 return value;
4825 /* For a vector, the representation type is a struct
4826 containing a single member which is an array of the
4827 appropriate size. */
4828 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4829 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4830 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4832 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4835 /* Subroutine of reshape_init_r, processes the initializers for classes
4836 or union. Parameters are the same of reshape_init_r. */
4838 static tree
4839 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4841 tree field;
4842 tree new_init;
4844 gcc_assert (CLASS_TYPE_P (type));
4846 /* The initializer for a class is always a CONSTRUCTOR. */
4847 new_init = build_constructor (init_list_type_node, NULL);
4848 field = next_initializable_field (TYPE_FIELDS (type));
4850 if (!field)
4852 /* [dcl.init.aggr]
4854 An initializer for an aggregate member that is an
4855 empty class shall have the form of an empty
4856 initializer-list {}. */
4857 if (!first_initializer_p)
4859 error ("initializer for %qT must be brace-enclosed", type);
4860 return error_mark_node;
4862 return new_init;
4865 /* Loop through the initializable fields, gathering initializers. */
4866 while (d->cur != d->end)
4868 tree field_init;
4870 /* Handle designated initializers, as an extension. */
4871 if (d->cur->index)
4873 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4875 if (!field || TREE_CODE (field) != FIELD_DECL)
4877 error ("%qT has no non-static data member named %qD", type,
4878 d->cur->index);
4879 return error_mark_node;
4883 /* If we processed all the member of the class, we are done. */
4884 if (!field)
4885 break;
4887 field_init = reshape_init_r (TREE_TYPE (field), d,
4888 /*first_initializer_p=*/false);
4889 if (field_init == error_mark_node)
4890 return error_mark_node;
4892 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4894 /* [dcl.init.aggr]
4896 When a union is initialized with a brace-enclosed
4897 initializer, the braces shall only contain an
4898 initializer for the first member of the union. */
4899 if (TREE_CODE (type) == UNION_TYPE)
4900 break;
4902 field = next_initializable_field (TREE_CHAIN (field));
4905 return new_init;
4908 /* Subroutine of reshape_init, which processes a single initializer (part of
4909 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4910 iterator within the CONSTRUCTOR which points to the initializer to process.
4911 FIRST_INITIALIZER_P is true if this is the first initializer of the
4912 outermost CONSTRUCTOR node. */
4914 static tree
4915 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4917 tree init = d->cur->value;
4919 if (error_operand_p (init))
4920 return error_mark_node;
4922 /* A non-aggregate type is always initialized with a single
4923 initializer. */
4924 if (!CP_AGGREGATE_TYPE_P (type))
4926 /* It is invalid to initialize a non-aggregate type with a
4927 brace-enclosed initializer before C++0x.
4928 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4929 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4930 a CONSTRUCTOR (with a record type). */
4931 if (TREE_CODE (init) == CONSTRUCTOR
4932 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4934 if (SCALAR_TYPE_P (type))
4936 error ("braces around scalar initializer for type %qT", type);
4937 init = error_mark_node;
4939 else
4940 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
4943 d->cur++;
4944 return init;
4947 /* [dcl.init.aggr]
4949 All implicit type conversions (clause _conv_) are considered when
4950 initializing the aggregate member with an initializer from an
4951 initializer-list. If the initializer can initialize a member,
4952 the member is initialized. Otherwise, if the member is itself a
4953 non-empty subaggregate, brace elision is assumed and the
4954 initializer is considered for the initialization of the first
4955 member of the subaggregate. */
4956 if (TREE_CODE (init) != CONSTRUCTOR
4957 /* But don't try this for the first initializer, since that would be
4958 looking through the outermost braces; A a2 = { a1 }; is not a
4959 valid aggregate initialization. */
4960 && !first_initializer_p
4961 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
4962 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
4964 d->cur++;
4965 return init;
4968 /* [dcl.init.string]
4970 A char array (whether plain char, signed char, or unsigned char)
4971 can be initialized by a string-literal (optionally enclosed in
4972 braces); a wchar_t array can be initialized by a wide
4973 string-literal (optionally enclosed in braces). */
4974 if (TREE_CODE (type) == ARRAY_TYPE
4975 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4977 tree str_init = init;
4979 /* Strip one level of braces if and only if they enclose a single
4980 element (as allowed by [dcl.init.string]). */
4981 if (!first_initializer_p
4982 && TREE_CODE (str_init) == CONSTRUCTOR
4983 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4985 str_init = VEC_index (constructor_elt,
4986 CONSTRUCTOR_ELTS (str_init), 0)->value;
4989 /* If it's a string literal, then it's the initializer for the array
4990 as a whole. Otherwise, continue with normal initialization for
4991 array types (one value per array element). */
4992 if (TREE_CODE (str_init) == STRING_CST)
4994 d->cur++;
4995 return str_init;
4999 /* The following cases are about aggregates. If we are not within a full
5000 initializer already, and there is not a CONSTRUCTOR, it means that there
5001 is a missing set of braces (that is, we are processing the case for
5002 which reshape_init exists). */
5003 if (!first_initializer_p)
5005 if (TREE_CODE (init) == CONSTRUCTOR)
5007 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5008 /* There is no need to reshape pointer-to-member function
5009 initializers, as they are always constructed correctly
5010 by the front end. */
5012 else if (COMPOUND_LITERAL_P (init))
5013 /* For a nested compound literal, there is no need to reshape since
5014 brace elision is not allowed. Even if we decided to allow it,
5015 we should add a call to reshape_init in finish_compound_literal,
5016 before calling digest_init, so changing this code would still
5017 not be necessary. */
5018 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5019 else
5021 ++d->cur;
5022 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5023 return reshape_init (type, init);
5027 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5028 type);
5031 /* Dispatch to specialized routines. */
5032 if (CLASS_TYPE_P (type))
5033 return reshape_init_class (type, d, first_initializer_p);
5034 else if (TREE_CODE (type) == ARRAY_TYPE)
5035 return reshape_init_array (type, d);
5036 else if (TREE_CODE (type) == VECTOR_TYPE)
5037 return reshape_init_vector (type, d);
5038 else
5039 gcc_unreachable();
5042 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5043 brace-enclosed aggregate initializer.
5045 INIT is the CONSTRUCTOR containing the list of initializers describing
5046 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5047 It may not presently match the shape of the TYPE; for example:
5049 struct S { int a; int b; };
5050 struct S a[] = { 1, 2, 3, 4 };
5052 Here INIT will hold a VEC of four elements, rather than a
5053 VEC of two elements, each itself a VEC of two elements. This
5054 routine transforms INIT from the former form into the latter. The
5055 revised CONSTRUCTOR node is returned. */
5057 tree
5058 reshape_init (tree type, tree init)
5060 VEC(constructor_elt, gc) *v;
5061 reshape_iter d;
5062 tree new_init;
5064 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5066 v = CONSTRUCTOR_ELTS (init);
5068 /* An empty constructor does not need reshaping, and it is always a valid
5069 initializer. */
5070 if (VEC_empty (constructor_elt, v))
5071 return init;
5073 /* Recurse on this CONSTRUCTOR. */
5074 d.cur = VEC_index (constructor_elt, v, 0);
5075 d.end = d.cur + VEC_length (constructor_elt, v);
5077 new_init = reshape_init_r (type, &d, true);
5078 if (new_init == error_mark_node)
5079 return error_mark_node;
5081 /* Make sure all the element of the constructor were used. Otherwise,
5082 issue an error about exceeding initializers. */
5083 if (d.cur != d.end)
5084 error ("too many initializers for %qT", type);
5086 return new_init;
5089 /* Verify array initializer. Returns true if errors have been reported. */
5091 bool
5092 check_array_initializer (tree decl, tree type, tree init)
5094 tree element_type = TREE_TYPE (type);
5096 /* The array type itself need not be complete, because the
5097 initializer may tell us how many elements are in the array.
5098 But, the elements of the array must be complete. */
5099 if (!COMPLETE_TYPE_P (complete_type (element_type)))
5101 if (decl)
5102 error ("elements of array %q#D have incomplete type", decl);
5103 else
5104 error ("elements of array %q#T have incomplete type", type);
5105 return true;
5107 /* It is not valid to initialize a VLA. */
5108 if (init
5109 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5110 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5112 if (decl)
5113 error ("variable-sized object %qD may not be initialized", decl);
5114 else
5115 error ("variable-sized compound literal");
5116 return true;
5118 return false;
5121 /* Subroutine of check_initializer; args are passed down from that function.
5122 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
5124 static tree
5125 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5128 int saved_stmts_are_full_exprs_p = 0;
5129 if (building_stmt_tree ())
5131 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5132 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5134 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5135 if (building_stmt_tree ())
5136 current_stmt_tree ()->stmts_are_full_exprs_p =
5137 saved_stmts_are_full_exprs_p;
5138 return init;
5141 /* Verify INIT (the initializer for DECL), and record the
5142 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
5143 grok_reference_init.
5145 If the return value is non-NULL, it is an expression that must be
5146 evaluated dynamically to initialize DECL. */
5148 static tree
5149 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5151 tree type = TREE_TYPE (decl);
5152 tree init_code = NULL;
5154 /* Things that are going to be initialized need to have complete
5155 type. */
5156 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5158 if (type == error_mark_node)
5159 /* We will have already complained. */
5160 return NULL_TREE;
5162 if (TREE_CODE (type) == ARRAY_TYPE)
5164 if (check_array_initializer (decl, type, init))
5165 return NULL_TREE;
5167 else if (!COMPLETE_TYPE_P (type))
5169 error ("%qD has incomplete type", decl);
5170 TREE_TYPE (decl) = error_mark_node;
5171 return NULL_TREE;
5173 else
5174 /* There is no way to make a variable-sized class type in GNU C++. */
5175 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5177 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5179 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5180 if (SCALAR_TYPE_P (type))
5182 if (init_len == 0)
5184 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5185 init = build_zero_init (type, NULL_TREE, false);
5187 else if (init_len != 1)
5189 error ("scalar object %qD requires one element in initializer",
5190 decl);
5191 TREE_TYPE (decl) = error_mark_node;
5192 return NULL_TREE;
5197 if (TREE_CODE (decl) == CONST_DECL)
5199 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5201 DECL_INITIAL (decl) = init;
5203 gcc_assert (init != NULL_TREE);
5204 init = NULL_TREE;
5206 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
5207 init = grok_reference_init (decl, type, init, cleanup);
5208 else if (init)
5210 /* Do not reshape constructors of vectors (they don't need to be
5211 reshaped. */
5212 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5214 if (is_std_init_list (type))
5215 return build_init_list_var_init (decl, type, init, cleanup);
5216 else if (TYPE_NON_AGGREGATE_CLASS (type))
5218 /* Don't reshape if the class has constructors. */
5219 if (cxx_dialect == cxx98)
5220 error ("in C++98 %qD must be initialized by constructor, "
5221 "not by %<{...}%>",
5222 decl);
5223 init = build_tree_list (NULL_TREE, init);
5225 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5227 error ("opaque vector types cannot be initialized");
5228 init = error_mark_node;
5230 else
5231 init = reshape_init (type, init);
5234 /* If DECL has an array type without a specific bound, deduce the
5235 array size from the initializer. */
5236 maybe_deduce_size_from_array_init (decl, init);
5237 type = TREE_TYPE (decl);
5238 if (type == error_mark_node)
5239 return NULL_TREE;
5241 if (TYPE_NEEDS_CONSTRUCTING (type)
5242 || (CLASS_TYPE_P (type)
5243 && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5244 return build_aggr_init_full_exprs (decl, init, flags);
5245 else if (TREE_CODE (init) != TREE_VEC)
5247 init_code = store_init_value (decl, init, flags);
5248 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5249 && DECL_INITIAL (decl)
5250 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5251 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5252 warning (0, "array %qD initialized by parenthesized string literal %qE",
5253 decl, DECL_INITIAL (decl));
5254 init = NULL;
5257 else if (DECL_EXTERNAL (decl))
5259 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5260 return build_aggr_init_full_exprs (decl, init, flags);
5261 else if (MAYBE_CLASS_TYPE_P (type))
5263 tree core_type = strip_array_types (type);
5265 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5266 error ("structure %qD with uninitialized const members", decl);
5267 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5268 error ("structure %qD with uninitialized reference members", decl);
5270 check_for_uninitialized_const_var (decl);
5272 else
5273 check_for_uninitialized_const_var (decl);
5275 if (init && init != error_mark_node)
5276 init_code = build2 (INIT_EXPR, type, decl, init);
5278 return init_code;
5281 /* If DECL is not a local variable, give it RTL. */
5283 static void
5284 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5286 int toplev = toplevel_bindings_p ();
5287 int defer_p;
5288 const char *filename;
5290 /* Set the DECL_ASSEMBLER_NAME for the object. */
5291 if (asmspec)
5293 /* The `register' keyword, when used together with an
5294 asm-specification, indicates that the variable should be
5295 placed in a particular register. */
5296 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5298 set_user_assembler_name (decl, asmspec);
5299 DECL_HARD_REGISTER (decl) = 1;
5301 else
5303 if (TREE_CODE (decl) == FUNCTION_DECL
5304 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5305 set_builtin_user_assembler_name (decl, asmspec);
5306 set_user_assembler_name (decl, asmspec);
5310 /* Handle non-variables up front. */
5311 if (TREE_CODE (decl) != VAR_DECL)
5313 rest_of_decl_compilation (decl, toplev, at_eof);
5314 return;
5317 /* If we see a class member here, it should be a static data
5318 member. */
5319 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5321 gcc_assert (TREE_STATIC (decl));
5322 /* An in-class declaration of a static data member should be
5323 external; it is only a declaration, and not a definition. */
5324 if (init == NULL_TREE)
5325 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5328 /* We don't create any RTL for local variables. */
5329 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5330 return;
5332 /* We defer emission of local statics until the corresponding
5333 DECL_EXPR is expanded. */
5334 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5336 /* We try to defer namespace-scope static constants so that they are
5337 not emitted into the object file unnecessarily. */
5338 filename = input_filename;
5339 if (!DECL_VIRTUAL_P (decl)
5340 && TREE_READONLY (decl)
5341 && DECL_INITIAL (decl) != NULL_TREE
5342 && DECL_INITIAL (decl) != error_mark_node
5343 && filename != NULL
5344 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5345 && toplev
5346 && !TREE_PUBLIC (decl))
5348 /* Fool with the linkage of static consts according to #pragma
5349 interface. */
5350 struct c_fileinfo *finfo = get_fileinfo (filename);
5351 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5353 TREE_PUBLIC (decl) = 1;
5354 DECL_EXTERNAL (decl) = finfo->interface_only;
5357 defer_p = 1;
5359 /* Likewise for template instantiations. */
5360 else if (DECL_LANG_SPECIFIC (decl)
5361 && DECL_IMPLICIT_INSTANTIATION (decl))
5362 defer_p = 1;
5364 /* If we're not deferring, go ahead and assemble the variable. */
5365 if (!defer_p)
5366 rest_of_decl_compilation (decl, toplev, at_eof);
5369 /* walk_tree helper for wrap_temporary_cleanups, below. */
5371 static tree
5372 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5374 if (TYPE_P (*stmt_p))
5376 *walk_subtrees = 0;
5377 return NULL_TREE;
5380 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5382 tree guard = (tree)data;
5383 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5385 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5386 /* Tell honor_protect_cleanup_actions to handle this as a separate
5387 cleanup. */
5388 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5390 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5393 return NULL_TREE;
5396 /* We're initializing a local variable which has a cleanup GUARD. If there
5397 are any temporaries used in the initializer INIT of this variable, we
5398 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5399 variable will be cleaned up properly if one of them throws.
5401 Unfortunately, there's no way to express this properly in terms of
5402 nesting, as the regions for the temporaries overlap the region for the
5403 variable itself; if there are two temporaries, the variable needs to be
5404 the first thing destroyed if either of them throws. However, we only
5405 want to run the variable's cleanup if it actually got constructed. So
5406 we need to guard the temporary cleanups with the variable's cleanup if
5407 they are run on the normal path, but not if they are run on the
5408 exceptional path. We implement this by telling
5409 honor_protect_cleanup_actions to strip the variable cleanup from the
5410 exceptional path. */
5412 static void
5413 wrap_temporary_cleanups (tree init, tree guard)
5415 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5418 /* Generate code to initialize DECL (a local variable). */
5420 static void
5421 initialize_local_var (tree decl, tree init)
5423 tree type = TREE_TYPE (decl);
5424 tree cleanup;
5425 int already_used;
5427 gcc_assert (TREE_CODE (decl) == VAR_DECL
5428 || TREE_CODE (decl) == RESULT_DECL);
5429 gcc_assert (!TREE_STATIC (decl));
5431 if (DECL_SIZE (decl) == NULL_TREE)
5433 /* If we used it already as memory, it must stay in memory. */
5434 DECL_INITIAL (decl) = NULL_TREE;
5435 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5436 return;
5439 if (type == error_mark_node)
5440 return;
5442 /* Compute and store the initial value. */
5443 already_used = TREE_USED (decl) || TREE_USED (type);
5445 /* Generate a cleanup, if necessary. */
5446 cleanup = cxx_maybe_build_cleanup (decl);
5448 /* Perform the initialization. */
5449 if (init)
5451 int saved_stmts_are_full_exprs_p;
5453 /* If we're only initializing a single object, guard the destructors
5454 of any temporaries used in its initializer with its destructor.
5455 This isn't right for arrays because each element initialization is
5456 a full-expression. */
5457 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5458 wrap_temporary_cleanups (init, cleanup);
5460 gcc_assert (building_stmt_tree ());
5461 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5462 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5463 finish_expr_stmt (init);
5464 current_stmt_tree ()->stmts_are_full_exprs_p =
5465 saved_stmts_are_full_exprs_p;
5468 /* Set this to 0 so we can tell whether an aggregate which was
5469 initialized was ever used. Don't do this if it has a
5470 destructor, so we don't complain about the 'resource
5471 allocation is initialization' idiom. Now set
5472 attribute((unused)) on types so decls of that type will be
5473 marked used. (see TREE_USED, above.) */
5474 if (TYPE_NEEDS_CONSTRUCTING (type)
5475 && ! already_used
5476 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5477 && DECL_NAME (decl))
5478 TREE_USED (decl) = 0;
5479 else if (already_used)
5480 TREE_USED (decl) = 1;
5482 if (cleanup)
5483 finish_decl_cleanup (decl, cleanup);
5486 /* DECL is a VAR_DECL for a compiler-generated variable with static
5487 storage duration (like a virtual table) whose initializer is a
5488 compile-time constant. INIT must be either a TREE_LIST of values,
5489 or a CONSTRUCTOR. Initialize the variable and provide it to the
5490 back end. */
5492 void
5493 initialize_artificial_var (tree decl, tree init)
5495 gcc_assert (DECL_ARTIFICIAL (decl));
5496 if (TREE_CODE (init) == TREE_LIST)
5497 init = build_constructor_from_list (TREE_TYPE (decl), init);
5498 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5499 DECL_INITIAL (decl) = init;
5500 DECL_INITIALIZED_P (decl) = 1;
5501 determine_visibility (decl);
5502 layout_var_decl (decl);
5503 maybe_commonize_var (decl);
5504 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5507 /* INIT is the initializer for a variable, as represented by the
5508 parser. Returns true iff INIT is value-dependent. */
5510 static bool
5511 value_dependent_init_p (tree init)
5513 if (TREE_CODE (init) == TREE_LIST)
5514 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5515 return any_value_dependent_elements_p (init);
5516 else if (TREE_CODE (init) == CONSTRUCTOR)
5517 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5519 VEC(constructor_elt, gc) *elts;
5520 size_t nelts;
5521 size_t i;
5523 elts = CONSTRUCTOR_ELTS (init);
5524 nelts = VEC_length (constructor_elt, elts);
5525 for (i = 0; i < nelts; ++i)
5526 if (value_dependent_init_p (VEC_index (constructor_elt,
5527 elts, i)->value))
5528 return true;
5530 else
5531 /* It must be a simple expression, e.g., int i = 3; */
5532 return value_dependent_expression_p (init);
5534 return false;
5537 /* Finish processing of a declaration;
5538 install its line number and initial value.
5539 If the length of an array type is not known before,
5540 it must be determined now, from the initial value, or it is an error.
5542 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5543 true, then INIT is an integral constant expression.
5545 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5546 if the (init) syntax was used. */
5548 void
5549 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5550 tree asmspec_tree, int flags)
5552 tree type;
5553 tree cleanup;
5554 const char *asmspec = NULL;
5555 int was_readonly = 0;
5556 bool var_definition_p = false;
5557 int saved_processing_template_decl;
5558 tree auto_node;
5560 if (decl == error_mark_node)
5561 return;
5562 else if (! decl)
5564 if (init)
5565 error ("assignment (not initialization) in declaration");
5566 return;
5569 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5570 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5571 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5573 type = TREE_TYPE (decl);
5574 if (type == error_mark_node)
5575 return;
5577 /* Assume no cleanup is required. */
5578 cleanup = NULL_TREE;
5579 saved_processing_template_decl = processing_template_decl;
5581 /* If a name was specified, get the string. */
5582 if (global_scope_p (current_binding_level))
5583 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5584 if (asmspec_tree && asmspec_tree != error_mark_node)
5585 asmspec = TREE_STRING_POINTER (asmspec_tree);
5587 if (current_class_type
5588 && CP_DECL_CONTEXT (decl) == current_class_type
5589 && TYPE_BEING_DEFINED (current_class_type)
5590 && (DECL_INITIAL (decl) || init))
5591 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5593 auto_node = type_uses_auto (type);
5594 if (auto_node)
5596 if (init == NULL_TREE)
5598 error ("declaration of %q#D has no initializer", decl);
5599 TREE_TYPE (decl) = error_mark_node;
5600 return;
5602 if (TREE_CODE (init) == TREE_LIST)
5603 init = build_x_compound_expr_from_list (init, "initializer");
5604 if (describable_type (init))
5606 type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5607 if (type == error_mark_node)
5608 return;
5612 if (init && TREE_CODE (decl) == FUNCTION_DECL)
5614 tree clone;
5615 if (init == ridpointers[(int)RID_DELETE])
5617 /* FIXME check this is 1st decl. */
5618 DECL_DELETED_FN (decl) = 1;
5619 DECL_DECLARED_INLINE_P (decl) = 1;
5620 DECL_INITIAL (decl) = error_mark_node;
5621 FOR_EACH_CLONE (clone, decl)
5623 DECL_DELETED_FN (clone) = 1;
5624 DECL_DECLARED_INLINE_P (clone) = 1;
5625 DECL_INITIAL (clone) = error_mark_node;
5627 init = NULL_TREE;
5629 else if (init == ridpointers[(int)RID_DEFAULT])
5631 if (defaultable_fn_check (decl))
5632 DECL_DEFAULTED_FN (decl) = 1;
5633 else
5634 DECL_INITIAL (decl) = NULL_TREE;
5638 if (processing_template_decl)
5640 bool type_dependent_p;
5642 /* Add this declaration to the statement-tree. */
5643 if (at_function_scope_p ())
5644 add_decl_expr (decl);
5646 type_dependent_p = dependent_type_p (type);
5648 if (check_for_bare_parameter_packs (init))
5650 init = NULL_TREE;
5651 DECL_INITIAL (decl) = NULL_TREE;
5654 if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
5656 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5657 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5658 TREE_CONSTANT (decl) = 1;
5661 /* Generally, initializers in templates are expanded when the
5662 template is instantiated. But, if DECL is an integral
5663 constant static data member, then it can be used in future
5664 integral constant expressions, and its value must be
5665 available. */
5666 if (!(init
5667 && DECL_CLASS_SCOPE_P (decl)
5668 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5669 && !type_dependent_p
5670 && !value_dependent_init_p (init)))
5672 if (init)
5673 DECL_INITIAL (decl) = init;
5674 if (TREE_CODE (decl) == VAR_DECL
5675 && !DECL_PRETTY_FUNCTION_P (decl)
5676 && !type_dependent_p)
5677 maybe_deduce_size_from_array_init (decl, init);
5678 goto finish_end;
5681 if (TREE_CODE (init) == TREE_LIST)
5683 /* If the parenthesized-initializer form was used (e.g.,
5684 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5685 arguments. (There is generally only one.) We convert them
5686 individually. */
5687 tree list = init;
5688 for (; list; list = TREE_CHAIN (list))
5690 tree elt = TREE_VALUE (list);
5691 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5694 else
5695 init = fold_non_dependent_expr (init);
5696 processing_template_decl = 0;
5699 /* Take care of TYPE_DECLs up front. */
5700 if (TREE_CODE (decl) == TYPE_DECL)
5702 if (type != error_mark_node
5703 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5705 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5706 warning (0, "shadowing previous type declaration of %q#D", decl);
5707 set_identifier_type_value (DECL_NAME (decl), decl);
5710 /* If we have installed this as the canonical typedef for this
5711 type, and that type has not been defined yet, delay emitting
5712 the debug information for it, as we will emit it later. */
5713 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5714 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5715 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5717 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5718 at_eof);
5719 goto finish_end;
5722 /* A reference will be modified here, as it is initialized. */
5723 if (! DECL_EXTERNAL (decl)
5724 && TREE_READONLY (decl)
5725 && TREE_CODE (type) == REFERENCE_TYPE)
5727 was_readonly = 1;
5728 TREE_READONLY (decl) = 0;
5731 if (TREE_CODE (decl) == VAR_DECL)
5733 /* Only variables with trivial initialization and destruction can
5734 have thread-local storage. */
5735 if (DECL_THREAD_LOCAL_P (decl)
5736 && (type_has_nontrivial_default_init (TREE_TYPE (decl))
5737 || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
5738 error ("%qD cannot be thread-local because it has non-trivial "
5739 "type %qT", decl, TREE_TYPE (decl));
5740 /* If this is a local variable that will need a mangled name,
5741 register it now. We must do this before processing the
5742 initializer for the variable, since the initialization might
5743 require a guard variable, and since the mangled name of the
5744 guard variable will depend on the mangled name of this
5745 variable. */
5746 if (DECL_FUNCTION_SCOPE_P (decl)
5747 && TREE_STATIC (decl)
5748 && !DECL_ARTIFICIAL (decl))
5750 push_local_name (decl);
5751 if (DECL_CONSTRUCTOR_P (current_function_decl)
5752 || DECL_DESTRUCTOR_P (current_function_decl))
5753 /* Normally local_decls is populated during GIMPLE lowering,
5754 but [cd]tors are never actually compiled directly. We need
5755 to put statics on the list so we can deal with the label
5756 address extension. */
5757 cfun->local_decls = tree_cons (NULL_TREE, decl,
5758 cfun->local_decls);
5761 /* Convert the initializer to the type of DECL, if we have not
5762 already initialized DECL. */
5763 if (!DECL_INITIALIZED_P (decl)
5764 /* If !DECL_EXTERNAL then DECL is being defined. In the
5765 case of a static data member initialized inside the
5766 class-specifier, there can be an initializer even if DECL
5767 is *not* defined. */
5768 && (!DECL_EXTERNAL (decl) || init))
5770 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5772 tree jclass
5773 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5774 /* Allow libjava/prims.cc define primitive classes. */
5775 if (init != NULL_TREE
5776 || jclass == NULL_TREE
5777 || TREE_CODE (jclass) != TYPE_DECL
5778 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5779 || !same_type_ignoring_top_level_qualifiers_p
5780 (type, TREE_TYPE (TREE_TYPE (jclass))))
5781 error ("Java object %qD not allocated with %<new%>", decl);
5782 init = NULL_TREE;
5784 if (init)
5786 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5787 if (init_const_expr_p)
5789 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5790 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5791 TREE_CONSTANT (decl) = 1;
5794 init = check_initializer (decl, init, flags, &cleanup);
5795 /* Thread-local storage cannot be dynamically initialized. */
5796 if (DECL_THREAD_LOCAL_P (decl) && init)
5798 error ("%qD is thread-local and so cannot be dynamically "
5799 "initialized", decl);
5800 init = NULL_TREE;
5803 /* Check that the initializer for a static data member was a
5804 constant. Although we check in the parser that the
5805 initializer is an integral constant expression, we do not
5806 simplify division-by-zero at the point at which it
5807 occurs. Therefore, in:
5809 struct S { static const int i = 7 / 0; };
5811 we issue an error at this point. It would
5812 probably be better to forbid division by zero in
5813 integral constant expressions. */
5814 if (DECL_EXTERNAL (decl) && init)
5816 error ("%qD cannot be initialized by a non-constant expression"
5817 " when being declared", decl);
5818 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5819 init = NULL_TREE;
5822 /* Handle:
5824 [dcl.init]
5826 The memory occupied by any object of static storage
5827 duration is zero-initialized at program startup before
5828 any other initialization takes place.
5830 We cannot create an appropriate initializer until after
5831 the type of DECL is finalized. If DECL_INITIAL is set,
5832 then the DECL is statically initialized, and any
5833 necessary zero-initialization has already been performed. */
5834 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5835 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5836 /*nelts=*/NULL_TREE,
5837 /*static_storage_p=*/true);
5838 /* Remember that the initialization for this variable has
5839 taken place. */
5840 DECL_INITIALIZED_P (decl) = 1;
5841 /* This declaration is the definition of this variable,
5842 unless we are initializing a static data member within
5843 the class specifier. */
5844 if (!DECL_EXTERNAL (decl))
5845 var_definition_p = true;
5847 /* If the variable has an array type, lay out the type, even if
5848 there is no initializer. It is valid to index through the
5849 array, and we must get TYPE_ALIGN set correctly on the array
5850 type. */
5851 else if (TREE_CODE (type) == ARRAY_TYPE)
5852 layout_type (type);
5854 if (!processing_template_decl
5855 && TREE_STATIC (decl)
5856 && !at_function_scope_p ()
5857 && current_function_decl == NULL)
5858 /* So decl is a global variable or a static member of a
5859 non local class. Record the types it uses
5860 so that we can decide later to emit debug info for them. */
5861 record_types_used_by_current_var_decl (decl);
5863 else if (TREE_CODE (decl) == FIELD_DECL
5864 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5865 error ("non-static data member %qD has Java class type", decl);
5867 /* Add this declaration to the statement-tree. This needs to happen
5868 after the call to check_initializer so that the DECL_EXPR for a
5869 reference temp is added before the DECL_EXPR for the reference itself. */
5870 if (at_function_scope_p ())
5871 add_decl_expr (decl);
5873 /* Let the middle end know about variables and functions -- but not
5874 static data members in uninstantiated class templates. */
5875 if (!saved_processing_template_decl
5876 && (TREE_CODE (decl) == VAR_DECL
5877 || TREE_CODE (decl) == FUNCTION_DECL))
5879 if (TREE_CODE (decl) == VAR_DECL)
5881 layout_var_decl (decl);
5882 maybe_commonize_var (decl);
5885 /* This needs to happen after the linkage is set. */
5886 determine_visibility (decl);
5888 if (var_definition_p && TREE_STATIC (decl))
5890 /* If a TREE_READONLY variable needs initialization
5891 at runtime, it is no longer readonly and we need to
5892 avoid MEM_READONLY_P being set on RTL created for it. */
5893 if (init)
5895 if (TREE_READONLY (decl))
5896 TREE_READONLY (decl) = 0;
5897 was_readonly = 0;
5899 else if (was_readonly)
5900 TREE_READONLY (decl) = 1;
5903 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5905 /* Check for abstractness of the type. Notice that there is no
5906 need to strip array types here since the check for those types
5907 is already done within create_array_type_for_decl. */
5908 if (TREE_CODE (type) == FUNCTION_TYPE
5909 || TREE_CODE (type) == METHOD_TYPE)
5910 abstract_virtuals_error (decl, TREE_TYPE (type));
5911 else
5912 abstract_virtuals_error (decl, type);
5914 if (TREE_TYPE (decl) == error_mark_node)
5915 /* No initialization required. */
5917 else if (TREE_CODE (decl) == FUNCTION_DECL)
5919 if (init)
5921 if (init == ridpointers[(int)RID_DEFAULT])
5923 /* An out-of-class default definition is defined at
5924 the point where it is explicitly defaulted. */
5925 if (DECL_INITIAL (decl) == error_mark_node)
5926 synthesize_method (decl);
5928 else
5929 error ("function %q#D is initialized like a variable", decl);
5931 /* else no initialization required. */
5933 else if (DECL_EXTERNAL (decl)
5934 && ! (DECL_LANG_SPECIFIC (decl)
5935 && DECL_NOT_REALLY_EXTERN (decl)))
5937 if (init)
5938 DECL_INITIAL (decl) = init;
5940 /* A variable definition. */
5941 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5942 /* Initialize the local variable. */
5943 initialize_local_var (decl, init);
5945 /* If a variable is defined, and then a subsequent
5946 definition with external linkage is encountered, we will
5947 get here twice for the same variable. We want to avoid
5948 calling expand_static_init more than once. For variables
5949 that are not static data members, we can call
5950 expand_static_init only when we actually process the
5951 initializer. It is not legal to redeclare a static data
5952 member, so this issue does not arise in that case. */
5953 else if (var_definition_p && TREE_STATIC (decl))
5954 expand_static_init (decl, init);
5957 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5958 reference, insert it in the statement-tree now. */
5959 if (cleanup)
5960 push_cleanup (decl, cleanup, false);
5962 finish_end:
5963 processing_template_decl = saved_processing_template_decl;
5965 if (was_readonly)
5966 TREE_READONLY (decl) = 1;
5968 /* If this was marked 'used', be sure it will be output. */
5969 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5970 mark_decl_referenced (decl);
5973 /* Returns a declaration for a VAR_DECL as if:
5975 extern "C" TYPE NAME;
5977 had been seen. Used to create compiler-generated global
5978 variables. */
5980 static tree
5981 declare_global_var (tree name, tree type)
5983 tree decl;
5985 push_to_top_level ();
5986 decl = build_decl (input_location, VAR_DECL, name, type);
5987 TREE_PUBLIC (decl) = 1;
5988 DECL_EXTERNAL (decl) = 1;
5989 DECL_ARTIFICIAL (decl) = 1;
5990 /* If the user has explicitly declared this variable (perhaps
5991 because the code we are compiling is part of a low-level runtime
5992 library), then it is possible that our declaration will be merged
5993 with theirs by pushdecl. */
5994 decl = pushdecl (decl);
5995 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
5996 pop_from_top_level ();
5998 return decl;
6001 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6002 if "__cxa_atexit" is not being used) corresponding to the function
6003 to be called when the program exits. */
6005 static tree
6006 get_atexit_fn_ptr_type (void)
6008 tree arg_types;
6009 tree fn_type;
6011 if (!atexit_fn_ptr_type_node)
6013 if (flag_use_cxa_atexit
6014 && !targetm.cxx.use_atexit_for_cxa_atexit ())
6015 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
6016 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6017 else
6018 /* The parameter to "atexit" is "void (*)(void)". */
6019 arg_types = void_list_node;
6021 fn_type = build_function_type (void_type_node, arg_types);
6022 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6025 return atexit_fn_ptr_type_node;
6028 /* Returns a pointer to the `atexit' function. Note that if
6029 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6030 `__cxa_atexit' function specified in the IA64 C++ ABI. */
6032 static tree
6033 get_atexit_node (void)
6035 tree atexit_fndecl;
6036 tree arg_types;
6037 tree fn_type;
6038 tree fn_ptr_type;
6039 const char *name;
6040 bool use_aeabi_atexit;
6042 if (atexit_node)
6043 return atexit_node;
6045 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6047 /* The declaration for `__cxa_atexit' is:
6049 int __cxa_atexit (void (*)(void *), void *, void *)
6051 We build up the argument types and then then function type
6052 itself. */
6054 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6055 /* First, build the pointer-to-function type for the first
6056 argument. */
6057 fn_ptr_type = get_atexit_fn_ptr_type ();
6058 /* Then, build the rest of the argument types. */
6059 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6060 if (use_aeabi_atexit)
6062 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6063 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6065 else
6067 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6068 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6070 /* And the final __cxa_atexit type. */
6071 fn_type = build_function_type (integer_type_node, arg_types);
6072 fn_ptr_type = build_pointer_type (fn_type);
6073 if (use_aeabi_atexit)
6074 name = "__aeabi_atexit";
6075 else
6076 name = "__cxa_atexit";
6078 else
6080 /* The declaration for `atexit' is:
6082 int atexit (void (*)());
6084 We build up the argument types and then then function type
6085 itself. */
6086 fn_ptr_type = get_atexit_fn_ptr_type ();
6087 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6088 /* Build the final atexit type. */
6089 fn_type = build_function_type (integer_type_node, arg_types);
6090 name = "atexit";
6093 /* Now, build the function declaration. */
6094 push_lang_context (lang_name_c);
6095 atexit_fndecl = build_library_fn_ptr (name, fn_type);
6096 mark_used (atexit_fndecl);
6097 pop_lang_context ();
6098 atexit_node = decay_conversion (atexit_fndecl);
6100 return atexit_node;
6103 /* Returns the __dso_handle VAR_DECL. */
6105 static tree
6106 get_dso_handle_node (void)
6108 if (dso_handle_node)
6109 return dso_handle_node;
6111 /* Declare the variable. */
6112 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6113 ptr_type_node);
6115 return dso_handle_node;
6118 /* Begin a new function with internal linkage whose job will be simply
6119 to destroy some particular variable. */
6121 static GTY(()) int start_cleanup_cnt;
6123 static tree
6124 start_cleanup_fn (void)
6126 char name[32];
6127 tree fntype;
6128 tree fndecl;
6129 bool use_cxa_atexit = flag_use_cxa_atexit
6130 && !targetm.cxx.use_atexit_for_cxa_atexit ();
6132 push_to_top_level ();
6134 /* No need to mangle this. */
6135 push_lang_context (lang_name_c);
6137 /* Build the name of the function. */
6138 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6139 /* Build the function declaration. */
6140 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6141 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6142 /* It's a function with internal linkage, generated by the
6143 compiler. */
6144 TREE_PUBLIC (fndecl) = 0;
6145 DECL_ARTIFICIAL (fndecl) = 1;
6146 /* Make the function `inline' so that it is only emitted if it is
6147 actually needed. It is unlikely that it will be inlined, since
6148 it is only called via a function pointer, but we avoid unnecessary
6149 emissions this way. */
6150 DECL_DECLARED_INLINE_P (fndecl) = 1;
6151 DECL_INTERFACE_KNOWN (fndecl) = 1;
6152 /* Build the parameter. */
6153 if (use_cxa_atexit)
6155 tree parmdecl;
6157 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6158 DECL_CONTEXT (parmdecl) = fndecl;
6159 TREE_USED (parmdecl) = 1;
6160 DECL_ARGUMENTS (fndecl) = parmdecl;
6163 pushdecl (fndecl);
6164 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6166 pop_lang_context ();
6168 return current_function_decl;
6171 /* Finish the cleanup function begun by start_cleanup_fn. */
6173 static void
6174 end_cleanup_fn (void)
6176 expand_or_defer_fn (finish_function (0));
6178 pop_from_top_level ();
6181 /* Generate code to handle the destruction of DECL, an object with
6182 static storage duration. */
6184 tree
6185 register_dtor_fn (tree decl)
6187 tree cleanup;
6188 tree compound_stmt;
6189 tree args;
6190 tree fcall;
6191 tree type;
6192 bool use_dtor;
6194 type = TREE_TYPE (decl);
6195 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6196 return void_zero_node;
6198 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6199 a class object, we can just pass the destructor to
6200 "__cxa_atexit"; we don't have to build a temporary function to do
6201 the cleanup. */
6202 use_dtor = (flag_use_cxa_atexit
6203 && !targetm.cxx.use_atexit_for_cxa_atexit ()
6204 && CLASS_TYPE_P (type));
6205 if (use_dtor)
6207 int idx;
6209 /* Find the destructor. */
6210 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6211 gcc_assert (idx >= 0);
6212 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6213 /* Make sure it is accessible. */
6214 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6216 else
6218 /* Call build_cleanup before we enter the anonymous function so
6219 that any access checks will be done relative to the current
6220 scope, rather than the scope of the anonymous function. */
6221 build_cleanup (decl);
6223 /* Now start the function. */
6224 cleanup = start_cleanup_fn ();
6226 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
6227 to the original function, rather than the anonymous one. That
6228 will make the back end think that nested functions are in use,
6229 which causes confusion. */
6230 push_deferring_access_checks (dk_no_check);
6231 fcall = build_cleanup (decl);
6232 pop_deferring_access_checks ();
6234 /* Create the body of the anonymous function. */
6235 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6236 finish_expr_stmt (fcall);
6237 finish_compound_stmt (compound_stmt);
6238 end_cleanup_fn ();
6241 /* Call atexit with the cleanup function. */
6242 mark_used (cleanup);
6243 cleanup = build_address (cleanup);
6244 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6246 tree addr;
6248 if (use_dtor)
6250 /* We must convert CLEANUP to the type that "__cxa_atexit"
6251 expects. */
6252 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6253 /* "__cxa_atexit" will pass the address of DECL to the
6254 cleanup function. */
6255 mark_used (decl);
6256 addr = build_address (decl);
6257 /* The declared type of the parameter to "__cxa_atexit" is
6258 "void *". For plain "T*", we could just let the
6259 machinery in cp_build_function_call convert it -- but if the
6260 type is "cv-qualified T *", then we need to convert it
6261 before passing it in, to avoid spurious errors. */
6262 addr = build_nop (ptr_type_node, addr);
6264 else
6265 /* Since the cleanup functions we build ignore the address
6266 they're given, there's no reason to pass the actual address
6267 in, and, in general, it's cheaper to pass NULL than any
6268 other value. */
6269 addr = null_pointer_node;
6270 args = tree_cons (NULL_TREE,
6271 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6272 tf_warning_or_error),
6273 NULL_TREE);
6274 if (targetm.cxx.use_aeabi_atexit ())
6276 args = tree_cons (NULL_TREE, cleanup, args);
6277 args = tree_cons (NULL_TREE, addr, args);
6279 else
6281 args = tree_cons (NULL_TREE, addr, args);
6282 args = tree_cons (NULL_TREE, cleanup, args);
6285 else
6286 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6287 return cp_build_function_call (get_atexit_node (), args,
6288 tf_warning_or_error);
6291 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6292 is its initializer. Generate code to handle the construction
6293 and destruction of DECL. */
6295 static void
6296 expand_static_init (tree decl, tree init)
6298 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6299 gcc_assert (TREE_STATIC (decl));
6301 /* Some variables require no initialization. */
6302 if (!init
6303 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6304 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6305 return;
6307 if (DECL_FUNCTION_SCOPE_P (decl))
6309 /* Emit code to perform this initialization but once. */
6310 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6311 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6312 tree guard, guard_addr;
6313 tree acquire_fn, release_fn, abort_fn;
6314 tree flag, begin;
6316 /* Emit code to perform this initialization but once. This code
6317 looks like:
6319 static <type> guard;
6320 if (!guard.first_byte) {
6321 if (__cxa_guard_acquire (&guard)) {
6322 bool flag = false;
6323 try {
6324 // Do initialization.
6325 flag = true; __cxa_guard_release (&guard);
6326 // Register variable for destruction at end of program.
6327 } catch {
6328 if (!flag) __cxa_guard_abort (&guard);
6332 Note that the `flag' variable is only set to 1 *after* the
6333 initialization is complete. This ensures that an exception,
6334 thrown during the construction, will cause the variable to
6335 reinitialized when we pass through this code again, as per:
6337 [stmt.dcl]
6339 If the initialization exits by throwing an exception, the
6340 initialization is not complete, so it will be tried again
6341 the next time control enters the declaration.
6343 This process should be thread-safe, too; multiple threads
6344 should not be able to initialize the variable more than
6345 once. */
6347 /* Create the guard variable. */
6348 guard = get_guard (decl);
6350 /* This optimization isn't safe on targets with relaxed memory
6351 consistency. On such targets we force synchronization in
6352 __cxa_guard_acquire. */
6353 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6355 /* Begin the conditional initialization. */
6356 if_stmt = begin_if_stmt ();
6357 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6358 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6361 if (flag_threadsafe_statics)
6363 guard_addr = build_address (guard);
6365 acquire_fn = get_identifier ("__cxa_guard_acquire");
6366 release_fn = get_identifier ("__cxa_guard_release");
6367 abort_fn = get_identifier ("__cxa_guard_abort");
6368 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6370 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6371 void_list_node);
6372 tree vfntype = build_function_type (void_type_node, argtypes);
6373 acquire_fn = push_library_fn
6374 (acquire_fn, build_function_type (integer_type_node, argtypes),
6375 NULL_TREE);
6376 release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6377 abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6379 else
6381 release_fn = identifier_global_value (release_fn);
6382 abort_fn = identifier_global_value (abort_fn);
6385 inner_if_stmt = begin_if_stmt ();
6386 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6387 inner_if_stmt);
6389 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6390 begin = get_target_expr (boolean_false_node);
6391 flag = TARGET_EXPR_SLOT (begin);
6393 TARGET_EXPR_CLEANUP (begin)
6394 = build3 (COND_EXPR, void_type_node, flag,
6395 void_zero_node,
6396 build_call_n (abort_fn, 1, guard_addr));
6397 CLEANUP_EH_ONLY (begin) = 1;
6399 /* Do the initialization itself. */
6400 init = add_stmt_to_compound (begin, init);
6401 init = add_stmt_to_compound
6402 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6403 init = add_stmt_to_compound
6404 (init, build_call_n (release_fn, 1, guard_addr));
6406 else
6407 init = add_stmt_to_compound (init, set_guard (guard));
6409 /* Use atexit to register a function for destroying this static
6410 variable. */
6411 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6413 finish_expr_stmt (init);
6415 if (flag_threadsafe_statics)
6417 finish_compound_stmt (inner_then_clause);
6418 finish_then_clause (inner_if_stmt);
6419 finish_if_stmt (inner_if_stmt);
6422 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6424 finish_compound_stmt (then_clause);
6425 finish_then_clause (if_stmt);
6426 finish_if_stmt (if_stmt);
6429 else
6430 static_aggregates = tree_cons (init, decl, static_aggregates);
6434 /* Make TYPE a complete type based on INITIAL_VALUE.
6435 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6436 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6437 3 if the initializer list is empty (in pedantic mode). */
6440 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6442 int failure;
6443 tree type, elt_type;
6445 if (initial_value)
6447 unsigned HOST_WIDE_INT i;
6448 tree value;
6450 /* An array of character type can be initialized from a
6451 brace-enclosed string constant.
6453 FIXME: this code is duplicated from reshape_init. Probably
6454 we should just call reshape_init here? */
6455 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6456 && TREE_CODE (initial_value) == CONSTRUCTOR
6457 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6459 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6460 tree value = VEC_index (constructor_elt, v, 0)->value;
6462 if (TREE_CODE (value) == STRING_CST
6463 && VEC_length (constructor_elt, v) == 1)
6464 initial_value = value;
6467 /* If any of the elements are parameter packs, we can't actually
6468 complete this type now because the array size is dependent. */
6469 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6471 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6472 i, value)
6474 if (PACK_EXPANSION_P (value))
6475 return 0;
6480 failure = complete_array_type (ptype, initial_value, do_default);
6482 /* We can create the array before the element type is complete, which
6483 means that we didn't have these two bits set in the original type
6484 either. In completing the type, we are expected to propagate these
6485 bits. See also complete_type which does the same thing for arrays
6486 of fixed size. */
6487 type = *ptype;
6488 if (TYPE_DOMAIN (type))
6490 elt_type = TREE_TYPE (type);
6491 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6492 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6493 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6496 return failure;
6499 /* Return zero if something is declared to be a member of type
6500 CTYPE when in the context of CUR_TYPE. STRING is the error
6501 message to print in that case. Otherwise, quietly return 1. */
6503 static int
6504 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6506 if (ctype && ctype != cur_type)
6508 if (flags == DTOR_FLAG)
6509 error ("destructor for alien class %qT cannot be a member", ctype);
6510 else
6511 error ("constructor for alien class %qT cannot be a member", ctype);
6512 return 0;
6514 return 1;
6517 /* Subroutine of `grokdeclarator'. */
6519 /* Generate errors possibly applicable for a given set of specifiers.
6520 This is for ARM $7.1.2. */
6522 static void
6523 bad_specifiers (tree object,
6524 const char* type,
6525 int virtualp,
6526 int quals,
6527 int inlinep,
6528 int friendp,
6529 int raises)
6531 if (virtualp)
6532 error ("%qD declared as a %<virtual%> %s", object, type);
6533 if (inlinep)
6534 error ("%qD declared as an %<inline%> %s", object, type);
6535 if (quals)
6536 error ("%<const%> and %<volatile%> function specifiers on "
6537 "%qD invalid in %s declaration",
6538 object, type);
6539 if (friendp)
6540 error ("%q+D declared as a friend", object);
6541 if (raises
6542 && (TREE_CODE (object) == TYPE_DECL
6543 || (!TYPE_PTRFN_P (TREE_TYPE (object))
6544 && !TYPE_REFFN_P (TREE_TYPE (object))
6545 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6546 error ("%q+D declared with an exception specification", object);
6549 /* DECL is a member function or static data member and is presently
6550 being defined. Check that the definition is taking place in a
6551 valid namespace. */
6553 static void
6554 check_class_member_definition_namespace (tree decl)
6556 /* These checks only apply to member functions and static data
6557 members. */
6558 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6559 || TREE_CODE (decl) == VAR_DECL);
6560 /* We check for problems with specializations in pt.c in
6561 check_specialization_namespace, where we can issue better
6562 diagnostics. */
6563 if (processing_specialization)
6564 return;
6565 /* There are no restrictions on the placement of
6566 explicit instantiations. */
6567 if (processing_explicit_instantiation)
6568 return;
6569 /* [class.mfct]
6571 A member function definition that appears outside of the
6572 class definition shall appear in a namespace scope enclosing
6573 the class definition.
6575 [class.static.data]
6577 The definition for a static data member shall appear in a
6578 namespace scope enclosing the member's class definition. */
6579 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6580 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6581 decl, DECL_CONTEXT (decl));
6584 /* Build a PARM_DECL for the "this" parameter. TYPE is the
6585 METHOD_TYPE for a non-static member function; QUALS are the
6586 cv-qualifiers that apply to the function. */
6588 tree
6589 build_this_parm (tree type, cp_cv_quals quals)
6591 tree this_type;
6592 tree qual_type;
6593 tree parm;
6594 cp_cv_quals this_quals;
6596 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6597 /* The `this' parameter is implicitly `const'; it cannot be
6598 assigned to. */
6599 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6600 qual_type = cp_build_qualified_type (this_type, this_quals);
6601 parm = build_artificial_parm (this_identifier, qual_type);
6602 cp_apply_type_quals_to_decl (this_quals, parm);
6603 return parm;
6606 /* CTYPE is class type, or null if non-class.
6607 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6608 or METHOD_TYPE.
6609 DECLARATOR is the function's name.
6610 PARMS is a chain of PARM_DECLs for the function.
6611 VIRTUALP is truthvalue of whether the function is virtual or not.
6612 FLAGS are to be passed through to `grokclassfn'.
6613 QUALS are qualifiers indicating whether the function is `const'
6614 or `volatile'.
6615 RAISES is a list of exceptions that this function can raise.
6616 CHECK is 1 if we must find this method in CTYPE, 0 if we should
6617 not look, and -1 if we should not call `grokclassfn' at all.
6619 SFK is the kind of special function (if any) for the new function.
6621 Returns `NULL_TREE' if something goes wrong, after issuing
6622 applicable error messages. */
6624 static tree
6625 grokfndecl (tree ctype,
6626 tree type,
6627 tree declarator,
6628 tree parms,
6629 tree orig_declarator,
6630 int virtualp,
6631 enum overload_flags flags,
6632 cp_cv_quals quals,
6633 tree raises,
6634 int check,
6635 int friendp,
6636 int publicp,
6637 int inlinep,
6638 special_function_kind sfk,
6639 bool funcdef_flag,
6640 int template_count,
6641 tree in_namespace,
6642 tree* attrlist,
6643 location_t location)
6645 tree decl;
6646 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6647 tree t;
6649 if (raises)
6650 type = build_exception_variant (type, raises);
6652 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6654 /* If we have an explicit location, use it, otherwise use whatever
6655 build_lang_decl used (probably input_location). */
6656 if (location != UNKNOWN_LOCATION)
6657 DECL_SOURCE_LOCATION (decl) = location;
6659 if (TREE_CODE (type) == METHOD_TYPE)
6661 tree parm;
6662 parm = build_this_parm (type, quals);
6663 TREE_CHAIN (parm) = parms;
6664 parms = parm;
6666 DECL_ARGUMENTS (decl) = parms;
6667 for (t = parms; t; t = TREE_CHAIN (t))
6668 DECL_CONTEXT (t) = decl;
6669 /* Propagate volatile out from type to decl. */
6670 if (TYPE_VOLATILE (type))
6671 TREE_THIS_VOLATILE (decl) = 1;
6673 /* Setup decl according to sfk. */
6674 switch (sfk)
6676 case sfk_constructor:
6677 case sfk_copy_constructor:
6678 case sfk_move_constructor:
6679 DECL_CONSTRUCTOR_P (decl) = 1;
6680 break;
6681 case sfk_destructor:
6682 DECL_DESTRUCTOR_P (decl) = 1;
6683 break;
6684 default:
6685 break;
6688 /* If pointers to member functions use the least significant bit to
6689 indicate whether a function is virtual, ensure a pointer
6690 to this function will have that bit clear. */
6691 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6692 && TREE_CODE (type) == METHOD_TYPE
6693 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6694 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6696 if (friendp
6697 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6699 if (funcdef_flag)
6700 error
6701 ("defining explicit specialization %qD in friend declaration",
6702 orig_declarator);
6703 else
6705 tree fns = TREE_OPERAND (orig_declarator, 0);
6706 tree args = TREE_OPERAND (orig_declarator, 1);
6708 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6710 /* Something like `template <class T> friend void f<T>()'. */
6711 error ("invalid use of template-id %qD in declaration "
6712 "of primary template",
6713 orig_declarator);
6714 return NULL_TREE;
6718 /* A friend declaration of the form friend void f<>(). Record
6719 the information in the TEMPLATE_ID_EXPR. */
6720 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6722 if (TREE_CODE (fns) == COMPONENT_REF)
6724 /* Due to bison parser ickiness, we will have already looked
6725 up an operator_name or PFUNCNAME within the current class
6726 (see template_id in parse.y). If the current class contains
6727 such a name, we'll get a COMPONENT_REF here. Undo that. */
6729 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6730 == current_class_type);
6731 fns = TREE_OPERAND (fns, 1);
6733 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6734 || TREE_CODE (fns) == OVERLOAD);
6735 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
6737 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6738 if (TREE_PURPOSE (t)
6739 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6741 error ("default arguments are not allowed in declaration "
6742 "of friend template specialization %qD",
6743 decl);
6744 return NULL_TREE;
6747 if (inlinep)
6749 error ("%<inline%> is not allowed in declaration of friend "
6750 "template specialization %qD",
6751 decl);
6752 return NULL_TREE;
6757 /* If this decl has namespace scope, set that up. */
6758 if (in_namespace)
6759 set_decl_namespace (decl, in_namespace, friendp);
6760 else if (!ctype)
6761 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6763 /* `main' and builtins have implicit 'C' linkage. */
6764 if ((MAIN_NAME_P (declarator)
6765 || (IDENTIFIER_LENGTH (declarator) > 10
6766 && IDENTIFIER_POINTER (declarator)[0] == '_'
6767 && IDENTIFIER_POINTER (declarator)[1] == '_'
6768 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6769 && current_lang_name == lang_name_cplusplus
6770 && ctype == NULL_TREE
6771 /* NULL_TREE means global namespace. */
6772 && DECL_CONTEXT (decl) == NULL_TREE)
6773 SET_DECL_LANGUAGE (decl, lang_c);
6775 /* Should probably propagate const out from type to decl I bet (mrs). */
6776 if (staticp)
6778 DECL_STATIC_FUNCTION_P (decl) = 1;
6779 DECL_CONTEXT (decl) = ctype;
6782 if (ctype)
6784 DECL_CONTEXT (decl) = ctype;
6785 if (funcdef_flag)
6786 check_class_member_definition_namespace (decl);
6789 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6791 if (processing_template_decl)
6792 error ("cannot declare %<::main%> to be a template");
6793 if (inlinep)
6794 error ("cannot declare %<::main%> to be inline");
6795 if (!publicp)
6796 error ("cannot declare %<::main%> to be static");
6797 inlinep = 0;
6798 publicp = 1;
6801 /* Members of anonymous types and local classes have no linkage; make
6802 them internal. If a typedef is made later, this will be changed. */
6803 if (ctype && (TYPE_ANONYMOUS_P (ctype)
6804 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6805 publicp = 0;
6807 if (publicp && cxx_dialect == cxx98)
6809 /* [basic.link]: A name with no linkage (notably, the name of a class
6810 or enumeration declared in a local scope) shall not be used to
6811 declare an entity with linkage.
6813 DR 757 relaxes this restriction for C++0x. */
6814 t = no_linkage_check (TREE_TYPE (decl),
6815 /*relaxed_p=*/false);
6816 if (t)
6818 if (TYPE_ANONYMOUS_P (t))
6820 if (DECL_EXTERN_C_P (decl))
6821 /* Allow this; it's pretty common in C. */;
6822 else
6824 permerror (input_location, "anonymous type with no linkage "
6825 "used to declare function %q#D with linkage",
6826 decl);
6827 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6828 permerror (input_location, "%q+#D does not refer to the unqualified "
6829 "type, so it is not used for linkage",
6830 TYPE_NAME (t));
6833 else
6834 permerror (input_location, "type %qT with no linkage used to "
6835 "declare function %q#D with linkage", t, decl);
6839 TREE_PUBLIC (decl) = publicp;
6840 if (! publicp)
6842 DECL_INTERFACE_KNOWN (decl) = 1;
6843 DECL_NOT_REALLY_EXTERN (decl) = 1;
6846 /* If the declaration was declared inline, mark it as such. */
6847 if (inlinep)
6848 DECL_DECLARED_INLINE_P (decl) = 1;
6850 DECL_EXTERNAL (decl) = 1;
6851 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6853 error (ctype
6854 ? G_("static member function %qD cannot have cv-qualifier")
6855 : G_("non-member function %qD cannot have cv-qualifier"),
6856 decl);
6857 quals = TYPE_UNQUALIFIED;
6860 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6861 && !grok_op_properties (decl, /*complain=*/true))
6862 return NULL_TREE;
6864 if (funcdef_flag)
6865 /* Make the init_value nonzero so pushdecl knows this is not
6866 tentative. error_mark_node is replaced later with the BLOCK. */
6867 DECL_INITIAL (decl) = error_mark_node;
6869 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6870 TREE_NOTHROW (decl) = 1;
6872 /* Caller will do the rest of this. */
6873 if (check < 0)
6874 return decl;
6876 if (ctype != NULL_TREE)
6877 grokclassfn (ctype, decl, flags);
6879 decl = check_explicit_specialization (orig_declarator, decl,
6880 template_count,
6881 2 * funcdef_flag +
6882 4 * (friendp != 0));
6883 if (decl == error_mark_node)
6884 return NULL_TREE;
6886 if (attrlist)
6888 cplus_decl_attributes (&decl, *attrlist, 0);
6889 *attrlist = NULL_TREE;
6892 /* Check main's type after attributes have been applied. */
6893 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6895 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6896 integer_type_node))
6898 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6899 tree newtype;
6900 error ("%<::main%> must return %<int%>");
6901 newtype = build_function_type (integer_type_node, oldtypeargs);
6902 TREE_TYPE (decl) = newtype;
6904 if (warn_main)
6905 check_main_parameter_types (decl);
6908 if (ctype != NULL_TREE
6909 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6910 && check)
6912 tree old_decl = check_classfn (ctype, decl,
6913 (processing_template_decl
6914 > template_class_depth (ctype))
6915 ? current_template_parms
6916 : NULL_TREE);
6918 if (old_decl == error_mark_node)
6919 return NULL_TREE;
6921 if (old_decl)
6923 tree ok;
6924 tree pushed_scope;
6926 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6927 /* Because grokfndecl is always supposed to return a
6928 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6929 here. We depend on our callers to figure out that its
6930 really a template that's being returned. */
6931 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6933 if (DECL_STATIC_FUNCTION_P (old_decl)
6934 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6935 /* Remove the `this' parm added by grokclassfn.
6936 XXX Isn't this done in start_function, too? */
6937 revert_static_member_fn (decl);
6938 if (DECL_ARTIFICIAL (old_decl))
6940 error ("definition of implicitly-declared %qD", old_decl);
6941 return NULL_TREE;
6944 /* Since we've smashed OLD_DECL to its
6945 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6946 if (TREE_CODE (decl) == TEMPLATE_DECL)
6947 decl = DECL_TEMPLATE_RESULT (decl);
6949 /* Attempt to merge the declarations. This can fail, in
6950 the case of some invalid specialization declarations. */
6951 pushed_scope = push_scope (ctype);
6952 ok = duplicate_decls (decl, old_decl, friendp);
6953 if (pushed_scope)
6954 pop_scope (pushed_scope);
6955 if (!ok)
6957 error ("no %q#D member function declared in class %qT",
6958 decl, ctype);
6959 return NULL_TREE;
6961 return old_decl;
6965 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6966 return NULL_TREE;
6968 if (ctype == NULL_TREE || check)
6969 return decl;
6971 if (virtualp)
6972 DECL_VIRTUAL_P (decl) = 1;
6974 return decl;
6977 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6978 the linkage that DECL will receive in the object file. */
6980 static void
6981 set_linkage_for_static_data_member (tree decl)
6983 /* A static data member always has static storage duration and
6984 external linkage. Note that static data members are forbidden in
6985 local classes -- the only situation in which a class has
6986 non-external linkage. */
6987 TREE_PUBLIC (decl) = 1;
6988 TREE_STATIC (decl) = 1;
6989 /* For non-template classes, static data members are always put
6990 out in exactly those files where they are defined, just as
6991 with ordinary namespace-scope variables. */
6992 if (!processing_template_decl)
6993 DECL_INTERFACE_KNOWN (decl) = 1;
6996 /* Create a VAR_DECL named NAME with the indicated TYPE.
6998 If SCOPE is non-NULL, it is the class type or namespace containing
6999 the variable. If SCOPE is NULL, the variable should is created in
7000 the innermost enclosings scope. */
7002 static tree
7003 grokvardecl (tree type,
7004 tree name,
7005 const cp_decl_specifier_seq *declspecs,
7006 int initialized,
7007 int constp,
7008 tree scope)
7010 tree decl;
7011 tree explicit_scope;
7013 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7015 /* Compute the scope in which to place the variable, but remember
7016 whether or not that scope was explicitly specified by the user. */
7017 explicit_scope = scope;
7018 if (!scope)
7020 /* An explicit "extern" specifier indicates a namespace-scope
7021 variable. */
7022 if (declspecs->storage_class == sc_extern)
7023 scope = current_namespace;
7024 else if (!at_function_scope_p ())
7025 scope = current_scope ();
7028 if (scope
7029 && (/* If the variable is a namespace-scope variable declared in a
7030 template, we need DECL_LANG_SPECIFIC. */
7031 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7032 /* Similarly for namespace-scope variables with language linkage
7033 other than C++. */
7034 || (TREE_CODE (scope) == NAMESPACE_DECL
7035 && current_lang_name != lang_name_cplusplus)
7036 /* Similarly for static data members. */
7037 || TYPE_P (scope)))
7038 decl = build_lang_decl (VAR_DECL, name, type);
7039 else
7040 decl = build_decl (input_location, VAR_DECL, name, type);
7042 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7043 set_decl_namespace (decl, explicit_scope, 0);
7044 else
7045 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7047 if (declspecs->storage_class == sc_extern)
7049 DECL_THIS_EXTERN (decl) = 1;
7050 DECL_EXTERNAL (decl) = !initialized;
7053 if (DECL_CLASS_SCOPE_P (decl))
7055 set_linkage_for_static_data_member (decl);
7056 /* This function is only called with out-of-class definitions. */
7057 DECL_EXTERNAL (decl) = 0;
7058 check_class_member_definition_namespace (decl);
7060 /* At top level, either `static' or no s.c. makes a definition
7061 (perhaps tentative), and absence of `static' makes it public. */
7062 else if (toplevel_bindings_p ())
7064 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7065 && (DECL_THIS_EXTERN (decl) || ! constp));
7066 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7068 /* Not at top level, only `static' makes a static definition. */
7069 else
7071 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7072 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7075 if (declspecs->specs[(int)ds_thread])
7076 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7078 /* If the type of the decl has no linkage, make sure that we'll
7079 notice that in mark_used. */
7080 if (cxx_dialect > cxx98
7081 && decl_linkage (decl) != lk_none
7082 && DECL_LANG_SPECIFIC (decl) == NULL
7083 && !DECL_EXTERN_C_P (decl)
7084 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7085 retrofit_lang_decl (decl);
7087 if (TREE_PUBLIC (decl))
7089 /* [basic.link]: A name with no linkage (notably, the name of a class
7090 or enumeration declared in a local scope) shall not be used to
7091 declare an entity with linkage.
7093 DR 757 relaxes this restriction for C++0x. */
7094 tree t = (cxx_dialect > cxx98 ? NULL_TREE
7095 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7096 if (t)
7098 if (TYPE_ANONYMOUS_P (t))
7100 if (DECL_EXTERN_C_P (decl))
7101 /* Allow this; it's pretty common in C. */
7103 else
7105 /* DRs 132, 319 and 389 seem to indicate types with
7106 no linkage can only be used to declare extern "C"
7107 entities. Since it's not always an error in the
7108 ISO C++ 90 Standard, we only issue a warning. */
7109 warning (0, "anonymous type with no linkage used to declare "
7110 "variable %q#D with linkage", decl);
7111 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7112 warning (0, "%q+#D does not refer to the unqualified "
7113 "type, so it is not used for linkage",
7114 TYPE_NAME (t));
7117 else
7118 warning (0, "type %qT with no linkage used to declare variable "
7119 "%q#D with linkage", t, decl);
7122 else
7123 DECL_INTERFACE_KNOWN (decl) = 1;
7125 return decl;
7128 /* Create and return a canonical pointer to member function type, for
7129 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
7131 tree
7132 build_ptrmemfunc_type (tree type)
7134 tree field, fields;
7135 tree t;
7136 tree unqualified_variant = NULL_TREE;
7138 if (type == error_mark_node)
7139 return type;
7141 /* If a canonical type already exists for this type, use it. We use
7142 this method instead of type_hash_canon, because it only does a
7143 simple equality check on the list of field members. */
7145 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7146 return t;
7148 /* Make sure that we always have the unqualified pointer-to-member
7149 type first. */
7150 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7151 unqualified_variant
7152 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7154 t = make_class_type (RECORD_TYPE);
7155 xref_basetypes (t, NULL_TREE);
7157 /* Let the front end know this is a pointer to member function... */
7158 TYPE_PTRMEMFUNC_FLAG (t) = 1;
7159 /* ... and not really a class type. */
7160 SET_CLASS_TYPE_P (t, 0);
7162 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7163 fields = field;
7165 field = build_decl (input_location, FIELD_DECL, delta_identifier,
7166 delta_type_node);
7167 TREE_CHAIN (field) = fields;
7168 fields = field;
7170 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7172 /* Zap out the name so that the back end will give us the debugging
7173 information for this anonymous RECORD_TYPE. */
7174 TYPE_NAME (t) = NULL_TREE;
7176 /* If this is not the unqualified form of this pointer-to-member
7177 type, set the TYPE_MAIN_VARIANT for this type to be the
7178 unqualified type. Since they are actually RECORD_TYPEs that are
7179 not variants of each other, we must do this manually.
7180 As we just built a new type there is no need to do yet another copy. */
7181 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7183 int type_quals = cp_type_quals (type);
7184 TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7185 TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7186 TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7187 TYPE_MAIN_VARIANT (t) = unqualified_variant;
7188 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7189 TYPE_NEXT_VARIANT (unqualified_variant) = t;
7190 TREE_TYPE (TYPE_BINFO (t)) = t;
7193 /* Cache this pointer-to-member type so that we can find it again
7194 later. */
7195 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7197 if (TYPE_STRUCTURAL_EQUALITY_P (type))
7198 SET_TYPE_STRUCTURAL_EQUALITY (t);
7199 else if (TYPE_CANONICAL (type) != type)
7200 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7202 return t;
7205 /* Create and return a pointer to data member type. */
7207 tree
7208 build_ptrmem_type (tree class_type, tree member_type)
7210 if (TREE_CODE (member_type) == METHOD_TYPE)
7212 tree arg_types = TYPE_ARG_TYPES (member_type);
7213 cp_cv_quals quals = cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)));
7214 member_type = build_memfn_type (member_type, class_type, quals);
7215 return build_ptrmemfunc_type (build_pointer_type (member_type));
7217 else
7219 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7220 return build_offset_type (class_type, member_type);
7224 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7225 Check to see that the definition is valid. Issue appropriate error
7226 messages. Return 1 if the definition is particularly bad, or 0
7227 otherwise. */
7230 check_static_variable_definition (tree decl, tree type)
7232 /* Motion 10 at San Diego: If a static const integral data member is
7233 initialized with an integral constant expression, the initializer
7234 may appear either in the declaration (within the class), or in
7235 the definition, but not both. If it appears in the class, the
7236 member is a member constant. The file-scope definition is always
7237 required. */
7238 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7240 error ("invalid in-class initialization of static data member "
7241 "of non-integral type %qT",
7242 type);
7243 /* If we just return the declaration, crashes will sometimes
7244 occur. We therefore return void_type_node, as if this were a
7245 friend declaration, to cause callers to completely ignore
7246 this declaration. */
7247 return 1;
7249 else if (!CP_TYPE_CONST_P (type))
7250 error ("ISO C++ forbids in-class initialization of non-const "
7251 "static member %qD",
7252 decl);
7253 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7254 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7255 "%qD of non-integral type %qT", decl, type);
7257 return 0;
7260 /* Given the SIZE (i.e., number of elements) in an array, compute an
7261 appropriate index type for the array. If non-NULL, NAME is the
7262 name of the thing being declared. */
7264 tree
7265 compute_array_index_type (tree name, tree size)
7267 tree type;
7268 tree itype;
7269 tree abi_1_itype = NULL_TREE;
7271 if (error_operand_p (size))
7272 return error_mark_node;
7274 type = TREE_TYPE (size);
7275 /* The array bound must be an integer type. */
7276 if (!dependent_type_p (type) && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7278 if (name)
7279 error ("size of array %qD has non-integral type %qT", name, type);
7280 else
7281 error ("size of array has non-integral type %qT", type);
7282 size = integer_one_node;
7283 type = TREE_TYPE (size);
7286 /* We can only call value_dependent_expression_p on integral constant
7287 expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7288 set if this isn't one. */
7289 if (processing_template_decl
7290 && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7292 /* We cannot do any checking for a SIZE that isn't known to be
7293 constant. Just build the index type and mark that it requires
7294 structural equality checks. */
7295 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7296 size, integer_one_node));
7297 TYPE_DEPENDENT_P (itype) = 1;
7298 TYPE_DEPENDENT_P_VALID (itype) = 1;
7299 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7300 return itype;
7303 if (!abi_version_at_least (2) && processing_template_decl)
7304 /* For abi-1, we handled all instances in templates the same way,
7305 even when they were non-dependent. This affects the manglings
7306 produced. So, we do the normal checking for non-dependent
7307 sizes, but at the end we'll return the same type that abi-1
7308 would have, but with TYPE_CANONICAL set to the "right"
7309 value that the current ABI would provide. */
7310 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7311 size, integer_one_node));
7313 /* The size might be the result of a cast. */
7314 STRIP_TYPE_NOPS (size);
7316 /* It might be a const variable or enumeration constant. */
7317 size = integral_constant_value (size);
7319 /* Normally, the array-bound will be a constant. */
7320 if (TREE_CODE (size) == INTEGER_CST)
7322 /* Check to see if the array bound overflowed. Make that an
7323 error, no matter how generous we're being. */
7324 constant_expression_error (size);
7326 /* An array must have a positive number of elements. */
7327 if (INT_CST_LT (size, integer_zero_node))
7329 if (name)
7330 error ("size of array %qD is negative", name);
7331 else
7332 error ("size of array is negative");
7333 size = integer_one_node;
7335 /* As an extension we allow zero-sized arrays. We always allow
7336 them in system headers because glibc uses them. */
7337 else if (integer_zerop (size) && !in_system_header)
7339 if (name)
7340 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7341 else
7342 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7345 else if (TREE_CONSTANT (size))
7347 /* `(int) &fn' is not a valid array bound. */
7348 if (name)
7349 error ("size of array %qD is not an integral constant-expression",
7350 name);
7351 else
7352 error ("size of array is not an integral constant-expression");
7353 size = integer_one_node;
7355 else if (pedantic && warn_vla != 0)
7357 if (name)
7358 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7359 else
7360 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7362 else if (warn_vla > 0)
7364 if (name)
7365 warning (OPT_Wvla,
7366 "variable length array %qD is used", name);
7367 else
7368 warning (OPT_Wvla,
7369 "variable length array is used");
7372 if (processing_template_decl && !TREE_CONSTANT (size))
7373 /* A variable sized array. */
7374 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7375 else
7377 HOST_WIDE_INT saved_processing_template_decl;
7379 /* Compute the index of the largest element in the array. It is
7380 one less than the number of elements in the array. We save
7381 and restore PROCESSING_TEMPLATE_DECL so that computations in
7382 cp_build_binary_op will be appropriately folded. */
7383 saved_processing_template_decl = processing_template_decl;
7384 processing_template_decl = 0;
7385 itype = cp_build_binary_op (input_location,
7386 MINUS_EXPR,
7387 cp_convert (ssizetype, size),
7388 cp_convert (ssizetype, integer_one_node),
7389 tf_warning_or_error);
7390 itype = fold (itype);
7391 processing_template_decl = saved_processing_template_decl;
7393 if (!TREE_CONSTANT (itype))
7394 /* A variable sized array. */
7395 itype = variable_size (itype);
7396 /* Make sure that there was no overflow when creating to a signed
7397 index type. (For example, on a 32-bit machine, an array with
7398 size 2^32 - 1 is too big.) */
7399 else if (TREE_CODE (itype) == INTEGER_CST
7400 && TREE_OVERFLOW (itype))
7402 error ("overflow in array dimension");
7403 TREE_OVERFLOW (itype) = 0;
7407 /* Create and return the appropriate index type. */
7408 if (abi_1_itype)
7410 tree t = build_index_type (itype);
7411 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7412 return abi_1_itype;
7414 else
7415 return build_index_type (itype);
7418 /* Returns the scope (if any) in which the entity declared by
7419 DECLARATOR will be located. If the entity was declared with an
7420 unqualified name, NULL_TREE is returned. */
7422 tree
7423 get_scope_of_declarator (const cp_declarator *declarator)
7425 while (declarator && declarator->kind != cdk_id)
7426 declarator = declarator->declarator;
7428 /* If the declarator-id is a SCOPE_REF, the scope in which the
7429 declaration occurs is the first operand. */
7430 if (declarator
7431 && declarator->u.id.qualifying_scope)
7432 return declarator->u.id.qualifying_scope;
7434 /* Otherwise, the declarator is not a qualified name; the entity will
7435 be declared in the current scope. */
7436 return NULL_TREE;
7439 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7440 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7441 with this type. */
7443 static tree
7444 create_array_type_for_decl (tree name, tree type, tree size)
7446 tree itype = NULL_TREE;
7448 /* If things have already gone awry, bail now. */
7449 if (type == error_mark_node || size == error_mark_node)
7450 return error_mark_node;
7452 /* If there are some types which cannot be array elements,
7453 issue an error-message and return. */
7454 switch (TREE_CODE (type))
7456 case VOID_TYPE:
7457 if (name)
7458 error ("declaration of %qD as array of void", name);
7459 else
7460 error ("creating array of void");
7461 return error_mark_node;
7463 case FUNCTION_TYPE:
7464 if (name)
7465 error ("declaration of %qD as array of functions", name);
7466 else
7467 error ("creating array of functions");
7468 return error_mark_node;
7470 case REFERENCE_TYPE:
7471 if (name)
7472 error ("declaration of %qD as array of references", name);
7473 else
7474 error ("creating array of references");
7475 return error_mark_node;
7477 case METHOD_TYPE:
7478 if (name)
7479 error ("declaration of %qD as array of function members", name);
7480 else
7481 error ("creating array of function members");
7482 return error_mark_node;
7484 default:
7485 break;
7488 /* [dcl.array]
7490 The constant expressions that specify the bounds of the arrays
7491 can be omitted only for the first member of the sequence. */
7492 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7494 if (name)
7495 error ("declaration of %qD as multidimensional array must "
7496 "have bounds for all dimensions except the first",
7497 name);
7498 else
7499 error ("multidimensional array must have bounds for all "
7500 "dimensions except the first");
7502 return error_mark_node;
7505 /* Figure out the index type for the array. */
7506 if (size)
7507 itype = compute_array_index_type (name, size);
7509 /* [dcl.array]
7510 T is called the array element type; this type shall not be [...] an
7511 abstract class type. */
7512 abstract_virtuals_error (name, type);
7514 return build_cplus_array_type (type, itype);
7517 /* Check that it's OK to declare a function with the indicated TYPE.
7518 SFK indicates the kind of special function (if any) that this
7519 function is. OPTYPE is the type given in a conversion operator
7520 declaration, or the class type for a constructor/destructor.
7521 Returns the actual return type of the function; that
7522 may be different than TYPE if an error occurs, or for certain
7523 special functions. */
7525 static tree
7526 check_special_function_return_type (special_function_kind sfk,
7527 tree type,
7528 tree optype)
7530 switch (sfk)
7532 case sfk_constructor:
7533 if (type)
7534 error ("return type specification for constructor invalid");
7536 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7537 type = build_pointer_type (optype);
7538 else
7539 type = void_type_node;
7540 break;
7542 case sfk_destructor:
7543 if (type)
7544 error ("return type specification for destructor invalid");
7545 /* We can't use the proper return type here because we run into
7546 problems with ambiguous bases and covariant returns.
7547 Java classes are left unchanged because (void *) isn't a valid
7548 Java type, and we don't want to change the Java ABI. */
7549 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7550 type = build_pointer_type (void_type_node);
7551 else
7552 type = void_type_node;
7553 break;
7555 case sfk_conversion:
7556 if (type)
7557 error ("return type specified for %<operator %T%>", optype);
7558 type = optype;
7559 break;
7561 default:
7562 gcc_unreachable ();
7565 return type;
7568 /* A variable or data member (whose unqualified name is IDENTIFIER)
7569 has been declared with the indicated TYPE. If the TYPE is not
7570 acceptable, issue an error message and return a type to use for
7571 error-recovery purposes. */
7573 tree
7574 check_var_type (tree identifier, tree type)
7576 if (VOID_TYPE_P (type))
7578 if (!identifier)
7579 error ("unnamed variable or field declared void");
7580 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7582 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7583 error ("variable or field %qE declared void", identifier);
7585 else
7586 error ("variable or field declared void");
7587 type = error_mark_node;
7590 return type;
7593 /* Given declspecs and a declarator (abstract or otherwise), determine
7594 the name and type of the object declared and construct a DECL node
7595 for it.
7597 DECLSPECS points to the representation of declaration-specifier
7598 sequence that precedes declarator.
7600 DECL_CONTEXT says which syntactic context this declaration is in:
7601 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7602 FUNCDEF for a function definition. Like NORMAL but a few different
7603 error messages in each case. Return value may be zero meaning
7604 this definition is too screwy to try to parse.
7605 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7606 handle member functions (which have FIELD context).
7607 Return value may be zero meaning this definition is too screwy to
7608 try to parse.
7609 PARM for a parameter declaration (either within a function prototype
7610 or before a function body). Make a PARM_DECL, or return void_type_node.
7611 TPARM for a template parameter declaration.
7612 CATCHPARM for a parameter declaration before a catch clause.
7613 TYPENAME if for a typename (in a cast or sizeof).
7614 Don't make a DECL node; just return the ..._TYPE node.
7615 FIELD for a struct or union field; make a FIELD_DECL.
7616 BITFIELD for a field with specified width.
7618 INITIALIZED is as for start_decl.
7620 ATTRLIST is a pointer to the list of attributes, which may be NULL
7621 if there are none; *ATTRLIST may be modified if attributes from inside
7622 the declarator should be applied to the declaration.
7624 When this function is called, scoping variables (such as
7625 CURRENT_CLASS_TYPE) should reflect the scope in which the
7626 declaration occurs, not the scope in which the new declaration will
7627 be placed. For example, on:
7629 void S::f() { ... }
7631 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7632 should not be `S'.
7634 Returns a DECL (if a declarator is present), a TYPE (if there is no
7635 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7636 error occurs. */
7638 tree
7639 grokdeclarator (const cp_declarator *declarator,
7640 const cp_decl_specifier_seq *declspecs,
7641 enum decl_context decl_context,
7642 int initialized,
7643 tree* attrlist)
7645 tree type = NULL_TREE;
7646 int longlong = 0;
7647 int virtualp, explicitp, friendp, inlinep, staticp;
7648 int explicit_int = 0;
7649 int explicit_char = 0;
7650 int defaulted_int = 0;
7651 tree dependent_name = NULL_TREE;
7653 tree typedef_decl = NULL_TREE;
7654 const char *name = NULL;
7655 tree typedef_type = NULL_TREE;
7656 /* True if this declarator is a function definition. */
7657 bool funcdef_flag = false;
7658 cp_declarator_kind innermost_code = cdk_error;
7659 int bitfield = 0;
7660 #if 0
7661 /* See the code below that used this. */
7662 tree decl_attr = NULL_TREE;
7663 #endif
7665 /* Keep track of what sort of function is being processed
7666 so that we can warn about default return values, or explicit
7667 return values which do not match prescribed defaults. */
7668 special_function_kind sfk = sfk_none;
7670 tree dname = NULL_TREE;
7671 tree ctor_return_type = NULL_TREE;
7672 enum overload_flags flags = NO_SPECIAL;
7673 /* cv-qualifiers that apply to the declarator, for a declaration of
7674 a member function. */
7675 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7676 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7677 int type_quals;
7678 tree raises = NULL_TREE;
7679 int template_count = 0;
7680 tree returned_attrs = NULL_TREE;
7681 tree parms = NULL_TREE;
7682 const cp_declarator *id_declarator;
7683 /* The unqualified name of the declarator; either an
7684 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7685 tree unqualified_id;
7686 /* The class type, if any, in which this entity is located,
7687 or NULL_TREE if none. Note that this value may be different from
7688 the current class type; for example if an attempt is made to declare
7689 "A::f" inside "B", this value will be "A". */
7690 tree ctype = current_class_type;
7691 /* The NAMESPACE_DECL for the namespace in which this entity is
7692 located. If an unqualified name is used to declare the entity,
7693 this value will be NULL_TREE, even if the entity is located at
7694 namespace scope. */
7695 tree in_namespace = NULL_TREE;
7696 cp_storage_class storage_class;
7697 bool unsigned_p, signed_p, short_p, long_p, thread_p;
7698 bool type_was_error_mark_node = false;
7699 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7700 bool template_type_arg = false;
7701 bool template_parm_flag = false;
7702 bool constexpr_p = declspecs->specs[(int) ds_constexpr];
7703 const char *errmsg;
7705 signed_p = declspecs->specs[(int)ds_signed];
7706 unsigned_p = declspecs->specs[(int)ds_unsigned];
7707 short_p = declspecs->specs[(int)ds_short];
7708 long_p = declspecs->specs[(int)ds_long];
7709 longlong = declspecs->specs[(int)ds_long] >= 2;
7710 thread_p = declspecs->specs[(int)ds_thread];
7712 if (decl_context == FUNCDEF)
7713 funcdef_flag = true, decl_context = NORMAL;
7714 else if (decl_context == MEMFUNCDEF)
7715 funcdef_flag = true, decl_context = FIELD;
7716 else if (decl_context == BITFIELD)
7717 bitfield = 1, decl_context = FIELD;
7718 else if (decl_context == TEMPLATE_TYPE_ARG)
7719 template_type_arg = true, decl_context = TYPENAME;
7720 else if (decl_context == TPARM)
7721 template_parm_flag = true, decl_context = PARM;
7723 if (initialized > 1)
7724 funcdef_flag = true;
7726 /* Look inside a declarator for the name being declared
7727 and get it as a string, for an error message. */
7728 for (id_declarator = declarator;
7729 id_declarator;
7730 id_declarator = id_declarator->declarator)
7732 if (id_declarator->kind != cdk_id)
7733 innermost_code = id_declarator->kind;
7735 switch (id_declarator->kind)
7737 case cdk_function:
7738 if (id_declarator->declarator
7739 && id_declarator->declarator->kind == cdk_id)
7741 sfk = id_declarator->declarator->u.id.sfk;
7742 if (sfk == sfk_destructor)
7743 flags = DTOR_FLAG;
7745 break;
7747 case cdk_id:
7749 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7750 tree decl = id_declarator->u.id.unqualified_name;
7751 if (!decl)
7752 break;
7753 if (qualifying_scope)
7755 if (at_function_scope_p ())
7757 /* [dcl.meaning]
7759 A declarator-id shall not be qualified except
7760 for ...
7762 None of the cases are permitted in block
7763 scope. */
7764 if (qualifying_scope == global_namespace)
7765 error ("invalid use of qualified-name %<::%D%>",
7766 decl);
7767 else if (TYPE_P (qualifying_scope))
7768 error ("invalid use of qualified-name %<%T::%D%>",
7769 qualifying_scope, decl);
7770 else
7771 error ("invalid use of qualified-name %<%D::%D%>",
7772 qualifying_scope, decl);
7773 return error_mark_node;
7775 else if (TYPE_P (qualifying_scope))
7777 ctype = qualifying_scope;
7778 if (innermost_code != cdk_function
7779 && current_class_type
7780 && !UNIQUELY_DERIVED_FROM_P (ctype,
7781 current_class_type))
7783 error ("type %qT is not derived from type %qT",
7784 ctype, current_class_type);
7785 return error_mark_node;
7788 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7789 in_namespace = qualifying_scope;
7791 switch (TREE_CODE (decl))
7793 case BIT_NOT_EXPR:
7795 tree type;
7797 if (innermost_code != cdk_function)
7799 error ("declaration of %qD as non-function", decl);
7800 return error_mark_node;
7802 else if (!qualifying_scope
7803 && !(current_class_type && at_class_scope_p ()))
7805 error ("declaration of %qD as non-member", decl);
7806 return error_mark_node;
7809 type = TREE_OPERAND (decl, 0);
7810 if (TYPE_P (type))
7811 type = constructor_name (type);
7812 name = identifier_to_locale (IDENTIFIER_POINTER (type));
7813 dname = decl;
7815 break;
7817 case TEMPLATE_ID_EXPR:
7819 tree fns = TREE_OPERAND (decl, 0);
7821 dname = fns;
7822 if (TREE_CODE (dname) != IDENTIFIER_NODE)
7824 gcc_assert (is_overloaded_fn (dname));
7825 dname = DECL_NAME (get_first_fn (dname));
7828 /* Fall through. */
7830 case IDENTIFIER_NODE:
7831 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7832 dname = decl;
7834 if (C_IS_RESERVED_WORD (dname))
7836 error ("declarator-id missing; using reserved word %qD",
7837 dname);
7838 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7840 else if (!IDENTIFIER_TYPENAME_P (dname))
7841 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7842 else
7844 gcc_assert (flags == NO_SPECIAL);
7845 flags = TYPENAME_FLAG;
7846 ctor_return_type = TREE_TYPE (dname);
7847 sfk = sfk_conversion;
7848 if (is_typename_at_global_scope (dname))
7849 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7850 else
7851 name = "<invalid operator>";
7853 break;
7855 default:
7856 gcc_unreachable ();
7858 break;
7861 case cdk_array:
7862 case cdk_pointer:
7863 case cdk_reference:
7864 case cdk_ptrmem:
7865 break;
7867 case cdk_error:
7868 return error_mark_node;
7870 default:
7871 gcc_unreachable ();
7873 if (id_declarator->kind == cdk_id)
7874 break;
7877 /* [dcl.fct.edf]
7879 The declarator in a function-definition shall have the form
7880 D1 ( parameter-declaration-clause) ... */
7881 if (funcdef_flag && innermost_code != cdk_function)
7883 error ("function definition does not declare parameters");
7884 return error_mark_node;
7887 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7888 && innermost_code != cdk_function
7889 && ! (ctype && !declspecs->any_specifiers_p))
7891 error ("declaration of %qD as non-function", dname);
7892 return error_mark_node;
7895 /* Anything declared one level down from the top level
7896 must be one of the parameters of a function
7897 (because the body is at least two levels down). */
7899 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7900 by not allowing C++ class definitions to specify their parameters
7901 with xdecls (must be spec.d in the parmlist).
7903 Since we now wait to push a class scope until we are sure that
7904 we are in a legitimate method context, we must set oldcname
7905 explicitly (since current_class_name is not yet alive).
7907 We also want to avoid calling this a PARM if it is in a namespace. */
7909 if (decl_context == NORMAL && !toplevel_bindings_p ())
7911 struct cp_binding_level *b = current_binding_level;
7912 current_binding_level = b->level_chain;
7913 if (current_binding_level != 0 && toplevel_bindings_p ())
7914 decl_context = PARM;
7915 current_binding_level = b;
7918 if (name == NULL)
7919 name = decl_context == PARM ? "parameter" : "type name";
7921 /* If there were multiple types specified in the decl-specifier-seq,
7922 issue an error message. */
7923 if (declspecs->multiple_types_p)
7925 error ("two or more data types in declaration of %qs", name);
7926 return error_mark_node;
7929 if (declspecs->conflicting_specifiers_p)
7931 error ("conflicting specifiers in declaration of %qs", name);
7932 return error_mark_node;
7935 /* Extract the basic type from the decl-specifier-seq. */
7936 type = declspecs->type;
7937 if (type == error_mark_node)
7939 type = NULL_TREE;
7940 type_was_error_mark_node = true;
7942 /* If the entire declaration is itself tagged as deprecated then
7943 suppress reports of deprecated items. */
7944 if (type && TREE_DEPRECATED (type)
7945 && deprecated_state != DEPRECATED_SUPPRESS)
7946 warn_deprecated_use (type, NULL_TREE);
7947 if (type && TREE_CODE (type) == TYPE_DECL)
7949 typedef_decl = type;
7950 type = TREE_TYPE (typedef_decl);
7951 if (TREE_DEPRECATED (type)
7952 && DECL_ARTIFICIAL (typedef_decl)
7953 && deprecated_state != DEPRECATED_SUPPRESS)
7954 warn_deprecated_use (type, NULL_TREE);
7956 /* No type at all: default to `int', and set DEFAULTED_INT
7957 because it was not a user-defined typedef. */
7958 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7960 /* These imply 'int'. */
7961 type = integer_type_node;
7962 defaulted_int = 1;
7964 /* Gather flags. */
7965 explicit_int = declspecs->explicit_int_p;
7966 explicit_char = declspecs->explicit_char_p;
7968 #if 0
7969 /* See the code below that used this. */
7970 if (typedef_decl)
7971 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7972 #endif
7973 typedef_type = type;
7976 if (sfk != sfk_conversion)
7977 ctor_return_type = ctype;
7979 if (sfk != sfk_none)
7980 type = check_special_function_return_type (sfk, type,
7981 ctor_return_type);
7982 else if (type == NULL_TREE)
7984 int is_main;
7986 explicit_int = -1;
7988 /* We handle `main' specially here, because 'main () { }' is so
7989 common. With no options, it is allowed. With -Wreturn-type,
7990 it is a warning. It is only an error with -pedantic-errors. */
7991 is_main = (funcdef_flag
7992 && dname && MAIN_NAME_P (dname)
7993 && ctype == NULL_TREE
7994 && in_namespace == NULL_TREE
7995 && current_namespace == global_namespace);
7997 if (type_was_error_mark_node)
7998 /* We've already issued an error, don't complain more. */;
7999 else if (in_system_header || flag_ms_extensions)
8000 /* Allow it, sigh. */;
8001 else if (! is_main)
8002 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8003 else if (pedantic)
8004 pedwarn (input_location, OPT_pedantic,
8005 "ISO C++ forbids declaration of %qs with no type", name);
8006 else
8007 warning (OPT_Wreturn_type,
8008 "ISO C++ forbids declaration of %qs with no type", name);
8010 type = integer_type_node;
8013 ctype = NULL_TREE;
8015 /* Now process the modifiers that were specified
8016 and check for invalid combinations. */
8018 /* Long double is a special combination. */
8019 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8021 long_p = false;
8022 type = build_qualified_type (long_double_type_node,
8023 cp_type_quals (type));
8026 /* Check all other uses of type modifiers. */
8028 if (unsigned_p || signed_p || long_p || short_p)
8030 int ok = 0;
8032 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8033 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8034 else if (signed_p && unsigned_p)
8035 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8036 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8037 error ("%<long long%> invalid for %qs", name);
8038 else if (long_p && TREE_CODE (type) == REAL_TYPE)
8039 error ("%<long%> invalid for %qs", name);
8040 else if (short_p && TREE_CODE (type) == REAL_TYPE)
8041 error ("%<short%> invalid for %qs", name);
8042 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8043 error ("%<long%> or %<short%> invalid for %qs", name);
8044 else if ((long_p || short_p) && explicit_char)
8045 error ("%<long%> or %<short%> specified with char for %qs", name);
8046 else if (long_p && short_p)
8047 error ("%<long%> and %<short%> specified together for %qs", name);
8048 else if (type == char16_type_node || type == char32_type_node)
8050 if (signed_p || unsigned_p)
8051 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8052 else if (short_p || long_p)
8053 error ("%<short%> or %<long%> invalid for %qs", name);
8055 else
8057 ok = 1;
8058 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8060 pedwarn (input_location, OPT_pedantic,
8061 "long, short, signed or unsigned used invalidly for %qs",
8062 name);
8063 if (flag_pedantic_errors)
8064 ok = 0;
8068 /* Discard the type modifiers if they are invalid. */
8069 if (! ok)
8071 unsigned_p = false;
8072 signed_p = false;
8073 long_p = false;
8074 short_p = false;
8075 longlong = 0;
8079 /* Decide whether an integer type is signed or not.
8080 Optionally treat bitfields as signed by default. */
8081 if (unsigned_p
8082 /* [class.bit]
8084 It is implementation-defined whether a plain (neither
8085 explicitly signed or unsigned) char, short, int, or long
8086 bit-field is signed or unsigned.
8088 Naturally, we extend this to long long as well. Note that
8089 this does not include wchar_t. */
8090 || (bitfield && !flag_signed_bitfields
8091 && !signed_p
8092 /* A typedef for plain `int' without `signed' can be
8093 controlled just like plain `int', but a typedef for
8094 `signed int' cannot be so controlled. */
8095 && !(typedef_decl
8096 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8097 && TREE_CODE (type) == INTEGER_TYPE
8098 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8100 if (longlong)
8101 type = long_long_unsigned_type_node;
8102 else if (long_p)
8103 type = long_unsigned_type_node;
8104 else if (short_p)
8105 type = short_unsigned_type_node;
8106 else if (type == char_type_node)
8107 type = unsigned_char_type_node;
8108 else if (typedef_decl)
8109 type = unsigned_type_for (type);
8110 else
8111 type = unsigned_type_node;
8113 else if (signed_p && type == char_type_node)
8114 type = signed_char_type_node;
8115 else if (longlong)
8116 type = long_long_integer_type_node;
8117 else if (long_p)
8118 type = long_integer_type_node;
8119 else if (short_p)
8120 type = short_integer_type_node;
8122 if (declspecs->specs[(int)ds_complex])
8124 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8125 error ("complex invalid for %qs", name);
8126 /* If we just have "complex", it is equivalent to
8127 "complex double", but if any modifiers at all are specified it is
8128 the complex form of TYPE. E.g, "complex short" is
8129 "complex short int". */
8131 else if (defaulted_int && ! longlong
8132 && ! (long_p || short_p || signed_p || unsigned_p))
8133 type = complex_double_type_node;
8134 else if (type == integer_type_node)
8135 type = complex_integer_type_node;
8136 else if (type == float_type_node)
8137 type = complex_float_type_node;
8138 else if (type == double_type_node)
8139 type = complex_double_type_node;
8140 else if (type == long_double_type_node)
8141 type = complex_long_double_type_node;
8142 else
8143 type = build_complex_type (type);
8146 type_quals = TYPE_UNQUALIFIED;
8147 if (declspecs->specs[(int)ds_const])
8148 type_quals |= TYPE_QUAL_CONST;
8149 /* A `constexpr' specifier used in an object declaration declares
8150 the object as `const'. */
8151 if (constexpr_p)
8153 if (innermost_code == cdk_function)
8155 else if (declspecs->specs[(int)ds_const] != 0)
8156 error ("both %<const%> and %<constexpr%> cannot be used here");
8157 else
8158 type_quals |= TYPE_QUAL_CONST;
8160 if (declspecs->specs[(int)ds_volatile])
8161 type_quals |= TYPE_QUAL_VOLATILE;
8162 if (declspecs->specs[(int)ds_restrict])
8163 type_quals |= TYPE_QUAL_RESTRICT;
8164 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8165 error ("qualifiers are not allowed on declaration of %<operator %T%>",
8166 ctor_return_type);
8168 if (TREE_CODE (type) == FUNCTION_TYPE
8169 && type_quals != TYPE_UNQUALIFIED)
8171 /* This was an error in C++98 (cv-qualifiers cannot be added to
8172 a function type), but DR 295 makes the code well-formed by
8173 dropping the extra qualifiers. */
8174 if (pedantic && cxx_dialect == cxx98)
8176 tree bad_type = build_qualified_type (type, type_quals);
8177 pedwarn (input_location, OPT_pedantic,
8178 "ignoring %qV qualifiers added to function type %qT",
8179 bad_type, type);
8181 type_quals = TYPE_UNQUALIFIED;
8183 type_quals |= cp_type_quals (type);
8184 type = cp_build_qualified_type_real
8185 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8186 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8187 /* We might have ignored or rejected some of the qualifiers. */
8188 type_quals = cp_type_quals (type);
8190 staticp = 0;
8191 inlinep = !! declspecs->specs[(int)ds_inline];
8192 virtualp = !! declspecs->specs[(int)ds_virtual];
8193 explicitp = !! declspecs->specs[(int)ds_explicit];
8195 storage_class = declspecs->storage_class;
8196 if (storage_class == sc_static)
8197 staticp = 1 + (decl_context == FIELD);
8199 if (virtualp && staticp == 2)
8201 error ("member %qD cannot be declared both virtual and static", dname);
8202 storage_class = sc_none;
8203 staticp = 0;
8205 friendp = !! declspecs->specs[(int)ds_friend];
8207 if (dependent_name && !friendp)
8209 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8210 return error_mark_node;
8213 /* Issue errors about use of storage classes for parameters. */
8214 if (decl_context == PARM)
8216 if (declspecs->specs[(int)ds_typedef])
8218 error ("typedef declaration invalid in parameter declaration");
8219 return error_mark_node;
8221 else if (template_parm_flag && storage_class != sc_none)
8223 error ("storage class specified for template parameter %qs", name);
8224 return error_mark_node;
8226 else if (storage_class == sc_static
8227 || storage_class == sc_extern
8228 || thread_p)
8229 error ("storage class specifiers invalid in parameter declarations");
8231 if (type_uses_auto (type))
8233 error ("parameter declared %<auto%>");
8234 type = error_mark_node;
8237 /* Function parameters cannot be constexpr. If we saw one, moan
8238 and pretend it wasn't there. */
8239 if (constexpr_p)
8241 error ("a parameter cannot be declared %<constexpr%>");
8242 constexpr_p = 0;
8246 /* Give error if `virtual' is used outside of class declaration. */
8247 if (virtualp
8248 && (current_class_name == NULL_TREE || decl_context != FIELD))
8250 error ("%<virtual%> outside class declaration");
8251 virtualp = 0;
8254 /* Static anonymous unions are dealt with here. */
8255 if (staticp && decl_context == TYPENAME
8256 && declspecs->type
8257 && ANON_AGGR_TYPE_P (declspecs->type))
8258 decl_context = FIELD;
8260 /* Warn about storage classes that are invalid for certain
8261 kinds of declarations (parameters, typenames, etc.). */
8262 if (thread_p
8263 && ((storage_class
8264 && storage_class != sc_extern
8265 && storage_class != sc_static)
8266 || declspecs->specs[(int)ds_typedef]))
8268 error ("multiple storage classes in declaration of %qs", name);
8269 thread_p = false;
8271 if (decl_context != NORMAL
8272 && ((storage_class != sc_none
8273 && storage_class != sc_mutable)
8274 || thread_p))
8276 if ((decl_context == PARM || decl_context == CATCHPARM)
8277 && (storage_class == sc_register
8278 || storage_class == sc_auto))
8280 else if (declspecs->specs[(int)ds_typedef])
8282 else if (decl_context == FIELD
8283 /* C++ allows static class elements. */
8284 && storage_class == sc_static)
8285 /* C++ also allows inlines and signed and unsigned elements,
8286 but in those cases we don't come in here. */
8288 else
8290 if (decl_context == FIELD)
8291 error ("storage class specified for %qs", name);
8292 else
8294 if (decl_context == PARM || decl_context == CATCHPARM)
8295 error ("storage class specified for parameter %qs", name);
8296 else
8297 error ("storage class specified for typename");
8299 if (storage_class == sc_register
8300 || storage_class == sc_auto
8301 || storage_class == sc_extern
8302 || thread_p)
8303 storage_class = sc_none;
8306 else if (storage_class == sc_extern && funcdef_flag
8307 && ! toplevel_bindings_p ())
8308 error ("nested function %qs declared %<extern%>", name);
8309 else if (toplevel_bindings_p ())
8311 if (storage_class == sc_auto)
8312 error ("top-level declaration of %qs specifies %<auto%>", name);
8314 else if (thread_p
8315 && storage_class != sc_extern
8316 && storage_class != sc_static)
8318 error ("function-scope %qs implicitly auto and declared %<__thread%>",
8319 name);
8320 thread_p = false;
8323 if (storage_class && friendp)
8325 error ("storage class specifiers invalid in friend function declarations");
8326 storage_class = sc_none;
8327 staticp = 0;
8330 if (!id_declarator)
8331 unqualified_id = NULL_TREE;
8332 else
8334 unqualified_id = id_declarator->u.id.unqualified_name;
8335 switch (TREE_CODE (unqualified_id))
8337 case BIT_NOT_EXPR:
8338 unqualified_id = TREE_OPERAND (unqualified_id, 0);
8339 if (TYPE_P (unqualified_id))
8340 unqualified_id = constructor_name (unqualified_id);
8341 break;
8343 case IDENTIFIER_NODE:
8344 case TEMPLATE_ID_EXPR:
8345 break;
8347 default:
8348 gcc_unreachable ();
8352 /* Determine the type of the entity declared by recurring on the
8353 declarator. */
8354 for (; declarator; declarator = declarator->declarator)
8356 const cp_declarator *inner_declarator;
8357 tree attrs;
8359 if (type == error_mark_node)
8360 return error_mark_node;
8362 attrs = declarator->attributes;
8363 if (attrs)
8365 int attr_flags;
8367 attr_flags = 0;
8368 if (declarator == NULL || declarator->kind == cdk_id)
8369 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8370 if (declarator->kind == cdk_function)
8371 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8372 if (declarator->kind == cdk_array)
8373 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8374 returned_attrs = decl_attributes (&type,
8375 chainon (returned_attrs, attrs),
8376 attr_flags);
8379 if (declarator->kind == cdk_id)
8380 break;
8382 inner_declarator = declarator->declarator;
8384 switch (declarator->kind)
8386 case cdk_array:
8387 type = create_array_type_for_decl (dname, type,
8388 declarator->u.array.bounds);
8389 break;
8391 case cdk_function:
8393 tree arg_types;
8394 int funcdecl_p;
8396 /* Declaring a function type.
8397 Make sure we have a valid type for the function to return. */
8399 if (type_quals != TYPE_UNQUALIFIED)
8401 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8402 warning (OPT_Wignored_qualifiers,
8403 "type qualifiers ignored on function return type");
8404 /* We now know that the TYPE_QUALS don't apply to the
8405 decl, but to its return type. */
8406 type_quals = TYPE_UNQUALIFIED;
8408 errmsg = targetm.invalid_return_type (type);
8409 if (errmsg)
8411 error (errmsg);
8412 type = integer_type_node;
8415 /* Error about some types functions can't return. */
8417 if (TREE_CODE (type) == FUNCTION_TYPE)
8419 error ("%qs declared as function returning a function", name);
8420 return error_mark_node;
8422 if (TREE_CODE (type) == ARRAY_TYPE)
8424 error ("%qs declared as function returning an array", name);
8425 return error_mark_node;
8428 /* Pick up type qualifiers which should be applied to `this'. */
8429 memfn_quals = declarator->u.function.qualifiers;
8431 /* Pick up the exception specifications. */
8432 raises = declarator->u.function.exception_specification;
8434 /* Say it's a definition only for the CALL_EXPR
8435 closest to the identifier. */
8436 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8438 /* Handle a late-specified return type. */
8439 if (funcdecl_p)
8441 if (type_uses_auto (type))
8443 if (!declarator->u.function.late_return_type)
8445 error ("%qs function uses %<auto%> type specifier without"
8446 " late return type", name);
8447 return error_mark_node;
8449 else if (!is_auto (type))
8451 error ("%qs function with late return type has"
8452 " %qT as its type rather than plain %<auto%>",
8453 name, type);
8454 return error_mark_node;
8457 else if (declarator->u.function.late_return_type)
8459 error ("%qs function with late return type not declared"
8460 " with %<auto%> type specifier", name);
8461 return error_mark_node;
8464 type = splice_late_return_type
8465 (type, declarator->u.function.late_return_type);
8466 if (type == error_mark_node)
8467 return error_mark_node;
8469 if (ctype == NULL_TREE
8470 && decl_context == FIELD
8471 && funcdecl_p
8472 && (friendp == 0 || dname == current_class_name))
8473 ctype = current_class_type;
8475 if (ctype && (sfk == sfk_constructor
8476 || sfk == sfk_destructor))
8478 /* We are within a class's scope. If our declarator name
8479 is the same as the class name, and we are defining
8480 a function, then it is a constructor/destructor, and
8481 therefore returns a void type. */
8483 /* ISO C++ 12.4/2. A destructor may not be declared
8484 const or volatile. A destructor may not be
8485 static.
8487 ISO C++ 12.1. A constructor may not be declared
8488 const or volatile. A constructor may not be
8489 virtual. A constructor may not be static. */
8490 if (staticp == 2)
8491 error ((flags == DTOR_FLAG)
8492 ? "destructor cannot be static member function"
8493 : "constructor cannot be static member function");
8494 if (memfn_quals)
8496 error ((flags == DTOR_FLAG)
8497 ? "destructors may not be cv-qualified"
8498 : "constructors may not be cv-qualified");
8499 memfn_quals = TYPE_UNQUALIFIED;
8502 if (decl_context == FIELD
8503 && !member_function_or_else (ctype,
8504 current_class_type,
8505 flags))
8506 return error_mark_node;
8508 if (flags != DTOR_FLAG)
8510 /* It's a constructor. */
8511 if (explicitp == 1)
8512 explicitp = 2;
8513 if (virtualp)
8515 permerror (input_location, "constructors cannot be declared virtual");
8516 virtualp = 0;
8518 if (decl_context == FIELD
8519 && sfk != sfk_constructor)
8520 return error_mark_node;
8522 if (decl_context == FIELD)
8523 staticp = 0;
8525 else if (friendp)
8527 if (initialized)
8528 error ("can't initialize friend function %qs", name);
8529 if (virtualp)
8531 /* Cannot be both friend and virtual. */
8532 error ("virtual functions cannot be friends");
8533 friendp = 0;
8535 if (decl_context == NORMAL)
8536 error ("friend declaration not in class definition");
8537 if (current_function_decl && funcdef_flag)
8538 error ("can't define friend function %qs in a local "
8539 "class definition",
8540 name);
8542 else if (ctype && sfk == sfk_conversion)
8544 if (explicitp == 1)
8546 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
8547 explicitp = 2;
8551 /* It is not allowed to use `constexpr' in a function
8552 declaration that is not a definition.
8553 That is too strict, though. */
8554 if (constexpr_p && !funcdef_flag)
8556 error ("the %<constexpr%> specifier cannot be used in "
8557 "a function declaration that is not a definition");
8558 constexpr_p = false;
8561 /* A constexpr non-static member function is implicitly const. */
8562 if (constexpr_p && decl_context == FIELD && staticp == 0
8563 && sfk != sfk_constructor && sfk != sfk_destructor)
8564 memfn_quals |= TYPE_QUAL_CONST;
8566 arg_types = grokparms (declarator->u.function.parameters,
8567 &parms);
8569 if (inner_declarator
8570 && inner_declarator->kind == cdk_id
8571 && inner_declarator->u.id.sfk == sfk_destructor
8572 && arg_types != void_list_node)
8574 error ("destructors may not have parameters");
8575 arg_types = void_list_node;
8576 parms = NULL_TREE;
8579 type = build_function_type (type, arg_types);
8581 break;
8583 case cdk_pointer:
8584 case cdk_reference:
8585 case cdk_ptrmem:
8586 /* Filter out pointers-to-references and references-to-references.
8587 We can get these if a TYPE_DECL is used. */
8589 if (TREE_CODE (type) == REFERENCE_TYPE)
8591 if (declarator->kind != cdk_reference)
8593 error ("cannot declare pointer to %q#T", type);
8594 type = TREE_TYPE (type);
8597 /* In C++0x, we allow reference to reference declarations
8598 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8599 and template type arguments [14.3.1/4 temp.arg.type]. The
8600 check for direct reference to reference declarations, which
8601 are still forbidden, occurs below. Reasoning behind the change
8602 can be found in DR106, DR540, and the rvalue reference
8603 proposals. */
8604 else if (cxx_dialect == cxx98)
8606 error ("cannot declare reference to %q#T", type);
8607 type = TREE_TYPE (type);
8610 else if (VOID_TYPE_P (type))
8612 if (declarator->kind == cdk_reference)
8613 error ("cannot declare reference to %q#T", type);
8614 else if (declarator->kind == cdk_ptrmem)
8615 error ("cannot declare pointer to %q#T member", type);
8618 /* We now know that the TYPE_QUALS don't apply to the decl,
8619 but to the target of the pointer. */
8620 type_quals = TYPE_UNQUALIFIED;
8622 if (declarator->kind == cdk_ptrmem
8623 && (TREE_CODE (type) == FUNCTION_TYPE
8624 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8626 memfn_quals |= cp_type_quals (type);
8627 type = build_memfn_type (type,
8628 declarator->u.pointer.class_type,
8629 memfn_quals);
8630 memfn_quals = TYPE_UNQUALIFIED;
8633 if (TREE_CODE (type) == FUNCTION_TYPE
8634 && cp_type_quals (type) != TYPE_UNQUALIFIED)
8635 error (declarator->kind == cdk_reference
8636 ? G_("cannot declare reference to qualified function type %qT")
8637 : G_("cannot declare pointer to qualified function type %qT"),
8638 type);
8640 if (declarator->kind == cdk_reference)
8642 /* In C++0x, the type we are creating a reference to might be
8643 a typedef which is itself a reference type. In that case,
8644 we follow the reference collapsing rules in
8645 [7.1.3/8 dcl.typedef] to create the final reference type:
8647 "If a typedef TD names a type that is a reference to a type
8648 T, an attempt to create the type 'lvalue reference to cv TD'
8649 creates the type 'lvalue reference to T,' while an attempt
8650 to create the type "rvalue reference to cv TD' creates the
8651 type TD."
8653 if (!VOID_TYPE_P (type))
8654 type = cp_build_reference_type
8655 ((TREE_CODE (type) == REFERENCE_TYPE
8656 ? TREE_TYPE (type) : type),
8657 (declarator->u.reference.rvalue_ref
8658 && (TREE_CODE(type) != REFERENCE_TYPE
8659 || TYPE_REF_IS_RVALUE (type))));
8661 /* In C++0x, we need this check for direct reference to
8662 reference declarations, which are forbidden by
8663 [8.3.2/5 dcl.ref]. Reference to reference declarations
8664 are only allowed indirectly through typedefs and template
8665 type arguments. Example:
8667 void foo(int & &); // invalid ref-to-ref decl
8669 typedef int & int_ref;
8670 void foo(int_ref &); // valid ref-to-ref decl
8672 if (inner_declarator && inner_declarator->kind == cdk_reference)
8673 error ("cannot declare reference to %q#T, which is not "
8674 "a typedef or a template type argument", type);
8676 else if (TREE_CODE (type) == METHOD_TYPE)
8677 type = build_ptrmemfunc_type (build_pointer_type (type));
8678 else if (declarator->kind == cdk_ptrmem)
8680 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8681 != NAMESPACE_DECL);
8682 if (declarator->u.pointer.class_type == error_mark_node)
8683 /* We will already have complained. */
8684 type = error_mark_node;
8685 else
8686 type = build_ptrmem_type (declarator->u.pointer.class_type,
8687 type);
8689 else
8690 type = build_pointer_type (type);
8692 /* Process a list of type modifier keywords (such as
8693 const or volatile) that were given inside the `*' or `&'. */
8695 if (declarator->u.pointer.qualifiers)
8697 type
8698 = cp_build_qualified_type (type,
8699 declarator->u.pointer.qualifiers);
8700 type_quals = cp_type_quals (type);
8702 ctype = NULL_TREE;
8703 break;
8705 case cdk_error:
8706 break;
8708 default:
8709 gcc_unreachable ();
8713 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8714 && TREE_CODE (type) != FUNCTION_TYPE
8715 && TREE_CODE (type) != METHOD_TYPE)
8717 error ("template-id %qD used as a declarator",
8718 unqualified_id);
8719 unqualified_id = dname;
8722 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8723 qualified with a class-name, turn it into a METHOD_TYPE, unless
8724 we know that the function is static. We take advantage of this
8725 opportunity to do other processing that pertains to entities
8726 explicitly declared to be class members. Note that if DECLARATOR
8727 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8728 would not have exited the loop above. */
8729 if (declarator
8730 && declarator->u.id.qualifying_scope
8731 && TYPE_P (declarator->u.id.qualifying_scope))
8733 tree t;
8735 ctype = declarator->u.id.qualifying_scope;
8736 ctype = TYPE_MAIN_VARIANT (ctype);
8737 t = ctype;
8738 while (t != NULL_TREE && CLASS_TYPE_P (t))
8740 /* You're supposed to have one `template <...>' for every
8741 template class, but you don't need one for a full
8742 specialization. For example:
8744 template <class T> struct S{};
8745 template <> struct S<int> { void f(); };
8746 void S<int>::f () {}
8748 is correct; there shouldn't be a `template <>' for the
8749 definition of `S<int>::f'. */
8750 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8751 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8752 /* T is an explicit (not partial) specialization. All
8753 containing classes must therefore also be explicitly
8754 specialized. */
8755 break;
8756 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8757 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8758 template_count += 1;
8760 t = TYPE_MAIN_DECL (t);
8761 t = DECL_CONTEXT (t);
8764 if (ctype == current_class_type)
8766 if (friendp)
8768 permerror (input_location, "member functions are implicitly friends of their class");
8769 friendp = 0;
8771 else
8772 permerror (declarator->id_loc,
8773 "extra qualification %<%T::%> on member %qs",
8774 ctype, name);
8776 else if (/* If the qualifying type is already complete, then we
8777 can skip the following checks. */
8778 !COMPLETE_TYPE_P (ctype)
8779 && (/* If the function is being defined, then
8780 qualifying type must certainly be complete. */
8781 funcdef_flag
8782 /* A friend declaration of "T::f" is OK, even if
8783 "T" is a template parameter. But, if this
8784 function is not a friend, the qualifying type
8785 must be a class. */
8786 || (!friendp && !CLASS_TYPE_P (ctype))
8787 /* For a declaration, the type need not be
8788 complete, if either it is dependent (since there
8789 is no meaningful definition of complete in that
8790 case) or the qualifying class is currently being
8791 defined. */
8792 || !(dependent_type_p (ctype)
8793 || currently_open_class (ctype)))
8794 /* Check that the qualifying type is complete. */
8795 && !complete_type_or_else (ctype, NULL_TREE))
8796 return error_mark_node;
8797 else if (TREE_CODE (type) == FUNCTION_TYPE)
8799 tree sname = declarator->u.id.unqualified_name;
8801 if (current_class_type
8802 && (!friendp || funcdef_flag))
8804 error (funcdef_flag
8805 ? "cannot define member function %<%T::%s%> within %<%T%>"
8806 : "cannot declare member function %<%T::%s%> within %<%T%>",
8807 ctype, name, current_class_type);
8808 return error_mark_node;
8811 /* It is not permitted to define a member function outside ist
8812 membership class as `constexpr'. */
8813 if (constexpr_p)
8814 error ("a constexpr function cannot be defined "
8815 "outside of its class");
8817 if (TREE_CODE (sname) == IDENTIFIER_NODE
8818 && NEW_DELETE_OPNAME_P (sname))
8819 /* Overloaded operator new and operator delete
8820 are always static functions. */
8822 else
8823 type = build_memfn_type (type, ctype, memfn_quals);
8825 else if (declspecs->specs[(int)ds_typedef]
8826 && current_class_type)
8828 error ("cannot declare member %<%T::%s%> within %qT",
8829 ctype, name, current_class_type);
8830 return error_mark_node;
8834 /* Now TYPE has the actual type. */
8836 if (returned_attrs)
8838 if (attrlist)
8839 *attrlist = chainon (returned_attrs, *attrlist);
8840 else
8841 attrlist = &returned_attrs;
8844 /* Handle parameter packs. */
8845 if (parameter_pack_p)
8847 if (decl_context == PARM)
8848 /* Turn the type into a pack expansion.*/
8849 type = make_pack_expansion (type);
8850 else
8851 error ("non-parameter %qs cannot be a parameter pack", name);
8854 /* Did array size calculations overflow? */
8856 if (TREE_CODE (type) == ARRAY_TYPE
8857 && COMPLETE_TYPE_P (type)
8858 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8859 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8861 error ("size of array %qs is too large", name);
8862 /* If we proceed with the array type as it is, we'll eventually
8863 crash in tree_low_cst(). */
8864 type = error_mark_node;
8867 if ((decl_context == FIELD || decl_context == PARM)
8868 && !processing_template_decl
8869 && variably_modified_type_p (type, NULL_TREE))
8871 if (decl_context == FIELD)
8872 error ("data member may not have variably modified type %qT", type);
8873 else
8874 error ("parameter may not have variably modified type %qT", type);
8875 type = error_mark_node;
8878 if (explicitp == 1 || (explicitp && friendp))
8880 /* [dcl.fct.spec] The explicit specifier shall only be used in
8881 declarations of constructors within a class definition. */
8882 error ("only declarations of constructors can be %<explicit%>");
8883 explicitp = 0;
8886 if (storage_class == sc_mutable)
8888 if (decl_context != FIELD || friendp)
8890 error ("non-member %qs cannot be declared %<mutable%>", name);
8891 storage_class = sc_none;
8893 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8895 error ("non-object member %qs cannot be declared %<mutable%>", name);
8896 storage_class = sc_none;
8898 else if (TREE_CODE (type) == FUNCTION_TYPE
8899 || TREE_CODE (type) == METHOD_TYPE)
8901 error ("function %qs cannot be declared %<mutable%>", name);
8902 storage_class = sc_none;
8904 else if (staticp)
8906 error ("static %qs cannot be declared %<mutable%>", name);
8907 storage_class = sc_none;
8909 else if (type_quals & TYPE_QUAL_CONST)
8911 error ("const %qs cannot be declared %<mutable%>", name);
8912 storage_class = sc_none;
8916 /* If this is declaring a typedef name, return a TYPE_DECL. */
8917 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8919 tree decl;
8921 /* Note that the grammar rejects storage classes
8922 in typenames, fields or parameters. */
8923 if (current_lang_name == lang_name_java)
8924 TYPE_FOR_JAVA (type) = 1;
8926 /* This declaration:
8928 typedef void f(int) const;
8930 declares a function type which is not a member of any
8931 particular class, but which is cv-qualified; for
8932 example "f S::*" declares a pointer to a const-qualified
8933 member function of S. We record the cv-qualification in the
8934 function type. */
8935 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8937 type = cp_build_qualified_type (type, memfn_quals);
8939 /* We have now dealt with these qualifiers. */
8940 memfn_quals = TYPE_UNQUALIFIED;
8943 if (decl_context == FIELD)
8944 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8945 else
8946 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
8947 if (id_declarator && declarator->u.id.qualifying_scope) {
8948 error_at (DECL_SOURCE_LOCATION (decl),
8949 "typedef name may not be a nested-name-specifier");
8950 TREE_TYPE (decl) = error_mark_node;
8953 if (decl_context != FIELD)
8955 if (!current_function_decl)
8956 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8957 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8958 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8959 (current_function_decl)))
8960 /* The TYPE_DECL is "abstract" because there will be
8961 clones of this constructor/destructor, and there will
8962 be copies of this TYPE_DECL generated in those
8963 clones. */
8964 DECL_ABSTRACT (decl) = 1;
8966 else if (constructor_name_p (unqualified_id, current_class_type))
8967 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8968 "as enclosing class",
8969 unqualified_id);
8971 /* If the user declares "typedef struct {...} foo" then the
8972 struct will have an anonymous name. Fill that name in now.
8973 Nothing can refer to it, so nothing needs know about the name
8974 change. */
8975 if (type != error_mark_node
8976 && unqualified_id
8977 && TYPE_NAME (type)
8978 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8979 && TYPE_ANONYMOUS_P (type)
8980 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8982 tree t;
8984 /* Replace the anonymous name with the real name everywhere. */
8985 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8987 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8989 debug_hooks->set_name (t, decl);
8990 TYPE_NAME (t) = decl;
8994 if (TYPE_LANG_SPECIFIC (type))
8995 TYPE_WAS_ANONYMOUS (type) = 1;
8997 /* If this is a typedef within a template class, the nested
8998 type is a (non-primary) template. The name for the
8999 template needs updating as well. */
9000 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9001 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9002 = TYPE_IDENTIFIER (type);
9004 /* Adjust linkage now that we aren't anonymous anymore. */
9005 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9006 determine_visibility (TYPE_MAIN_DECL (type));
9008 /* FIXME remangle member functions; member functions of a
9009 type with external linkage have external linkage. */
9012 if (signed_p
9013 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9014 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9016 bad_specifiers (decl, "type", virtualp,
9017 memfn_quals != TYPE_UNQUALIFIED,
9018 inlinep, friendp, raises != NULL_TREE);
9020 return decl;
9023 /* Detect the case of an array type of unspecified size
9024 which came, as such, direct from a typedef name.
9025 We must copy the type, so that the array's domain can be
9026 individually set by the object's initializer. */
9028 if (type && typedef_type
9029 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9030 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9031 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9033 /* Detect where we're using a typedef of function type to declare a
9034 function. PARMS will not be set, so we must create it now. */
9036 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9038 tree decls = NULL_TREE;
9039 tree args;
9041 for (args = TYPE_ARG_TYPES (type);
9042 args && args != void_list_node;
9043 args = TREE_CHAIN (args))
9045 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9047 TREE_CHAIN (decl) = decls;
9048 decls = decl;
9051 parms = nreverse (decls);
9053 if (decl_context != TYPENAME)
9055 /* A cv-qualifier-seq shall only be part of the function type
9056 for a non-static member function. [8.3.5/4 dcl.fct] */
9057 if (cp_type_quals (type) != TYPE_UNQUALIFIED
9058 && (current_class_type == NULL_TREE || staticp) )
9060 error (staticp
9061 ? G_("qualified function types cannot be used to "
9062 "declare static member functions")
9063 : G_("qualified function types cannot be used to "
9064 "declare free functions"));
9065 type = TYPE_MAIN_VARIANT (type);
9068 /* The qualifiers on the function type become the qualifiers on
9069 the non-static member function. */
9070 memfn_quals |= cp_type_quals (type);
9071 type_quals = TYPE_UNQUALIFIED;
9075 /* If this is a type name (such as, in a cast or sizeof),
9076 compute the type and return it now. */
9078 if (decl_context == TYPENAME)
9080 /* Note that the grammar rejects storage classes
9081 in typenames, fields or parameters. */
9082 if (type_quals != TYPE_UNQUALIFIED)
9083 type_quals = TYPE_UNQUALIFIED;
9085 /* Special case: "friend class foo" looks like a TYPENAME context. */
9086 if (friendp)
9088 if (type_quals != TYPE_UNQUALIFIED)
9090 error ("type qualifiers specified for friend class declaration");
9091 type_quals = TYPE_UNQUALIFIED;
9093 if (inlinep)
9095 error ("%<inline%> specified for friend class declaration");
9096 inlinep = 0;
9099 if (!current_aggr)
9101 /* Don't allow friend declaration without a class-key. */
9102 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9103 permerror (input_location, "template parameters cannot be friends");
9104 else if (TREE_CODE (type) == TYPENAME_TYPE)
9105 permerror (input_location, "friend declaration requires class-key, "
9106 "i.e. %<friend class %T::%D%>",
9107 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9108 else
9109 permerror (input_location, "friend declaration requires class-key, "
9110 "i.e. %<friend %#T%>",
9111 type);
9114 /* Only try to do this stuff if we didn't already give up. */
9115 if (type != integer_type_node)
9117 /* A friendly class? */
9118 if (current_class_type)
9119 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9120 /*complain=*/true);
9121 else
9122 error ("trying to make class %qT a friend of global scope",
9123 type);
9125 type = void_type_node;
9128 else if (memfn_quals)
9130 if (ctype == NULL_TREE
9131 && TREE_CODE (type) == METHOD_TYPE)
9132 ctype = TYPE_METHOD_BASETYPE (type);
9134 if (ctype)
9135 type = build_memfn_type (type, ctype, memfn_quals);
9136 /* Core issue #547: need to allow this in template type args. */
9137 else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9138 type = cp_build_qualified_type (type, memfn_quals);
9139 else
9140 error ("invalid qualifiers on non-member function type");
9143 return type;
9145 else if (unqualified_id == NULL_TREE && decl_context != PARM
9146 && decl_context != CATCHPARM
9147 && TREE_CODE (type) != UNION_TYPE
9148 && ! bitfield)
9150 error ("abstract declarator %qT used as declaration", type);
9151 return error_mark_node;
9154 /* Only functions may be declared using an operator-function-id. */
9155 if (unqualified_id
9156 && IDENTIFIER_OPNAME_P (unqualified_id)
9157 && TREE_CODE (type) != FUNCTION_TYPE
9158 && TREE_CODE (type) != METHOD_TYPE)
9160 error ("declaration of %qD as non-function", unqualified_id);
9161 return error_mark_node;
9164 /* We don't check parameter types here because we can emit a better
9165 error message later. */
9166 if (decl_context != PARM)
9168 type = check_var_type (unqualified_id, type);
9169 if (type == error_mark_node)
9170 return error_mark_node;
9173 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9174 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
9176 if (decl_context == PARM || decl_context == CATCHPARM)
9178 if (ctype || in_namespace)
9179 error ("cannot use %<::%> in parameter declaration");
9181 /* A parameter declared as an array of T is really a pointer to T.
9182 One declared as a function is really a pointer to a function.
9183 One declared as a member is really a pointer to member. */
9185 if (TREE_CODE (type) == ARRAY_TYPE)
9187 /* Transfer const-ness of array into that of type pointed to. */
9188 type = build_pointer_type (TREE_TYPE (type));
9189 type_quals = TYPE_UNQUALIFIED;
9191 else if (TREE_CODE (type) == FUNCTION_TYPE)
9192 type = build_pointer_type (type);
9196 tree decl;
9198 if (decl_context == PARM)
9200 decl = cp_build_parm_decl (unqualified_id, type);
9202 bad_specifiers (decl, "parameter", virtualp,
9203 memfn_quals != TYPE_UNQUALIFIED,
9204 inlinep, friendp, raises != NULL_TREE);
9206 else if (decl_context == FIELD)
9208 /* The C99 flexible array extension. */
9209 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9210 && TYPE_DOMAIN (type) == NULL_TREE)
9212 tree itype = compute_array_index_type (dname, integer_zero_node);
9213 type = build_cplus_array_type (TREE_TYPE (type), itype);
9216 if (type == error_mark_node)
9218 /* Happens when declaring arrays of sizes which
9219 are error_mark_node, for example. */
9220 decl = NULL_TREE;
9222 else if (in_namespace && !friendp)
9224 /* Something like struct S { int N::j; }; */
9225 error ("invalid use of %<::%>");
9226 return error_mark_node;
9228 else if (TREE_CODE (type) == FUNCTION_TYPE)
9230 int publicp = 0;
9231 tree function_context;
9233 if (friendp == 0)
9235 if (ctype == NULL_TREE)
9236 ctype = current_class_type;
9238 if (ctype == NULL_TREE)
9240 error ("can't make %qD into a method -- not in a class",
9241 unqualified_id);
9242 return error_mark_node;
9245 /* ``A union may [ ... ] not [ have ] virtual functions.''
9246 ARM 9.5 */
9247 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9249 error ("function %qD declared virtual inside a union",
9250 unqualified_id);
9251 return error_mark_node;
9254 if (NEW_DELETE_OPNAME_P (unqualified_id))
9256 if (virtualp)
9258 error ("%qD cannot be declared virtual, since it "
9259 "is always static",
9260 unqualified_id);
9261 virtualp = 0;
9264 else if (staticp < 2)
9265 type = build_memfn_type (type, ctype, memfn_quals);
9268 /* Check that the name used for a destructor makes sense. */
9269 if (sfk == sfk_destructor)
9271 tree uqname = id_declarator->u.id.unqualified_name;
9273 if (!ctype)
9275 gcc_assert (friendp);
9276 error ("expected qualified name in friend declaration "
9277 "for destructor %qD", uqname);
9278 return error_mark_node;
9281 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9283 error ("declaration of %qD as member of %qT",
9284 uqname, ctype);
9285 return error_mark_node;
9287 if (constexpr_p)
9288 error ("a destructor cannot be %<constexpr%>");
9290 else if (sfk == sfk_constructor && friendp)
9292 error ("expected qualified name in friend declaration "
9293 "for constructor %qD",
9294 id_declarator->u.id.unqualified_name);
9295 return error_mark_node;
9298 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
9299 function_context = (ctype != NULL_TREE) ?
9300 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9301 publicp = (! friendp || ! staticp)
9302 && function_context == NULL_TREE;
9303 decl = grokfndecl (ctype, type,
9304 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9305 ? unqualified_id : dname,
9306 parms,
9307 unqualified_id,
9308 virtualp, flags, memfn_quals, raises,
9309 friendp ? -1 : 0, friendp, publicp,
9310 inlinep || constexpr_p,
9311 sfk,
9312 funcdef_flag, template_count, in_namespace,
9313 attrlist, declarator->id_loc);
9314 if (decl == NULL_TREE)
9315 return error_mark_node;
9316 #if 0
9317 /* This clobbers the attrs stored in `decl' from `attrlist'. */
9318 /* The decl and setting of decl_attr is also turned off. */
9319 decl = build_decl_attribute_variant (decl, decl_attr);
9320 #endif
9322 /* [class.conv.ctor]
9324 A constructor declared without the function-specifier
9325 explicit that can be called with a single parameter
9326 specifies a conversion from the type of its first
9327 parameter to the type of its class. Such a constructor
9328 is called a converting constructor. */
9329 if (explicitp == 2)
9330 DECL_NONCONVERTING_P (decl) = 1;
9332 else if (TREE_CODE (type) == METHOD_TYPE)
9334 /* We only get here for friend declarations of
9335 members of other classes. */
9336 /* All method decls are public, so tell grokfndecl to set
9337 TREE_PUBLIC, also. */
9338 decl = grokfndecl (ctype, type,
9339 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9340 ? unqualified_id : dname,
9341 parms,
9342 unqualified_id,
9343 virtualp, flags, memfn_quals, raises,
9344 friendp ? -1 : 0, friendp, 1, 0, sfk,
9345 funcdef_flag, template_count, in_namespace,
9346 attrlist,
9347 declarator->id_loc);
9348 if (decl == NULL_TREE)
9349 return error_mark_node;
9351 else if (!staticp && !dependent_type_p (type)
9352 && !COMPLETE_TYPE_P (complete_type (type))
9353 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9355 if (unqualified_id)
9356 error ("field %qD has incomplete type", unqualified_id);
9357 else
9358 error ("name %qT has incomplete type", type);
9360 /* If we're instantiating a template, tell them which
9361 instantiation made the field's type be incomplete. */
9362 if (current_class_type
9363 && TYPE_NAME (current_class_type)
9364 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9365 && declspecs->type
9366 && declspecs->type == type)
9367 error (" in instantiation of template %qT",
9368 current_class_type);
9370 return error_mark_node;
9372 else
9374 if (friendp)
9376 error ("%qE is neither function nor member function; "
9377 "cannot be declared friend", unqualified_id);
9378 friendp = 0;
9380 decl = NULL_TREE;
9383 if (friendp)
9385 /* Friends are treated specially. */
9386 if (ctype == current_class_type)
9387 ; /* We already issued a permerror. */
9388 else if (decl && DECL_NAME (decl))
9390 if (template_class_depth (current_class_type) == 0)
9392 decl = check_explicit_specialization
9393 (unqualified_id, decl, template_count,
9394 2 * funcdef_flag + 4);
9395 if (decl == error_mark_node)
9396 return error_mark_node;
9399 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9400 decl = do_friend (ctype, unqualified_id, decl,
9401 *attrlist, flags,
9402 funcdef_flag);
9403 return decl;
9405 else
9406 return error_mark_node;
9409 /* Structure field. It may not be a function, except for C++. */
9411 if (decl == NULL_TREE)
9413 if (initialized)
9415 if (!staticp)
9417 /* An attempt is being made to initialize a non-static
9418 member. But, from [class.mem]:
9420 4 A member-declarator can contain a
9421 constant-initializer only if it declares a static
9422 member (_class.static_) of integral or enumeration
9423 type, see _class.static.data_.
9425 This used to be relatively common practice, but
9426 the rest of the compiler does not correctly
9427 handle the initialization unless the member is
9428 static so we make it static below. */
9429 permerror (input_location, "ISO C++ forbids initialization of member %qD",
9430 unqualified_id);
9431 permerror (input_location, "making %qD static", unqualified_id);
9432 staticp = 1;
9435 if (uses_template_parms (type))
9436 /* We'll check at instantiation time. */
9438 else if (check_static_variable_definition (unqualified_id,
9439 type))
9440 /* If we just return the declaration, crashes
9441 will sometimes occur. We therefore return
9442 void_type_node, as if this was a friend
9443 declaration, to cause callers to completely
9444 ignore this declaration. */
9445 return error_mark_node;
9448 if (staticp)
9450 /* C++ allows static class members. All other work
9451 for this is done by grokfield. */
9452 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9453 set_linkage_for_static_data_member (decl);
9454 /* Even if there is an in-class initialization, DECL
9455 is considered undefined until an out-of-class
9456 definition is provided. */
9457 DECL_EXTERNAL (decl) = 1;
9459 if (thread_p)
9460 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9462 else
9464 if (constexpr_p)
9465 error ("non-static data member %qE declared %<constexpr%>",
9466 unqualified_id);
9467 decl = build_decl (input_location,
9468 FIELD_DECL, unqualified_id, type);
9469 DECL_NONADDRESSABLE_P (decl) = bitfield;
9470 if (bitfield && !unqualified_id)
9471 TREE_NO_WARNING (decl) = 1;
9473 if (storage_class == sc_mutable)
9475 DECL_MUTABLE_P (decl) = 1;
9476 storage_class = sc_none;
9480 bad_specifiers (decl, "field", virtualp,
9481 memfn_quals != TYPE_UNQUALIFIED,
9482 inlinep, friendp, raises != NULL_TREE);
9485 else if (TREE_CODE (type) == FUNCTION_TYPE
9486 || TREE_CODE (type) == METHOD_TYPE)
9488 tree original_name;
9489 int publicp = 0;
9491 if (!unqualified_id)
9492 return error_mark_node;
9494 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9495 original_name = dname;
9496 else
9497 original_name = unqualified_id;
9499 if (storage_class == sc_auto)
9500 error ("storage class %<auto%> invalid for function %qs", name);
9501 else if (storage_class == sc_register)
9502 error ("storage class %<register%> invalid for function %qs", name);
9503 else if (thread_p)
9504 error ("storage class %<__thread%> invalid for function %qs", name);
9506 /* Function declaration not at top level.
9507 Storage classes other than `extern' are not allowed
9508 and `extern' makes no difference. */
9509 if (! toplevel_bindings_p ()
9510 && (storage_class == sc_static
9511 || declspecs->specs[(int)ds_inline])
9512 && pedantic)
9514 if (storage_class == sc_static)
9515 pedwarn (input_location, OPT_pedantic,
9516 "%<static%> specified invalid for function %qs "
9517 "declared out of global scope", name);
9518 else
9519 pedwarn (input_location, OPT_pedantic,
9520 "%<inline%> specifier invalid for function %qs "
9521 "declared out of global scope", name);
9524 if (ctype != NULL_TREE
9525 && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9527 error ("%q#T is not a class or a namespace", ctype);
9528 ctype = NULL_TREE;
9531 if (ctype == NULL_TREE)
9533 if (virtualp)
9535 error ("virtual non-class function %qs", name);
9536 virtualp = 0;
9538 else if (sfk == sfk_constructor
9539 || sfk == sfk_destructor)
9541 error (funcdef_flag
9542 ? "%qs defined in a non-class scope"
9543 : "%qs declared in a non-class scope", name);
9544 sfk = sfk_none;
9547 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9548 && !NEW_DELETE_OPNAME_P (original_name))
9549 type = build_method_type_directly (ctype,
9550 TREE_TYPE (type),
9551 TYPE_ARG_TYPES (type));
9553 /* Record presence of `static'. */
9554 publicp = (ctype != NULL_TREE
9555 || storage_class == sc_extern
9556 || storage_class != sc_static);
9558 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9559 virtualp, flags, memfn_quals, raises,
9560 1, friendp,
9561 publicp, inlinep || constexpr_p, sfk, funcdef_flag,
9562 template_count, in_namespace, attrlist,
9563 declarator->id_loc);
9564 if (decl == NULL_TREE)
9565 return error_mark_node;
9567 if (staticp == 1)
9569 int invalid_static = 0;
9571 /* Don't allow a static member function in a class, and forbid
9572 declaring main to be static. */
9573 if (TREE_CODE (type) == METHOD_TYPE)
9575 permerror (input_location, "cannot declare member function %qD to have "
9576 "static linkage", decl);
9577 invalid_static = 1;
9579 else if (current_function_decl)
9581 /* FIXME need arm citation */
9582 error ("cannot declare static function inside another function");
9583 invalid_static = 1;
9586 if (invalid_static)
9588 staticp = 0;
9589 storage_class = sc_none;
9593 else
9595 /* It's a variable. */
9597 /* An uninitialized decl with `extern' is a reference. */
9598 decl = grokvardecl (type, unqualified_id,
9599 declspecs,
9600 initialized,
9601 (type_quals & TYPE_QUAL_CONST) != 0,
9602 ctype ? ctype : in_namespace);
9603 bad_specifiers (decl, "variable", virtualp,
9604 memfn_quals != TYPE_UNQUALIFIED,
9605 inlinep, friendp, raises != NULL_TREE);
9607 if (ctype)
9609 DECL_CONTEXT (decl) = ctype;
9610 if (staticp == 1)
9612 permerror (input_location, "%<static%> may not be used when defining "
9613 "(as opposed to declaring) a static data member");
9614 staticp = 0;
9615 storage_class = sc_none;
9617 if (storage_class == sc_register && TREE_STATIC (decl))
9619 error ("static member %qD declared %<register%>", decl);
9620 storage_class = sc_none;
9622 if (storage_class == sc_extern && pedantic)
9624 pedwarn (input_location, OPT_pedantic,
9625 "cannot explicitly declare member %q#D to have "
9626 "extern linkage", decl);
9627 storage_class = sc_none;
9632 if (storage_class == sc_extern && initialized && !funcdef_flag)
9634 if (toplevel_bindings_p ())
9636 /* It's common practice (and completely valid) to have a const
9637 be initialized and declared extern. */
9638 if (!(type_quals & TYPE_QUAL_CONST))
9639 warning (0, "%qs initialized and declared %<extern%>", name);
9641 else
9643 error ("%qs has both %<extern%> and initializer", name);
9644 return error_mark_node;
9648 /* Record `register' declaration for warnings on &
9649 and in case doing stupid register allocation. */
9651 if (storage_class == sc_register)
9652 DECL_REGISTER (decl) = 1;
9653 else if (storage_class == sc_extern)
9654 DECL_THIS_EXTERN (decl) = 1;
9655 else if (storage_class == sc_static)
9656 DECL_THIS_STATIC (decl) = 1;
9658 /* Don't forget constexprness. */
9659 if (VAR_OR_FUNCTION_DECL_P (decl))
9660 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9662 /* Record constancy and volatility on the DECL itself . There's
9663 no need to do this when processing a template; we'll do this
9664 for the instantiated declaration based on the type of DECL. */
9665 if (!processing_template_decl)
9666 cp_apply_type_quals_to_decl (type_quals, decl);
9668 return decl;
9672 /* Subroutine of start_function. Ensure that each of the parameter
9673 types (as listed in PARMS) is complete, as is required for a
9674 function definition. */
9676 static void
9677 require_complete_types_for_parms (tree parms)
9679 for (; parms; parms = TREE_CHAIN (parms))
9681 if (dependent_type_p (TREE_TYPE (parms)))
9682 continue;
9683 if (!VOID_TYPE_P (TREE_TYPE (parms))
9684 && complete_type_or_else (TREE_TYPE (parms), parms))
9686 relayout_decl (parms);
9687 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9689 else
9690 /* grokparms or complete_type_or_else will have already issued
9691 an error. */
9692 TREE_TYPE (parms) = error_mark_node;
9696 /* Returns nonzero if T is a local variable. */
9699 local_variable_p (const_tree t)
9701 if ((TREE_CODE (t) == VAR_DECL
9702 /* A VAR_DECL with a context that is a _TYPE is a static data
9703 member. */
9704 && !TYPE_P (CP_DECL_CONTEXT (t))
9705 /* Any other non-local variable must be at namespace scope. */
9706 && !DECL_NAMESPACE_SCOPE_P (t))
9707 || (TREE_CODE (t) == PARM_DECL))
9708 return 1;
9710 return 0;
9713 /* Like local_variable_p, but suitable for use as a tree-walking
9714 function. */
9716 static tree
9717 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9718 void *data ATTRIBUTE_UNUSED)
9720 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9721 return *tp;
9722 else if (TYPE_P (*tp))
9723 *walk_subtrees = 0;
9725 return NULL_TREE;
9729 /* Check that ARG, which is a default-argument expression for a
9730 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
9731 something goes wrong. DECL may also be a _TYPE node, rather than a
9732 DECL, if there is no DECL available. */
9734 tree
9735 check_default_argument (tree decl, tree arg)
9737 tree var;
9738 tree decl_type;
9740 if (TREE_CODE (arg) == DEFAULT_ARG)
9741 /* We get a DEFAULT_ARG when looking at an in-class declaration
9742 with a default argument. Ignore the argument for now; we'll
9743 deal with it after the class is complete. */
9744 return arg;
9746 if (TYPE_P (decl))
9748 decl_type = decl;
9749 decl = NULL_TREE;
9751 else
9752 decl_type = TREE_TYPE (decl);
9754 if (arg == error_mark_node
9755 || decl == error_mark_node
9756 || TREE_TYPE (arg) == error_mark_node
9757 || decl_type == error_mark_node)
9758 /* Something already went wrong. There's no need to check
9759 further. */
9760 return error_mark_node;
9762 /* [dcl.fct.default]
9764 A default argument expression is implicitly converted to the
9765 parameter type. */
9766 if (!TREE_TYPE (arg)
9767 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9769 if (decl)
9770 error ("default argument for %q#D has type %qT",
9771 decl, TREE_TYPE (arg));
9772 else
9773 error ("default argument for parameter of type %qT has type %qT",
9774 decl_type, TREE_TYPE (arg));
9776 return error_mark_node;
9779 /* [dcl.fct.default]
9781 Local variables shall not be used in default argument
9782 expressions.
9784 The keyword `this' shall not be used in a default argument of a
9785 member function. */
9786 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9787 if (var)
9789 error ("default argument %qE uses local variable %qD", arg, var);
9790 return error_mark_node;
9793 /* All is well. */
9794 return arg;
9797 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
9799 static tree
9800 type_is_deprecated (tree type)
9802 enum tree_code code;
9803 if (TREE_DEPRECATED (type))
9804 return type;
9805 if (TYPE_NAME (type)
9806 && TREE_DEPRECATED (TYPE_NAME (type)))
9807 return type;
9809 /* Do warn about using typedefs to a deprecated class. */
9810 if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
9811 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
9813 code = TREE_CODE (type);
9815 if (code == POINTER_TYPE || code == REFERENCE_TYPE
9816 || code == OFFSET_TYPE || code == FUNCTION_TYPE
9817 || code == METHOD_TYPE || code == ARRAY_TYPE)
9818 return type_is_deprecated (TREE_TYPE (type));
9820 if (TYPE_PTRMEMFUNC_P (type))
9821 return type_is_deprecated
9822 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9824 return NULL_TREE;
9827 /* Decode the list of parameter types for a function type.
9828 Given the list of things declared inside the parens,
9829 return a list of types.
9831 If this parameter does not end with an ellipsis, we append
9832 void_list_node.
9834 *PARMS is set to the chain of PARM_DECLs created. */
9836 static tree
9837 grokparms (tree parmlist, tree *parms)
9839 tree result = NULL_TREE;
9840 tree decls = NULL_TREE;
9841 tree parm;
9842 int any_error = 0;
9844 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9846 tree type = NULL_TREE;
9847 tree init = TREE_PURPOSE (parm);
9848 tree decl = TREE_VALUE (parm);
9849 const char *errmsg;
9851 if (parm == void_list_node)
9852 break;
9854 if (! decl || TREE_TYPE (decl) == error_mark_node)
9855 continue;
9857 type = TREE_TYPE (decl);
9858 if (VOID_TYPE_P (type))
9860 if (same_type_p (type, void_type_node)
9861 && DECL_SELF_REFERENCE_P (type)
9862 && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9863 /* this is a parmlist of `(void)', which is ok. */
9864 break;
9865 cxx_incomplete_type_error (decl, type);
9866 /* It's not a good idea to actually create parameters of
9867 type `void'; other parts of the compiler assume that a
9868 void type terminates the parameter list. */
9869 type = error_mark_node;
9870 TREE_TYPE (decl) = error_mark_node;
9873 if (type != error_mark_node
9874 && TYPE_FOR_JAVA (type)
9875 && MAYBE_CLASS_TYPE_P (type))
9877 error ("parameter %qD has Java class type", decl);
9878 type = error_mark_node;
9879 TREE_TYPE (decl) = error_mark_node;
9880 init = NULL_TREE;
9883 if (type != error_mark_node
9884 && (errmsg = targetm.invalid_parameter_type (type)))
9886 error (errmsg);
9887 type = error_mark_node;
9888 TREE_TYPE (decl) = error_mark_node;
9891 if (type != error_mark_node)
9893 if (deprecated_state != DEPRECATED_SUPPRESS)
9895 tree deptype = type_is_deprecated (type);
9896 if (deptype)
9897 warn_deprecated_use (deptype, NULL_TREE);
9900 /* Top-level qualifiers on the parameters are
9901 ignored for function types. */
9902 type = cp_build_qualified_type (type, 0);
9903 if (TREE_CODE (type) == METHOD_TYPE)
9905 error ("parameter %qD invalidly declared method type", decl);
9906 type = build_pointer_type (type);
9907 TREE_TYPE (decl) = type;
9909 else if (abstract_virtuals_error (decl, type))
9910 any_error = 1; /* Seems like a good idea. */
9911 else if (POINTER_TYPE_P (type))
9913 /* [dcl.fct]/6, parameter types cannot contain pointers
9914 (references) to arrays of unknown bound. */
9915 tree t = TREE_TYPE (type);
9916 int ptr = TYPE_PTR_P (type);
9918 while (1)
9920 if (TYPE_PTR_P (t))
9921 ptr = 1;
9922 else if (TREE_CODE (t) != ARRAY_TYPE)
9923 break;
9924 else if (!TYPE_DOMAIN (t))
9925 break;
9926 t = TREE_TYPE (t);
9928 if (TREE_CODE (t) == ARRAY_TYPE)
9929 error (ptr
9930 ? G_("parameter %qD includes pointer to array of "
9931 "unknown bound %qT")
9932 : G_("parameter %qD includes reference to array of "
9933 "unknown bound %qT"),
9934 decl, t);
9937 if (any_error)
9938 init = NULL_TREE;
9939 else if (init && !processing_template_decl)
9940 init = check_default_argument (decl, init);
9943 if (TREE_CODE (decl) == PARM_DECL
9944 && FUNCTION_PARAMETER_PACK_P (decl)
9945 && TREE_CHAIN (parm)
9946 && TREE_CHAIN (parm) != void_list_node)
9947 error ("parameter packs must be at the end of the parameter list");
9949 TREE_CHAIN (decl) = decls;
9950 decls = decl;
9951 result = tree_cons (init, type, result);
9953 decls = nreverse (decls);
9954 result = nreverse (result);
9955 if (parm)
9956 result = chainon (result, void_list_node);
9957 *parms = decls;
9959 return result;
9963 /* D is a constructor or overloaded `operator='.
9965 Let T be the class in which D is declared. Then, this function
9966 returns:
9968 -1 if D's is an ill-formed constructor or copy assignment operator
9969 whose first parameter is of type `T'.
9970 0 if D is not a copy constructor or copy assignment
9971 operator.
9972 1 if D is a copy constructor or copy assignment operator whose
9973 first parameter is a reference to non-const qualified T.
9974 2 if D is a copy constructor or copy assignment operator whose
9975 first parameter is a reference to const qualified T.
9977 This function can be used as a predicate. Positive values indicate
9978 a copy constructor and nonzero values indicate a copy assignment
9979 operator. */
9982 copy_fn_p (const_tree d)
9984 tree args;
9985 tree arg_type;
9986 int result = 1;
9988 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9990 if (TREE_CODE (d) == TEMPLATE_DECL
9991 || (DECL_TEMPLATE_INFO (d)
9992 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9993 /* Instantiations of template member functions are never copy
9994 functions. Note that member functions of templated classes are
9995 represented as template functions internally, and we must
9996 accept those as copy functions. */
9997 return 0;
9999 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10000 if (!args)
10001 return 0;
10003 arg_type = TREE_VALUE (args);
10004 if (arg_type == error_mark_node)
10005 return 0;
10007 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10009 /* Pass by value copy assignment operator. */
10010 result = -1;
10012 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10013 && !TYPE_REF_IS_RVALUE (arg_type)
10014 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10016 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10017 result = 2;
10019 else
10020 return 0;
10022 args = TREE_CHAIN (args);
10024 if (args && args != void_list_node && !TREE_PURPOSE (args))
10025 /* There are more non-optional args. */
10026 return 0;
10028 return result;
10031 /* D is a constructor or overloaded `operator='.
10033 Let T be the class in which D is declared. Then, this function
10034 returns true when D is a move constructor or move assignment
10035 operator, false otherwise. */
10037 bool
10038 move_fn_p (const_tree d)
10040 tree args;
10041 tree arg_type;
10042 bool result = false;
10044 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10046 if (cxx_dialect == cxx98)
10047 /* There are no move constructors if we are in C++98 mode. */
10048 return false;
10050 if (TREE_CODE (d) == TEMPLATE_DECL
10051 || (DECL_TEMPLATE_INFO (d)
10052 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10053 /* Instantiations of template member functions are never copy
10054 functions. Note that member functions of templated classes are
10055 represented as template functions internally, and we must
10056 accept those as copy functions. */
10057 return 0;
10059 args = FUNCTION_FIRST_USER_PARMTYPE (d);
10060 if (!args)
10061 return 0;
10063 arg_type = TREE_VALUE (args);
10064 if (arg_type == error_mark_node)
10065 return 0;
10067 if (TREE_CODE (arg_type) == REFERENCE_TYPE
10068 && TYPE_REF_IS_RVALUE (arg_type)
10069 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10070 DECL_CONTEXT (d)))
10071 result = true;
10073 args = TREE_CHAIN (args);
10075 if (args && args != void_list_node && !TREE_PURPOSE (args))
10076 /* There are more non-optional args. */
10077 return false;
10079 return result;
10082 /* Remember any special properties of member function DECL. */
10084 void
10085 grok_special_member_properties (tree decl)
10087 tree class_type;
10089 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10090 return;
10092 class_type = DECL_CONTEXT (decl);
10093 if (DECL_CONSTRUCTOR_P (decl))
10095 int ctor = copy_fn_p (decl);
10097 if (!DECL_ARTIFICIAL (decl))
10098 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10100 if (ctor > 0)
10102 /* [class.copy]
10104 A non-template constructor for class X is a copy
10105 constructor if its first parameter is of type X&, const
10106 X&, volatile X& or const volatile X&, and either there
10107 are no other parameters or else all other parameters have
10108 default arguments. */
10109 TYPE_HAS_INIT_REF (class_type) = 1;
10110 if (user_provided_p (decl))
10111 TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
10112 if (ctor > 1)
10113 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
10115 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10117 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10118 if (user_provided_p (decl))
10119 TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10121 else if (is_list_ctor (decl))
10122 TYPE_HAS_LIST_CTOR (class_type) = 1;
10124 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10126 /* [class.copy]
10128 A non-template assignment operator for class X is a copy
10129 assignment operator if its parameter is of type X, X&, const
10130 X&, volatile X& or const volatile X&. */
10132 int assop = copy_fn_p (decl);
10134 if (assop)
10136 TYPE_HAS_ASSIGN_REF (class_type) = 1;
10137 if (user_provided_p (decl))
10138 TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
10139 if (assop != 1)
10140 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
10145 /* Check a constructor DECL has the correct form. Complains
10146 if the class has a constructor of the form X(X). */
10149 grok_ctor_properties (const_tree ctype, const_tree decl)
10151 int ctor_parm = copy_fn_p (decl);
10153 if (ctor_parm < 0)
10155 /* [class.copy]
10157 A declaration of a constructor for a class X is ill-formed if
10158 its first parameter is of type (optionally cv-qualified) X
10159 and either there are no other parameters or else all other
10160 parameters have default arguments.
10162 We *don't* complain about member template instantiations that
10163 have this form, though; they can occur as we try to decide
10164 what constructor to use during overload resolution. Since
10165 overload resolution will never prefer such a constructor to
10166 the non-template copy constructor (which is either explicitly
10167 or implicitly defined), there's no need to worry about their
10168 existence. Theoretically, they should never even be
10169 instantiated, but that's hard to forestall. */
10170 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10171 ctype, ctype);
10172 return 0;
10175 return 1;
10178 /* An operator with this code is unary, but can also be binary. */
10180 static int
10181 ambi_op_p (enum tree_code code)
10183 return (code == INDIRECT_REF
10184 || code == ADDR_EXPR
10185 || code == UNARY_PLUS_EXPR
10186 || code == NEGATE_EXPR
10187 || code == PREINCREMENT_EXPR
10188 || code == PREDECREMENT_EXPR);
10191 /* An operator with this name can only be unary. */
10193 static int
10194 unary_op_p (enum tree_code code)
10196 return (code == TRUTH_NOT_EXPR
10197 || code == BIT_NOT_EXPR
10198 || code == COMPONENT_REF
10199 || code == TYPE_EXPR);
10202 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
10203 errors are issued for invalid declarations. */
10205 bool
10206 grok_op_properties (tree decl, bool complain)
10208 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10209 tree argtype;
10210 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10211 tree name = DECL_NAME (decl);
10212 enum tree_code operator_code;
10213 int arity;
10214 bool ellipsis_p;
10215 tree class_type;
10217 /* Count the number of arguments and check for ellipsis. */
10218 for (argtype = argtypes, arity = 0;
10219 argtype && argtype != void_list_node;
10220 argtype = TREE_CHAIN (argtype))
10221 ++arity;
10222 ellipsis_p = !argtype;
10224 class_type = DECL_CONTEXT (decl);
10225 if (class_type && !CLASS_TYPE_P (class_type))
10226 class_type = NULL_TREE;
10228 if (DECL_CONV_FN_P (decl))
10229 operator_code = TYPE_EXPR;
10230 else
10233 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
10234 if (ansi_opname (CODE) == name) \
10236 operator_code = (CODE); \
10237 break; \
10239 else if (ansi_assopname (CODE) == name) \
10241 operator_code = (CODE); \
10242 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
10243 break; \
10246 #include "operators.def"
10247 #undef DEF_OPERATOR
10249 gcc_unreachable ();
10251 while (0);
10252 gcc_assert (operator_code != MAX_TREE_CODES);
10253 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10255 if (class_type)
10256 switch (operator_code)
10258 case NEW_EXPR:
10259 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10260 break;
10262 case DELETE_EXPR:
10263 TYPE_GETS_DELETE (class_type) |= 1;
10264 break;
10266 case VEC_NEW_EXPR:
10267 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10268 break;
10270 case VEC_DELETE_EXPR:
10271 TYPE_GETS_DELETE (class_type) |= 2;
10272 break;
10274 default:
10275 break;
10278 /* [basic.std.dynamic.allocation]/1:
10280 A program is ill-formed if an allocation function is declared
10281 in a namespace scope other than global scope or declared static
10282 in global scope.
10284 The same also holds true for deallocation functions. */
10285 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10286 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10288 if (DECL_NAMESPACE_SCOPE_P (decl))
10290 if (CP_DECL_CONTEXT (decl) != global_namespace)
10292 error ("%qD may not be declared within a namespace", decl);
10293 return false;
10295 else if (!TREE_PUBLIC (decl))
10297 error ("%qD may not be declared as static", decl);
10298 return false;
10303 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10305 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10306 DECL_IS_OPERATOR_NEW (decl) = 1;
10308 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10309 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10310 else
10312 /* An operator function must either be a non-static member function
10313 or have at least one parameter of a class, a reference to a class,
10314 an enumeration, or a reference to an enumeration. 13.4.0.6 */
10315 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10317 if (operator_code == TYPE_EXPR
10318 || operator_code == CALL_EXPR
10319 || operator_code == COMPONENT_REF
10320 || operator_code == ARRAY_REF
10321 || operator_code == NOP_EXPR)
10323 error ("%qD must be a nonstatic member function", decl);
10324 return false;
10326 else
10328 tree p;
10330 if (DECL_STATIC_FUNCTION_P (decl))
10332 error ("%qD must be either a non-static member "
10333 "function or a non-member function", decl);
10334 return false;
10337 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10339 tree arg = non_reference (TREE_VALUE (p));
10340 if (arg == error_mark_node)
10341 return false;
10343 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10344 because these checks are performed even on
10345 template functions. */
10346 if (MAYBE_CLASS_TYPE_P (arg)
10347 || TREE_CODE (arg) == ENUMERAL_TYPE)
10348 break;
10351 if (!p || p == void_list_node)
10353 if (complain)
10354 error ("%qD must have an argument of class or "
10355 "enumerated type", decl);
10356 return false;
10361 /* There are no restrictions on the arguments to an overloaded
10362 "operator ()". */
10363 if (operator_code == CALL_EXPR)
10364 return true;
10366 /* Warn about conversion operators that will never be used. */
10367 if (IDENTIFIER_TYPENAME_P (name)
10368 && ! DECL_TEMPLATE_INFO (decl)
10369 && warn_conversion
10370 /* Warn only declaring the function; there is no need to
10371 warn again about out-of-class definitions. */
10372 && class_type == current_class_type)
10374 tree t = TREE_TYPE (name);
10375 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10377 if (ref)
10378 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10380 if (TREE_CODE (t) == VOID_TYPE)
10381 warning (OPT_Wconversion,
10383 ? G_("conversion to a reference to void "
10384 "will never use a type conversion operator")
10385 : G_("conversion to void "
10386 "will never use a type conversion operator"));
10387 else if (class_type)
10389 if (t == class_type)
10390 warning (OPT_Wconversion,
10392 ? G_("conversion to a reference to the same type "
10393 "will never use a type conversion operator")
10394 : G_("conversion to the same type "
10395 "will never use a type conversion operator"));
10396 /* Don't force t to be complete here. */
10397 else if (MAYBE_CLASS_TYPE_P (t)
10398 && COMPLETE_TYPE_P (t)
10399 && DERIVED_FROM_P (t, class_type))
10400 warning (OPT_Wconversion,
10402 ? G_("conversion to a reference to a base class "
10403 "will never use a type conversion operator")
10404 : G_("conversion to a base class "
10405 "will never use a type conversion operator"));
10410 if (operator_code == COND_EXPR)
10412 /* 13.4.0.3 */
10413 error ("ISO C++ prohibits overloading operator ?:");
10414 return false;
10416 else if (ellipsis_p)
10418 error ("%qD must not have variable number of arguments", decl);
10419 return false;
10421 else if (ambi_op_p (operator_code))
10423 if (arity == 1)
10424 /* We pick the one-argument operator codes by default, so
10425 we don't have to change anything. */
10427 else if (arity == 2)
10429 /* If we thought this was a unary operator, we now know
10430 it to be a binary operator. */
10431 switch (operator_code)
10433 case INDIRECT_REF:
10434 operator_code = MULT_EXPR;
10435 break;
10437 case ADDR_EXPR:
10438 operator_code = BIT_AND_EXPR;
10439 break;
10441 case UNARY_PLUS_EXPR:
10442 operator_code = PLUS_EXPR;
10443 break;
10445 case NEGATE_EXPR:
10446 operator_code = MINUS_EXPR;
10447 break;
10449 case PREINCREMENT_EXPR:
10450 operator_code = POSTINCREMENT_EXPR;
10451 break;
10453 case PREDECREMENT_EXPR:
10454 operator_code = POSTDECREMENT_EXPR;
10455 break;
10457 default:
10458 gcc_unreachable ();
10461 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10463 if ((operator_code == POSTINCREMENT_EXPR
10464 || operator_code == POSTDECREMENT_EXPR)
10465 && ! processing_template_decl
10466 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10468 if (methodp)
10469 error ("postfix %qD must take %<int%> as its argument",
10470 decl);
10471 else
10472 error ("postfix %qD must take %<int%> as its second "
10473 "argument", decl);
10474 return false;
10477 else
10479 if (methodp)
10480 error ("%qD must take either zero or one argument", decl);
10481 else
10482 error ("%qD must take either one or two arguments", decl);
10483 return false;
10486 /* More Effective C++ rule 6. */
10487 if (warn_ecpp
10488 && (operator_code == POSTINCREMENT_EXPR
10489 || operator_code == POSTDECREMENT_EXPR
10490 || operator_code == PREINCREMENT_EXPR
10491 || operator_code == PREDECREMENT_EXPR))
10493 tree arg = TREE_VALUE (argtypes);
10494 tree ret = TREE_TYPE (TREE_TYPE (decl));
10495 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10496 arg = TREE_TYPE (arg);
10497 arg = TYPE_MAIN_VARIANT (arg);
10498 if (operator_code == PREINCREMENT_EXPR
10499 || operator_code == PREDECREMENT_EXPR)
10501 if (TREE_CODE (ret) != REFERENCE_TYPE
10502 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10503 arg))
10504 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10505 build_reference_type (arg));
10507 else
10509 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10510 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10514 else if (unary_op_p (operator_code))
10516 if (arity != 1)
10518 if (methodp)
10519 error ("%qD must take %<void%>", decl);
10520 else
10521 error ("%qD must take exactly one argument", decl);
10522 return false;
10525 else /* if (binary_op_p (operator_code)) */
10527 if (arity != 2)
10529 if (methodp)
10530 error ("%qD must take exactly one argument", decl);
10531 else
10532 error ("%qD must take exactly two arguments", decl);
10533 return false;
10536 /* More Effective C++ rule 7. */
10537 if (warn_ecpp
10538 && (operator_code == TRUTH_ANDIF_EXPR
10539 || operator_code == TRUTH_ORIF_EXPR
10540 || operator_code == COMPOUND_EXPR))
10541 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10542 decl);
10545 /* Effective C++ rule 23. */
10546 if (warn_ecpp
10547 && arity == 2
10548 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10549 && (operator_code == PLUS_EXPR
10550 || operator_code == MINUS_EXPR
10551 || operator_code == TRUNC_DIV_EXPR
10552 || operator_code == MULT_EXPR
10553 || operator_code == TRUNC_MOD_EXPR)
10554 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10555 warning (OPT_Weffc__, "%qD should return by value", decl);
10557 /* [over.oper]/8 */
10558 for (; argtypes && argtypes != void_list_node;
10559 argtypes = TREE_CHAIN (argtypes))
10560 if (TREE_PURPOSE (argtypes))
10562 TREE_PURPOSE (argtypes) = NULL_TREE;
10563 if (operator_code == POSTINCREMENT_EXPR
10564 || operator_code == POSTDECREMENT_EXPR)
10566 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
10567 decl);
10569 else
10571 error ("%qD cannot have default arguments", decl);
10572 return false;
10576 return true;
10579 /* Return a string giving the keyword associate with CODE. */
10581 static const char *
10582 tag_name (enum tag_types code)
10584 switch (code)
10586 case record_type:
10587 return "struct";
10588 case class_type:
10589 return "class";
10590 case union_type:
10591 return "union";
10592 case enum_type:
10593 return "enum";
10594 case typename_type:
10595 return "typename";
10596 default:
10597 gcc_unreachable ();
10601 /* Name lookup in an elaborated-type-specifier (after the keyword
10602 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
10603 elaborated-type-specifier is invalid, issue a diagnostic and return
10604 error_mark_node; otherwise, return the *_TYPE to which it referred.
10605 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
10607 tree
10608 check_elaborated_type_specifier (enum tag_types tag_code,
10609 tree decl,
10610 bool allow_template_p)
10612 tree type;
10614 /* In the case of:
10616 struct S { struct S *p; };
10618 name lookup will find the TYPE_DECL for the implicit "S::S"
10619 typedef. Adjust for that here. */
10620 if (DECL_SELF_REFERENCE_P (decl))
10621 decl = TYPE_NAME (TREE_TYPE (decl));
10623 type = TREE_TYPE (decl);
10625 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10626 is false for this case as well. */
10627 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10629 error ("using template type parameter %qT after %qs",
10630 type, tag_name (tag_code));
10631 return error_mark_node;
10633 /* [dcl.type.elab]
10635 If the identifier resolves to a typedef-name or a template
10636 type-parameter, the elaborated-type-specifier is ill-formed.
10638 In other words, the only legitimate declaration to use in the
10639 elaborated type specifier is the implicit typedef created when
10640 the type is declared. */
10641 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10642 && !DECL_SELF_REFERENCE_P (decl)
10643 && tag_code != typename_type)
10645 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10646 error ("%q+D has a previous declaration here", decl);
10647 return error_mark_node;
10649 else if (TREE_CODE (type) != RECORD_TYPE
10650 && TREE_CODE (type) != UNION_TYPE
10651 && tag_code != enum_type
10652 && tag_code != typename_type)
10654 error ("%qT referred to as %qs", type, tag_name (tag_code));
10655 error ("%q+T has a previous declaration here", type);
10656 return error_mark_node;
10658 else if (TREE_CODE (type) != ENUMERAL_TYPE
10659 && tag_code == enum_type)
10661 error ("%qT referred to as enum", type);
10662 error ("%q+T has a previous declaration here", type);
10663 return error_mark_node;
10665 else if (!allow_template_p
10666 && TREE_CODE (type) == RECORD_TYPE
10667 && CLASSTYPE_IS_TEMPLATE (type))
10669 /* If a class template appears as elaborated type specifier
10670 without a template header such as:
10672 template <class T> class C {};
10673 void f(class C); // No template header here
10675 then the required template argument is missing. */
10676 error ("template argument required for %<%s %T%>",
10677 tag_name (tag_code),
10678 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10679 return error_mark_node;
10682 return type;
10685 /* Lookup NAME in elaborate type specifier in scope according to
10686 SCOPE and issue diagnostics if necessary.
10687 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10688 found, and ERROR_MARK_NODE for type error. */
10690 static tree
10691 lookup_and_check_tag (enum tag_types tag_code, tree name,
10692 tag_scope scope, bool template_header_p)
10694 tree t;
10695 tree decl;
10696 if (scope == ts_global)
10698 /* First try ordinary name lookup, ignoring hidden class name
10699 injected via friend declaration. */
10700 decl = lookup_name_prefer_type (name, 2);
10701 /* If that fails, the name will be placed in the smallest
10702 non-class, non-function-prototype scope according to 3.3.1/5.
10703 We may already have a hidden name declared as friend in this
10704 scope. So lookup again but not ignoring hidden names.
10705 If we find one, that name will be made visible rather than
10706 creating a new tag. */
10707 if (!decl)
10708 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10710 else
10711 decl = lookup_type_scope (name, scope);
10713 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10714 decl = DECL_TEMPLATE_RESULT (decl);
10716 if (decl && TREE_CODE (decl) == TYPE_DECL)
10718 /* Look for invalid nested type:
10719 class C {
10720 class C {};
10721 }; */
10722 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10724 error ("%qD has the same name as the class in which it is "
10725 "declared",
10726 decl);
10727 return error_mark_node;
10730 /* Two cases we need to consider when deciding if a class
10731 template is allowed as an elaborated type specifier:
10732 1. It is a self reference to its own class.
10733 2. It comes with a template header.
10735 For example:
10737 template <class T> class C {
10738 class C *c1; // DECL_SELF_REFERENCE_P is true
10739 class D;
10741 template <class U> class C; // template_header_p is true
10742 template <class T> class C<T>::D {
10743 class C *c2; // DECL_SELF_REFERENCE_P is true
10744 }; */
10746 t = check_elaborated_type_specifier (tag_code,
10747 decl,
10748 template_header_p
10749 | DECL_SELF_REFERENCE_P (decl));
10750 return t;
10752 else if (decl && TREE_CODE (decl) == TREE_LIST)
10754 error ("reference to %qD is ambiguous", name);
10755 print_candidates (decl);
10756 return error_mark_node;
10758 else
10759 return NULL_TREE;
10762 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10763 Define the tag as a forward-reference if it is not defined.
10765 If a declaration is given, process it here, and report an error if
10766 multiple declarations are not identical.
10768 SCOPE is TS_CURRENT when this is also a definition. Only look in
10769 the current frame for the name (since C++ allows new names in any
10770 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10771 declaration. Only look beginning from the current scope outward up
10772 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
10774 TEMPLATE_HEADER_P is true when this declaration is preceded by
10775 a set of template parameters. */
10777 tree
10778 xref_tag (enum tag_types tag_code, tree name,
10779 tag_scope scope, bool template_header_p)
10781 enum tree_code code;
10782 tree t;
10783 tree context = NULL_TREE;
10785 timevar_push (TV_NAME_LOOKUP);
10787 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10789 switch (tag_code)
10791 case record_type:
10792 case class_type:
10793 code = RECORD_TYPE;
10794 break;
10795 case union_type:
10796 code = UNION_TYPE;
10797 break;
10798 case enum_type:
10799 code = ENUMERAL_TYPE;
10800 break;
10801 default:
10802 gcc_unreachable ();
10805 /* In case of anonymous name, xref_tag is only called to
10806 make type node and push name. Name lookup is not required. */
10807 if (ANON_AGGRNAME_P (name))
10808 t = NULL_TREE;
10809 else
10810 t = lookup_and_check_tag (tag_code, name,
10811 scope, template_header_p);
10813 if (t == error_mark_node)
10814 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10816 if (scope != ts_current && t && current_class_type
10817 && template_class_depth (current_class_type)
10818 && template_header_p)
10820 /* Since SCOPE is not TS_CURRENT, we are not looking at a
10821 definition of this tag. Since, in addition, we are currently
10822 processing a (member) template declaration of a template
10823 class, we must be very careful; consider:
10825 template <class X>
10826 struct S1
10828 template <class U>
10829 struct S2
10830 { template <class V>
10831 friend struct S1; };
10833 Here, the S2::S1 declaration should not be confused with the
10834 outer declaration. In particular, the inner version should
10835 have a template parameter of level 2, not level 1. This
10836 would be particularly important if the member declaration
10837 were instead:
10839 template <class V = U> friend struct S1;
10841 say, when we should tsubst into `U' when instantiating
10842 S2. On the other hand, when presented with:
10844 template <class T>
10845 struct S1 {
10846 template <class U>
10847 struct S2 {};
10848 template <class U>
10849 friend struct S2;
10852 we must find the inner binding eventually. We
10853 accomplish this by making sure that the new type we
10854 create to represent this declaration has the right
10855 TYPE_CONTEXT. */
10856 context = TYPE_CONTEXT (t);
10857 t = NULL_TREE;
10860 if (! t)
10862 /* If no such tag is yet defined, create a forward-reference node
10863 and record it as the "definition".
10864 When a real declaration of this type is found,
10865 the forward-reference will be altered into a real type. */
10866 if (code == ENUMERAL_TYPE)
10868 error ("use of enum %q#D without previous declaration", name);
10869 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10871 else
10873 t = make_class_type (code);
10874 TYPE_CONTEXT (t) = context;
10875 t = pushtag (name, t, scope);
10878 else
10880 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10882 if (!redeclare_class_template (t, current_template_parms))
10883 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10885 else if (!processing_template_decl
10886 && CLASS_TYPE_P (t)
10887 && CLASSTYPE_IS_TEMPLATE (t))
10889 error ("redeclaration of %qT as a non-template", t);
10890 error ("previous declaration %q+D", t);
10891 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10894 /* Make injected friend class visible. */
10895 if (scope != ts_within_enclosing_non_class
10896 && hidden_name_p (TYPE_NAME (t)))
10898 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10899 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10901 if (TYPE_TEMPLATE_INFO (t))
10903 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10904 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10909 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10912 tree
10913 xref_tag_from_type (tree old, tree id, tag_scope scope)
10915 enum tag_types tag_kind;
10917 if (TREE_CODE (old) == RECORD_TYPE)
10918 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10919 else
10920 tag_kind = union_type;
10922 if (id == NULL_TREE)
10923 id = TYPE_IDENTIFIER (old);
10925 return xref_tag (tag_kind, id, scope, false);
10928 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10929 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10930 access_* node, and the TREE_VALUE is the type of the base-class.
10931 Non-NULL TREE_TYPE indicates virtual inheritance.
10933 Returns true if the binfo hierarchy was successfully created,
10934 false if an error was detected. */
10936 bool
10937 xref_basetypes (tree ref, tree base_list)
10939 tree *basep;
10940 tree binfo, base_binfo;
10941 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
10942 unsigned max_bases = 0; /* Maximum direct bases. */
10943 int i;
10944 tree default_access;
10945 tree igo_prev; /* Track Inheritance Graph Order. */
10947 if (ref == error_mark_node)
10948 return false;
10950 /* The base of a derived class is private by default, all others are
10951 public. */
10952 default_access = (TREE_CODE (ref) == RECORD_TYPE
10953 && CLASSTYPE_DECLARED_CLASS (ref)
10954 ? access_private_node : access_public_node);
10956 /* First, make sure that any templates in base-classes are
10957 instantiated. This ensures that if we call ourselves recursively
10958 we do not get confused about which classes are marked and which
10959 are not. */
10960 basep = &base_list;
10961 while (*basep)
10963 tree basetype = TREE_VALUE (*basep);
10965 if (!(processing_template_decl && uses_template_parms (basetype))
10966 && !complete_type_or_else (basetype, NULL))
10967 /* An incomplete type. Remove it from the list. */
10968 *basep = TREE_CHAIN (*basep);
10969 else
10971 max_bases++;
10972 if (TREE_TYPE (*basep))
10973 max_vbases++;
10974 if (CLASS_TYPE_P (basetype))
10975 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10976 basep = &TREE_CHAIN (*basep);
10980 TYPE_MARKED_P (ref) = 1;
10982 /* The binfo slot should be empty, unless this is an (ill-formed)
10983 redefinition. */
10984 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10985 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10987 binfo = make_tree_binfo (max_bases);
10989 TYPE_BINFO (ref) = binfo;
10990 BINFO_OFFSET (binfo) = size_zero_node;
10991 BINFO_TYPE (binfo) = ref;
10993 /* Apply base-class info set up to the variants of this type. */
10994 fixup_type_variants (ref);
10996 if (max_bases)
10998 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10999 /* An aggregate cannot have baseclasses. */
11000 CLASSTYPE_NON_AGGREGATE (ref) = 1;
11002 if (TREE_CODE (ref) == UNION_TYPE)
11004 error ("derived union %qT invalid", ref);
11005 return false;
11009 if (max_bases > 1)
11011 if (TYPE_FOR_JAVA (ref))
11013 error ("Java class %qT cannot have multiple bases", ref);
11014 return false;
11018 if (max_vbases)
11020 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11022 if (TYPE_FOR_JAVA (ref))
11024 error ("Java class %qT cannot have virtual bases", ref);
11025 return false;
11029 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11031 tree access = TREE_PURPOSE (base_list);
11032 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11033 tree basetype = TREE_VALUE (base_list);
11035 if (access == access_default_node)
11036 access = default_access;
11038 if (PACK_EXPANSION_P (basetype))
11039 basetype = PACK_EXPANSION_PATTERN (basetype);
11040 if (TREE_CODE (basetype) == TYPE_DECL)
11041 basetype = TREE_TYPE (basetype);
11042 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11044 error ("base type %qT fails to be a struct or class type",
11045 basetype);
11046 return false;
11049 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11050 TYPE_FOR_JAVA (ref) = 1;
11052 base_binfo = NULL_TREE;
11053 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11055 base_binfo = TYPE_BINFO (basetype);
11056 /* The original basetype could have been a typedef'd type. */
11057 basetype = BINFO_TYPE (base_binfo);
11059 /* Inherit flags from the base. */
11060 TYPE_HAS_NEW_OPERATOR (ref)
11061 |= TYPE_HAS_NEW_OPERATOR (basetype);
11062 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11063 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11064 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11065 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11066 CLASSTYPE_DIAMOND_SHAPED_P (ref)
11067 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11068 CLASSTYPE_REPEATED_BASE_P (ref)
11069 |= CLASSTYPE_REPEATED_BASE_P (basetype);
11072 /* We must do this test after we've seen through a typedef
11073 type. */
11074 if (TYPE_MARKED_P (basetype))
11076 if (basetype == ref)
11077 error ("recursive type %qT undefined", basetype);
11078 else
11079 error ("duplicate base type %qT invalid", basetype);
11080 return false;
11083 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11084 /* Regenerate the pack expansion for the bases. */
11085 basetype = make_pack_expansion (basetype);
11087 TYPE_MARKED_P (basetype) = 1;
11089 base_binfo = copy_binfo (base_binfo, basetype, ref,
11090 &igo_prev, via_virtual);
11091 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11092 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11094 BINFO_BASE_APPEND (binfo, base_binfo);
11095 BINFO_BASE_ACCESS_APPEND (binfo, access);
11098 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11099 /* If we have space in the vbase vector, we must have shared at
11100 least one of them, and are therefore diamond shaped. */
11101 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11103 /* Unmark all the types. */
11104 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11105 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11106 TYPE_MARKED_P (ref) = 0;
11108 /* Now see if we have a repeated base type. */
11109 if (!CLASSTYPE_REPEATED_BASE_P (ref))
11111 for (base_binfo = binfo; base_binfo;
11112 base_binfo = TREE_CHAIN (base_binfo))
11114 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11116 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11117 break;
11119 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11121 for (base_binfo = binfo; base_binfo;
11122 base_binfo = TREE_CHAIN (base_binfo))
11123 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11124 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11125 else
11126 break;
11129 return true;
11133 /* Begin compiling the definition of an enumeration type.
11134 NAME is its name,
11136 UNDERLYING_TYPE is the type that will be used as the storage for
11137 the enumeration type. This should be NULL_TREE if no storage type
11138 was specified.
11140 SCOPED_ENUM_P is true if this is a scoped enumeration type.
11142 Returns the type object, as yet incomplete.
11143 Also records info about it so that build_enumerator
11144 may be used to declare the individual values as they are read. */
11146 tree
11147 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
11149 tree enumtype;
11151 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11153 /* If this is the real definition for a previous forward reference,
11154 fill in the contents in the same object that used to be the
11155 forward reference. */
11157 enumtype = lookup_and_check_tag (enum_type, name,
11158 /*tag_scope=*/ts_current,
11159 /*template_header_p=*/false);
11161 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11163 error_at (input_location, "multiple definition of %q#T", enumtype);
11164 error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11165 "previous definition here");
11166 /* Clear out TYPE_VALUES, and start again. */
11167 TYPE_VALUES (enumtype) = NULL_TREE;
11169 else
11171 /* In case of error, make a dummy enum to allow parsing to
11172 continue. */
11173 if (enumtype == error_mark_node)
11174 name = make_anon_name ();
11176 enumtype = cxx_make_type (ENUMERAL_TYPE);
11177 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11180 if (enumtype == error_mark_node)
11181 return enumtype;
11183 if (scoped_enum_p)
11185 SET_SCOPED_ENUM_P (enumtype, 1);
11186 begin_scope (sk_scoped_enum, enumtype);
11188 /* [C++0x dcl.enum]p5:
11190 If not explicitly specified, the underlying type of a scoped
11191 enumeration type is int. */
11192 if (!underlying_type)
11193 underlying_type = integer_type_node;
11196 if (underlying_type)
11198 if (CP_INTEGRAL_TYPE_P (underlying_type))
11200 TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11201 TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11202 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11203 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11204 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11205 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11206 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11207 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11208 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11209 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11211 else if (!dependent_type_p (underlying_type))
11212 error ("underlying type %<%T%> of %<%T%> must be an integral type",
11213 underlying_type, enumtype);
11216 return enumtype;
11219 /* After processing and defining all the values of an enumeration type,
11220 install their decls in the enumeration type and finish it off.
11221 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
11223 void
11224 finish_enum (tree enumtype)
11226 tree values;
11227 tree decl;
11228 tree minnode;
11229 tree maxnode;
11230 tree value;
11231 tree t;
11232 bool unsignedp;
11233 bool use_short_enum;
11234 int lowprec;
11235 int highprec;
11236 int precision;
11237 unsigned int itk;
11238 tree underlying_type = NULL_TREE;
11239 bool fixed_underlying_type_p
11240 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11242 /* We built up the VALUES in reverse order. */
11243 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11245 /* For an enum defined in a template, just set the type of the values;
11246 all further processing is postponed until the template is
11247 instantiated. We need to set the type so that tsubst of a CONST_DECL
11248 works. */
11249 if (processing_template_decl)
11251 for (values = TYPE_VALUES (enumtype);
11252 values;
11253 values = TREE_CHAIN (values))
11254 TREE_TYPE (TREE_VALUE (values)) = enumtype;
11255 if (at_function_scope_p ())
11256 add_stmt (build_min (TAG_DEFN, enumtype));
11257 if (SCOPED_ENUM_P (enumtype))
11258 finish_scope ();
11259 return;
11262 /* Determine the minimum and maximum values of the enumerators. */
11263 if (TYPE_VALUES (enumtype))
11265 minnode = maxnode = NULL_TREE;
11267 for (values = TYPE_VALUES (enumtype);
11268 values;
11269 values = TREE_CHAIN (values))
11271 decl = TREE_VALUE (values);
11273 /* [dcl.enum]: Following the closing brace of an enum-specifier,
11274 each enumerator has the type of its enumeration. Prior to the
11275 closing brace, the type of each enumerator is the type of its
11276 initializing value. */
11277 TREE_TYPE (decl) = enumtype;
11279 /* Update the minimum and maximum values, if appropriate. */
11280 value = DECL_INITIAL (decl);
11281 if (value == error_mark_node)
11282 value = integer_zero_node;
11283 /* Figure out what the minimum and maximum values of the
11284 enumerators are. */
11285 if (!minnode)
11286 minnode = maxnode = value;
11287 else if (tree_int_cst_lt (maxnode, value))
11288 maxnode = value;
11289 else if (tree_int_cst_lt (value, minnode))
11290 minnode = value;
11293 else
11294 /* [dcl.enum]
11296 If the enumerator-list is empty, the underlying type is as if
11297 the enumeration had a single enumerator with value 0. */
11298 minnode = maxnode = integer_zero_node;
11300 /* Compute the number of bits require to represent all values of the
11301 enumeration. We must do this before the type of MINNODE and
11302 MAXNODE are transformed, since tree_int_cst_min_precision relies
11303 on the TREE_TYPE of the value it is passed. */
11304 unsignedp = tree_int_cst_sgn (minnode) >= 0;
11305 lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11306 highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11307 precision = MAX (lowprec, highprec);
11309 if (!fixed_underlying_type_p)
11311 /* Determine the underlying type of the enumeration.
11313 [dcl.enum]
11315 The underlying type of an enumeration is an integral type that
11316 can represent all the enumerator values defined in the
11317 enumeration. It is implementation-defined which integral type is
11318 used as the underlying type for an enumeration except that the
11319 underlying type shall not be larger than int unless the value of
11320 an enumerator cannot fit in an int or unsigned int.
11322 We use "int" or an "unsigned int" as the underlying type, even if
11323 a smaller integral type would work, unless the user has
11324 explicitly requested that we use the smallest possible type. The
11325 user can request that for all enumerations with a command line
11326 flag, or for just one enumeration with an attribute. */
11328 use_short_enum = flag_short_enums
11329 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11331 for (itk = (use_short_enum ? itk_char : itk_int);
11332 itk != itk_none;
11333 itk++)
11335 underlying_type = integer_types[itk];
11336 if (TYPE_PRECISION (underlying_type) >= precision
11337 && TYPE_UNSIGNED (underlying_type) == unsignedp)
11338 break;
11340 if (itk == itk_none)
11342 /* DR 377
11344 IF no integral type can represent all the enumerator values, the
11345 enumeration is ill-formed. */
11346 error ("no integral type can represent all of the enumerator values "
11347 "for %qT", enumtype);
11348 precision = TYPE_PRECISION (long_long_integer_type_node);
11349 underlying_type = integer_types[itk_unsigned_long_long];
11352 /* [dcl.enum]
11354 The value of sizeof() applied to an enumeration type, an object
11355 of an enumeration type, or an enumerator, is the value of sizeof()
11356 applied to the underlying type. */
11357 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11358 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11359 SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11360 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11361 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11362 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11364 /* Set the underlying type of the enumeration type to the
11365 computed enumeration type, restricted to the enumerator
11366 values. */
11367 ENUM_UNDERLYING_TYPE (enumtype)
11368 = build_distinct_type_copy (underlying_type);
11369 set_min_and_max_values_for_integral_type
11370 (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11372 else
11373 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11375 /* Compute the minimum and maximum values for the type.
11377 [dcl.enum]
11379 For an enumeration where emin is the smallest enumerator and emax
11380 is the largest, the values of the enumeration are the values of the
11381 underlying type in the range bmin to bmax, where bmin and bmax are,
11382 respectively, the smallest and largest values of the smallest bit-
11383 field that can store emin and emax. */
11385 /* The middle-end currently assumes that types with TYPE_PRECISION
11386 narrower than their underlying type are suitably zero or sign
11387 extended to fill their mode. g++ doesn't make these guarantees.
11388 Until the middle-end can represent such paradoxical types, we
11389 set the TYPE_PRECISION to the width of the underlying type. */
11390 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11392 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11394 /* Convert each of the enumerators to the type of the underlying
11395 type of the enumeration. */
11396 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11398 location_t saved_location;
11400 decl = TREE_VALUE (values);
11401 saved_location = input_location;
11402 input_location = DECL_SOURCE_LOCATION (decl);
11403 if (fixed_underlying_type_p)
11404 /* If the enumeration type has a fixed underlying type, we
11405 already checked all of the enumerator values. */
11406 value = DECL_INITIAL (decl);
11407 else
11408 value = perform_implicit_conversion (underlying_type,
11409 DECL_INITIAL (decl),
11410 tf_warning_or_error);
11411 input_location = saved_location;
11413 /* Do not clobber shared ints. */
11414 value = copy_node (value);
11416 TREE_TYPE (value) = enumtype;
11417 DECL_INITIAL (decl) = value;
11420 /* Fix up all variant types of this enum type. */
11421 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11423 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11424 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11425 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11426 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11427 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11428 SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11429 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11430 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11431 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11432 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11433 ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11436 /* Finish up the scope of a scoped enumeration. */
11437 if (SCOPED_ENUM_P (enumtype))
11438 finish_scope ();
11440 /* Finish debugging output for this type. */
11441 rest_of_type_compilation (enumtype, namespace_bindings_p ());
11444 /* Build and install a CONST_DECL for an enumeration constant of the
11445 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11446 Assignment of sequential values by default is handled here. */
11448 void
11449 build_enumerator (tree name, tree value, tree enumtype)
11451 tree decl;
11452 tree context;
11453 tree type;
11455 /* If the VALUE was erroneous, pretend it wasn't there; that will
11456 result in the enum being assigned the next value in sequence. */
11457 if (value == error_mark_node)
11458 value = NULL_TREE;
11460 /* Remove no-op casts from the value. */
11461 if (value)
11462 STRIP_TYPE_NOPS (value);
11464 if (! processing_template_decl)
11466 /* Validate and default VALUE. */
11467 if (value != NULL_TREE)
11469 value = integral_constant_value (value);
11471 if (TREE_CODE (value) == INTEGER_CST)
11473 value = perform_integral_promotions (value);
11474 constant_expression_warning (value);
11476 else
11478 error ("enumerator value for %qD is not an integer constant", name);
11479 value = NULL_TREE;
11483 /* Default based on previous value. */
11484 if (value == NULL_TREE)
11486 if (TYPE_VALUES (enumtype))
11488 HOST_WIDE_INT hi;
11489 unsigned HOST_WIDE_INT lo;
11490 tree prev_value;
11491 bool overflowed;
11493 /* The next value is the previous value plus one.
11494 add_double doesn't know the type of the target expression,
11495 so we must check with int_fits_type_p as well. */
11496 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11497 if (error_operand_p (prev_value))
11498 value = error_mark_node;
11499 else
11501 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11502 TREE_INT_CST_HIGH (prev_value),
11503 1, 0, &lo, &hi);
11504 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11505 overflowed
11506 |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11508 if (overflowed)
11510 error ("overflow in enumeration values at %qD", name);
11511 value = error_mark_node;
11515 else
11516 value = integer_zero_node;
11519 /* Remove no-op casts from the value. */
11520 STRIP_TYPE_NOPS (value);
11522 /* If the underlying type of the enum is fixed, check whether
11523 the enumerator values fits in the underlying type. If it
11524 does not fit, the program is ill-formed [C++0x dcl.enum]. */
11525 if (ENUM_UNDERLYING_TYPE (enumtype)
11526 && value
11527 && TREE_CODE (value) == INTEGER_CST
11528 && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11530 error ("enumerator value %E is too large for underlying type %<%T%>",
11531 value, ENUM_UNDERLYING_TYPE (enumtype));
11533 /* Silently convert the value so that we can continue. */
11534 value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11535 value, tf_none);
11539 /* C++ associates enums with global, function, or class declarations. */
11540 context = current_scope ();
11542 /* Build the actual enumeration constant. Note that the enumeration
11543 constants have the underlying type of the enum (if it is fixed)
11544 or the type of their initializer (if the underlying type of the
11545 enum is not fixed):
11547 [ C++0x dcl.enum ]
11549 If the underlying type is fixed, the type of each enumerator
11550 prior to the closing brace is the underlying type; if the
11551 initializing value of an enumerator cannot be represented by
11552 the underlying type, the program is ill-formed. If the
11553 underlying type is not fixed, the type of each enumerator is
11554 the type of its initializing value.
11556 If the underlying type is not fixed, it will be computed by
11557 finish_enum and we will reset the type of this enumerator. Of
11558 course, if we're processing a template, there may be no value. */
11559 type = value ? TREE_TYPE (value) : NULL_TREE;
11561 if (context && context == current_class_type)
11562 /* This enum declaration is local to the class. We need the full
11563 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
11564 decl = build_lang_decl (CONST_DECL, name, type);
11565 else
11566 /* It's a global enum, or it's local to a function. (Note local to
11567 a function could mean local to a class method. */
11568 decl = build_decl (input_location, CONST_DECL, name, type);
11570 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11571 TREE_CONSTANT (decl) = 1;
11572 TREE_READONLY (decl) = 1;
11573 DECL_INITIAL (decl) = value;
11575 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
11576 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11577 on the TYPE_FIELDS list for `S'. (That's so that you can say
11578 things like `S::i' later.) */
11579 finish_member_declaration (decl);
11580 else
11581 pushdecl (decl);
11583 /* Add this enumeration constant to the list for this type. */
11584 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11587 /* Look for an enumerator with the given NAME within the enumeration
11588 type ENUMTYPE. This routine is used primarily for qualified name
11589 lookup into an enumerator in C++0x, e.g.,
11591 enum class Color { Red, Green, Blue };
11593 Color color = Color::Red;
11595 Returns the value corresponding to the enumerator, or
11596 NULL_TREE if no such enumerator was found. */
11597 tree
11598 lookup_enumerator (tree enumtype, tree name)
11600 tree e;
11601 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11603 e = purpose_member (name, TYPE_VALUES (enumtype));
11604 return e? TREE_VALUE (e) : NULL_TREE;
11608 /* We're defining DECL. Make sure that its type is OK. */
11610 static void
11611 check_function_type (tree decl, tree current_function_parms)
11613 tree fntype = TREE_TYPE (decl);
11614 tree return_type = complete_type (TREE_TYPE (fntype));
11616 /* In a function definition, arg types must be complete. */
11617 require_complete_types_for_parms (current_function_parms);
11619 /* constexpr functions must have literal argument types and
11620 literal return type. */
11621 validate_constexpr_fundecl (decl);
11623 if (dependent_type_p (return_type))
11624 return;
11625 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11626 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11628 tree args = TYPE_ARG_TYPES (fntype);
11630 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11631 error ("return type %q#T is incomplete", return_type);
11632 else
11633 error ("return type has Java class type %q#T", return_type);
11635 /* Make it return void instead. */
11636 if (TREE_CODE (fntype) == METHOD_TYPE)
11637 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11638 void_type_node,
11639 TREE_CHAIN (args));
11640 else
11641 fntype = build_function_type (void_type_node, args);
11642 fntype
11643 = build_exception_variant (fntype,
11644 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11645 fntype = (cp_build_type_attribute_variant
11646 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
11647 TREE_TYPE (decl) = fntype;
11649 else
11650 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11653 /* Create the FUNCTION_DECL for a function definition.
11654 DECLSPECS and DECLARATOR are the parts of the declaration;
11655 they describe the function's name and the type it returns,
11656 but twisted together in a fashion that parallels the syntax of C.
11658 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11659 DECLARATOR is really the DECL for the function we are about to
11660 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11661 indicating that the function is an inline defined in-class.
11663 This function creates a binding context for the function body
11664 as well as setting up the FUNCTION_DECL in current_function_decl.
11666 For C++, we must first check whether that datum makes any sense.
11667 For example, "class A local_a(1,2);" means that variable local_a
11668 is an aggregate of type A, which should have a constructor
11669 applied to it with the argument list [1, 2].
11671 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11672 or may be a BLOCK if the function has been defined previously
11673 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11674 error_mark_node if the function has never been defined, or
11675 a BLOCK if the function has been defined somewhere. */
11677 void
11678 start_preparsed_function (tree decl1, tree attrs, int flags)
11680 tree ctype = NULL_TREE;
11681 tree fntype;
11682 tree restype;
11683 int doing_friend = 0;
11684 struct cp_binding_level *bl;
11685 tree current_function_parms;
11686 struct c_fileinfo *finfo
11687 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11688 bool honor_interface;
11690 /* Sanity check. */
11691 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11692 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11694 fntype = TREE_TYPE (decl1);
11695 if (TREE_CODE (fntype) == METHOD_TYPE)
11696 ctype = TYPE_METHOD_BASETYPE (fntype);
11698 /* ISO C++ 11.4/5. A friend function defined in a class is in
11699 the (lexical) scope of the class in which it is defined. */
11700 if (!ctype && DECL_FRIEND_P (decl1))
11702 ctype = DECL_FRIEND_CONTEXT (decl1);
11704 /* CTYPE could be null here if we're dealing with a template;
11705 for example, `inline friend float foo()' inside a template
11706 will have no CTYPE set. */
11707 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11708 ctype = NULL_TREE;
11709 else
11710 doing_friend = 1;
11713 if (DECL_DECLARED_INLINE_P (decl1)
11714 && lookup_attribute ("noinline", attrs))
11715 warning (0, "inline function %q+D given attribute noinline", decl1);
11717 /* Handle gnu_inline attribute. */
11718 if (GNU_INLINE_P (decl1))
11720 DECL_EXTERNAL (decl1) = 1;
11721 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11722 DECL_INTERFACE_KNOWN (decl1) = 1;
11723 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11726 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11727 /* This is a constructor, we must ensure that any default args
11728 introduced by this definition are propagated to the clones
11729 now. The clones are used directly in overload resolution. */
11730 adjust_clone_args (decl1);
11732 /* Sometimes we don't notice that a function is a static member, and
11733 build a METHOD_TYPE for it. Fix that up now. */
11734 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11735 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11737 revert_static_member_fn (decl1);
11738 ctype = NULL_TREE;
11741 /* Set up current_class_type, and enter the scope of the class, if
11742 appropriate. */
11743 if (ctype)
11744 push_nested_class (ctype);
11745 else if (DECL_STATIC_FUNCTION_P (decl1))
11746 push_nested_class (DECL_CONTEXT (decl1));
11748 /* Now that we have entered the scope of the class, we must restore
11749 the bindings for any template parameters surrounding DECL1, if it
11750 is an inline member template. (Order is important; consider the
11751 case where a template parameter has the same name as a field of
11752 the class.) It is not until after this point that
11753 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
11754 if (flags & SF_INCLASS_INLINE)
11755 maybe_begin_member_template_processing (decl1);
11757 /* Effective C++ rule 15. */
11758 if (warn_ecpp
11759 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11760 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11761 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11763 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11764 error_mark_node is replaced below (in poplevel) with the BLOCK. */
11765 if (!DECL_INITIAL (decl1))
11766 DECL_INITIAL (decl1) = error_mark_node;
11768 /* This function exists in static storage.
11769 (This does not mean `static' in the C sense!) */
11770 TREE_STATIC (decl1) = 1;
11772 /* We must call push_template_decl after current_class_type is set
11773 up. (If we are processing inline definitions after exiting a
11774 class scope, current_class_type will be NULL_TREE until set above
11775 by push_nested_class.) */
11776 if (processing_template_decl)
11778 /* FIXME: Handle error_mark_node more gracefully. */
11779 tree newdecl1 = push_template_decl (decl1);
11780 if (newdecl1 != error_mark_node)
11781 decl1 = newdecl1;
11784 /* We are now in the scope of the function being defined. */
11785 current_function_decl = decl1;
11787 /* Save the parm names or decls from this function's declarator
11788 where store_parm_decls will find them. */
11789 current_function_parms = DECL_ARGUMENTS (decl1);
11791 /* Make sure the parameter and return types are reasonable. When
11792 you declare a function, these types can be incomplete, but they
11793 must be complete when you define the function. */
11794 check_function_type (decl1, current_function_parms);
11796 /* Build the return declaration for the function. */
11797 restype = TREE_TYPE (fntype);
11798 if (DECL_RESULT (decl1) == NULL_TREE)
11800 tree resdecl;
11802 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
11803 DECL_ARTIFICIAL (resdecl) = 1;
11804 DECL_IGNORED_P (resdecl) = 1;
11805 DECL_RESULT (decl1) = resdecl;
11807 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11810 /* Let the user know we're compiling this function. */
11811 announce_function (decl1);
11813 /* Record the decl so that the function name is defined.
11814 If we already have a decl for this name, and it is a FUNCTION_DECL,
11815 use the old decl. */
11816 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11818 /* A specialization is not used to guide overload resolution. */
11819 if (!DECL_FUNCTION_MEMBER_P (decl1)
11820 && !(DECL_USE_TEMPLATE (decl1) &&
11821 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11823 tree olddecl = pushdecl (decl1);
11825 if (olddecl == error_mark_node)
11826 /* If something went wrong when registering the declaration,
11827 use DECL1; we have to have a FUNCTION_DECL to use when
11828 parsing the body of the function. */
11830 else
11832 /* Otherwise, OLDDECL is either a previous declaration
11833 of the same function or DECL1 itself. */
11835 if (warn_missing_declarations
11836 && olddecl == decl1
11837 && !DECL_MAIN_P (decl1)
11838 && TREE_PUBLIC (decl1)
11839 && !DECL_DECLARED_INLINE_P (decl1))
11841 tree context;
11843 /* Check whether DECL1 is in an anonymous
11844 namespace. */
11845 for (context = DECL_CONTEXT (decl1);
11846 context;
11847 context = DECL_CONTEXT (context))
11849 if (TREE_CODE (context) == NAMESPACE_DECL
11850 && DECL_NAME (context) == NULL_TREE)
11851 break;
11854 if (context == NULL)
11855 warning (OPT_Wmissing_declarations,
11856 "no previous declaration for %q+D", decl1);
11859 decl1 = olddecl;
11862 else
11864 /* We need to set the DECL_CONTEXT. */
11865 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11866 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11868 fntype = TREE_TYPE (decl1);
11870 /* If #pragma weak applies, mark the decl appropriately now.
11871 The pragma only applies to global functions. Because
11872 determining whether or not the #pragma applies involves
11873 computing the mangled name for the declaration, we cannot
11874 apply the pragma until after we have merged this declaration
11875 with any previous declarations; if the original declaration
11876 has a linkage specification, that specification applies to
11877 the definition as well, and may affect the mangled name. */
11878 if (!DECL_CONTEXT (decl1))
11879 maybe_apply_pragma_weak (decl1);
11882 /* Reset this in case the call to pushdecl changed it. */
11883 current_function_decl = decl1;
11885 gcc_assert (DECL_INITIAL (decl1));
11887 /* This function may already have been parsed, in which case just
11888 return; our caller will skip over the body without parsing. */
11889 if (DECL_INITIAL (decl1) != error_mark_node)
11890 return;
11892 /* Initialize RTL machinery. We cannot do this until
11893 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11894 even when processing a template; this is how we get
11895 CFUN set up, and our per-function variables initialized.
11896 FIXME factor out the non-RTL stuff. */
11897 bl = current_binding_level;
11898 allocate_struct_function (decl1, processing_template_decl);
11900 /* Initialize the language data structures. Whenever we start
11901 a new function, we destroy temporaries in the usual way. */
11902 cfun->language = GGC_CNEW (struct language_function);
11903 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11904 current_binding_level = bl;
11906 /* Even though we're inside a function body, we still don't want to
11907 call expand_expr to calculate the size of a variable-sized array.
11908 We haven't necessarily assigned RTL to all variables yet, so it's
11909 not safe to try to expand expressions involving them. */
11910 cfun->dont_save_pending_sizes_p = 1;
11912 /* Start the statement-tree, start the tree now. */
11913 DECL_SAVED_TREE (decl1) = push_stmt_list ();
11915 /* If we are (erroneously) defining a function that we have already
11916 defined before, wipe out what we knew before. */
11917 if (!DECL_PENDING_INLINE_P (decl1))
11918 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11920 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11922 /* We know that this was set up by `grokclassfn'. We do not
11923 wait until `store_parm_decls', since evil parse errors may
11924 never get us to that point. Here we keep the consistency
11925 between `current_class_type' and `current_class_ptr'. */
11926 tree t = DECL_ARGUMENTS (decl1);
11928 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11929 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11931 cp_function_chain->x_current_class_ref
11932 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
11933 cp_function_chain->x_current_class_ptr = t;
11935 /* Constructors and destructors need to know whether they're "in
11936 charge" of initializing virtual base classes. */
11937 t = TREE_CHAIN (t);
11938 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11940 current_in_charge_parm = t;
11941 t = TREE_CHAIN (t);
11943 if (DECL_HAS_VTT_PARM_P (decl1))
11945 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11946 current_vtt_parm = t;
11950 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11951 /* Implicitly-defined methods (like the
11952 destructor for a class in which no destructor
11953 is explicitly declared) must not be defined
11954 until their definition is needed. So, we
11955 ignore interface specifications for
11956 compiler-generated functions. */
11957 && !DECL_ARTIFICIAL (decl1));
11959 if (DECL_INTERFACE_KNOWN (decl1))
11961 tree ctx = decl_function_context (decl1);
11963 if (DECL_NOT_REALLY_EXTERN (decl1))
11964 DECL_EXTERNAL (decl1) = 0;
11966 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11967 && TREE_PUBLIC (ctx))
11968 /* This is a function in a local class in an extern inline
11969 function. */
11970 comdat_linkage (decl1);
11972 /* If this function belongs to an interface, it is public.
11973 If it belongs to someone else's interface, it is also external.
11974 This only affects inlines and template instantiations. */
11975 else if (!finfo->interface_unknown && honor_interface)
11977 if (DECL_DECLARED_INLINE_P (decl1)
11978 || DECL_TEMPLATE_INSTANTIATION (decl1)
11979 || processing_template_decl)
11981 DECL_EXTERNAL (decl1)
11982 = (finfo->interface_only
11983 || (DECL_DECLARED_INLINE_P (decl1)
11984 && ! flag_implement_inlines
11985 && !DECL_VINDEX (decl1)));
11987 /* For WIN32 we also want to put these in linkonce sections. */
11988 maybe_make_one_only (decl1);
11990 else
11991 DECL_EXTERNAL (decl1) = 0;
11992 DECL_INTERFACE_KNOWN (decl1) = 1;
11993 /* If this function is in an interface implemented in this file,
11994 make sure that the back end knows to emit this function
11995 here. */
11996 if (!DECL_EXTERNAL (decl1))
11997 mark_needed (decl1);
11999 else if (finfo->interface_unknown && finfo->interface_only
12000 && honor_interface)
12002 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12003 interface, we will have both finfo->interface_unknown and
12004 finfo->interface_only set. In that case, we don't want to
12005 use the normal heuristics because someone will supply a
12006 #pragma implementation elsewhere, and deducing it here would
12007 produce a conflict. */
12008 comdat_linkage (decl1);
12009 DECL_EXTERNAL (decl1) = 0;
12010 DECL_INTERFACE_KNOWN (decl1) = 1;
12011 DECL_DEFER_OUTPUT (decl1) = 1;
12013 else
12015 /* This is a definition, not a reference.
12016 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
12017 if (!GNU_INLINE_P (decl1))
12018 DECL_EXTERNAL (decl1) = 0;
12020 if ((DECL_DECLARED_INLINE_P (decl1)
12021 || DECL_TEMPLATE_INSTANTIATION (decl1))
12022 && ! DECL_INTERFACE_KNOWN (decl1)
12023 /* Don't try to defer nested functions for now. */
12024 && ! decl_function_context (decl1))
12025 DECL_DEFER_OUTPUT (decl1) = 1;
12026 else
12027 DECL_INTERFACE_KNOWN (decl1) = 1;
12030 /* Determine the ELF visibility attribute for the function. We must not
12031 do this before calling "pushdecl", as we must allow "duplicate_decls"
12032 to merge any attributes appropriately. We also need to wait until
12033 linkage is set. */
12034 if (!DECL_CLONED_FUNCTION_P (decl1))
12035 determine_visibility (decl1);
12037 begin_scope (sk_function_parms, decl1);
12039 ++function_depth;
12041 if (DECL_DESTRUCTOR_P (decl1)
12042 || (DECL_CONSTRUCTOR_P (decl1)
12043 && targetm.cxx.cdtor_returns_this ()))
12045 cdtor_label = build_decl (input_location,
12046 LABEL_DECL, NULL_TREE, NULL_TREE);
12047 DECL_CONTEXT (cdtor_label) = current_function_decl;
12050 start_fname_decls ();
12052 store_parm_decls (current_function_parms);
12056 /* Like start_preparsed_function, except that instead of a
12057 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12059 Returns 1 on success. If the DECLARATOR is not suitable for a function
12060 (it defines a datum instead), we return 0, which tells
12061 yyparse to report a parse error. */
12064 start_function (cp_decl_specifier_seq *declspecs,
12065 const cp_declarator *declarator,
12066 tree attrs)
12068 tree decl1;
12070 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12071 if (decl1 == error_mark_node)
12072 return 0;
12073 /* If the declarator is not suitable for a function definition,
12074 cause a syntax error. */
12075 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12077 error ("invalid function declaration");
12078 return 0;
12081 if (DECL_MAIN_P (decl1))
12082 /* main must return int. grokfndecl should have corrected it
12083 (and issued a diagnostic) if the user got it wrong. */
12084 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12085 integer_type_node));
12087 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12089 return 1;
12092 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12093 FN. */
12095 static bool
12096 use_eh_spec_block (tree fn)
12098 return (flag_exceptions && flag_enforce_eh_specs
12099 && !processing_template_decl
12100 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
12101 /* We insert the EH_SPEC_BLOCK only in the original
12102 function; then, it is copied automatically to the
12103 clones. */
12104 && !DECL_CLONED_FUNCTION_P (fn)
12105 /* Implicitly-generated constructors and destructors have
12106 exception specifications. However, those specifications
12107 are the union of the possible exceptions specified by the
12108 constructors/destructors for bases and members, so no
12109 unallowed exception will ever reach this function. By
12110 not creating the EH_SPEC_BLOCK we save a little memory,
12111 and we avoid spurious warnings about unreachable
12112 code. */
12113 && !DECL_ARTIFICIAL (fn));
12116 /* Store the parameter declarations into the current function declaration.
12117 This is called after parsing the parameter declarations, before
12118 digesting the body of the function.
12120 Also install to binding contour return value identifier, if any. */
12122 static void
12123 store_parm_decls (tree current_function_parms)
12125 tree fndecl = current_function_decl;
12126 tree parm;
12128 /* This is a chain of any other decls that came in among the parm
12129 declarations. If a parm is declared with enum {foo, bar} x;
12130 then CONST_DECLs for foo and bar are put here. */
12131 tree nonparms = NULL_TREE;
12133 if (current_function_parms)
12135 /* This case is when the function was defined with an ANSI prototype.
12136 The parms already have decls, so we need not do anything here
12137 except record them as in effect
12138 and complain if any redundant old-style parm decls were written. */
12140 tree specparms = current_function_parms;
12141 tree next;
12143 /* Must clear this because it might contain TYPE_DECLs declared
12144 at class level. */
12145 current_binding_level->names = NULL;
12147 /* If we're doing semantic analysis, then we'll call pushdecl
12148 for each of these. We must do them in reverse order so that
12149 they end in the correct forward order. */
12150 specparms = nreverse (specparms);
12152 for (parm = specparms; parm; parm = next)
12154 next = TREE_CHAIN (parm);
12155 if (TREE_CODE (parm) == PARM_DECL)
12157 if (DECL_NAME (parm) == NULL_TREE
12158 || TREE_CODE (parm) != VOID_TYPE)
12159 pushdecl (parm);
12160 else
12161 error ("parameter %qD declared void", parm);
12163 else
12165 /* If we find an enum constant or a type tag,
12166 put it aside for the moment. */
12167 TREE_CHAIN (parm) = NULL_TREE;
12168 nonparms = chainon (nonparms, parm);
12172 /* Get the decls in their original chain order and record in the
12173 function. This is all and only the PARM_DECLs that were
12174 pushed into scope by the loop above. */
12175 DECL_ARGUMENTS (fndecl) = getdecls ();
12177 else
12178 DECL_ARGUMENTS (fndecl) = NULL_TREE;
12180 /* Now store the final chain of decls for the arguments
12181 as the decl-chain of the current lexical scope.
12182 Put the enumerators in as well, at the front so that
12183 DECL_ARGUMENTS is not modified. */
12184 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12186 if (use_eh_spec_block (current_function_decl))
12187 current_eh_spec_block = begin_eh_spec_block ();
12191 /* We have finished doing semantic analysis on DECL, but have not yet
12192 generated RTL for its body. Save away our current state, so that
12193 when we want to generate RTL later we know what to do. */
12195 static void
12196 save_function_data (tree decl)
12198 struct language_function *f;
12200 /* Save the language-specific per-function data so that we can
12201 get it back when we really expand this function. */
12202 gcc_assert (!DECL_PENDING_INLINE_P (decl));
12204 /* Make a copy. */
12205 f = GGC_NEW (struct language_function);
12206 memcpy (f, cp_function_chain, sizeof (struct language_function));
12207 DECL_SAVED_FUNCTION_DATA (decl) = f;
12209 /* Clear out the bits we don't need. */
12210 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12211 f->bindings = NULL;
12212 f->x_local_names = NULL;
12216 /* Set the return value of the constructor (if present). */
12218 static void
12219 finish_constructor_body (void)
12221 tree val;
12222 tree exprstmt;
12224 if (targetm.cxx.cdtor_returns_this ()
12225 && (! TYPE_FOR_JAVA (current_class_type)))
12227 /* Any return from a constructor will end up here. */
12228 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12230 val = DECL_ARGUMENTS (current_function_decl);
12231 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12232 DECL_RESULT (current_function_decl), val);
12233 /* Return the address of the object. */
12234 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12235 add_stmt (exprstmt);
12239 /* Do all the processing for the beginning of a destructor; set up the
12240 vtable pointers and cleanups for bases and members. */
12242 static void
12243 begin_destructor_body (void)
12245 tree compound_stmt;
12247 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12248 issued an error message. We still want to try to process the
12249 body of the function, but initialize_vtbl_ptrs will crash if
12250 TYPE_BINFO is NULL. */
12251 if (COMPLETE_TYPE_P (current_class_type))
12253 compound_stmt = begin_compound_stmt (0);
12254 /* Make all virtual function table pointers in non-virtual base
12255 classes point to CURRENT_CLASS_TYPE's virtual function
12256 tables. */
12257 initialize_vtbl_ptrs (current_class_ptr);
12258 finish_compound_stmt (compound_stmt);
12260 /* And insert cleanups for our bases and members so that they
12261 will be properly destroyed if we throw. */
12262 push_base_cleanups ();
12266 /* At the end of every destructor we generate code to delete the object if
12267 necessary. Do that now. */
12269 static void
12270 finish_destructor_body (void)
12272 tree exprstmt;
12274 /* Any return from a destructor will end up here; that way all base
12275 and member cleanups will be run when the function returns. */
12276 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12278 /* In a virtual destructor, we must call delete. */
12279 if (DECL_VIRTUAL_P (current_function_decl))
12281 tree if_stmt;
12282 tree virtual_size = cxx_sizeof (current_class_type);
12284 /* [class.dtor]
12286 At the point of definition of a virtual destructor (including
12287 an implicit definition), non-placement operator delete shall
12288 be looked up in the scope of the destructor's class and if
12289 found shall be accessible and unambiguous. */
12290 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12291 virtual_size,
12292 /*global_p=*/false,
12293 /*placement=*/NULL_TREE,
12294 /*alloc_fn=*/NULL_TREE);
12296 if_stmt = begin_if_stmt ();
12297 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12298 current_in_charge_parm,
12299 integer_one_node),
12300 if_stmt);
12301 finish_expr_stmt (exprstmt);
12302 finish_then_clause (if_stmt);
12303 finish_if_stmt (if_stmt);
12306 if (targetm.cxx.cdtor_returns_this ())
12308 tree val;
12310 val = DECL_ARGUMENTS (current_function_decl);
12311 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12312 DECL_RESULT (current_function_decl), val);
12313 /* Return the address of the object. */
12314 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12315 add_stmt (exprstmt);
12319 /* Do the necessary processing for the beginning of a function body, which
12320 in this case includes member-initializers, but not the catch clauses of
12321 a function-try-block. Currently, this means opening a binding level
12322 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
12324 tree
12325 begin_function_body (void)
12327 tree stmt;
12329 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12330 return NULL_TREE;
12332 if (processing_template_decl)
12333 /* Do nothing now. */;
12334 else
12335 /* Always keep the BLOCK node associated with the outermost pair of
12336 curly braces of a function. These are needed for correct
12337 operation of dwarfout.c. */
12338 keep_next_level (true);
12340 stmt = begin_compound_stmt (BCS_FN_BODY);
12342 if (processing_template_decl)
12343 /* Do nothing now. */;
12344 else if (DECL_DESTRUCTOR_P (current_function_decl))
12345 begin_destructor_body ();
12347 return stmt;
12350 /* Do the processing for the end of a function body. Currently, this means
12351 closing out the cleanups for fully-constructed bases and members, and in
12352 the case of the destructor, deleting the object if desired. Again, this
12353 is only meaningful for [cd]tors, since they are the only functions where
12354 there is a significant distinction between the main body and any
12355 function catch clauses. Handling, say, main() return semantics here
12356 would be wrong, as flowing off the end of a function catch clause for
12357 main() would also need to return 0. */
12359 void
12360 finish_function_body (tree compstmt)
12362 if (compstmt == NULL_TREE)
12363 return;
12365 /* Close the block. */
12366 finish_compound_stmt (compstmt);
12368 if (processing_template_decl)
12369 /* Do nothing now. */;
12370 else if (DECL_CONSTRUCTOR_P (current_function_decl))
12371 finish_constructor_body ();
12372 else if (DECL_DESTRUCTOR_P (current_function_decl))
12373 finish_destructor_body ();
12376 /* Given a function, returns the BLOCK corresponding to the outermost level
12377 of curly braces, skipping the artificial block created for constructor
12378 initializers. */
12380 tree
12381 outer_curly_brace_block (tree fndecl)
12383 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12384 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12385 /* Skip the artificial function body block. */
12386 block = BLOCK_SUBBLOCKS (block);
12387 return block;
12390 /* Finish up a function declaration and compile that function
12391 all the way to assembler language output. The free the storage
12392 for the function definition.
12394 FLAGS is a bitwise or of the following values:
12395 2 - INCLASS_INLINE
12396 We just finished processing the body of an in-class inline
12397 function definition. (This processing will have taken place
12398 after the class definition is complete.) */
12400 tree
12401 finish_function (int flags)
12403 tree fndecl = current_function_decl;
12404 tree fntype, ctype = NULL_TREE;
12405 int inclass_inline = (flags & 2) != 0;
12406 int nested;
12408 /* When we get some parse errors, we can end up without a
12409 current_function_decl, so cope. */
12410 if (fndecl == NULL_TREE)
12411 return error_mark_node;
12413 gcc_assert (!defer_mark_used_calls);
12414 defer_mark_used_calls = true;
12416 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12417 && DECL_VIRTUAL_P (fndecl)
12418 && !processing_template_decl)
12420 tree fnclass = DECL_CONTEXT (fndecl);
12421 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12422 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12425 nested = function_depth > 1;
12426 fntype = TREE_TYPE (fndecl);
12428 /* TREE_READONLY (fndecl) = 1;
12429 This caused &foo to be of type ptr-to-const-function
12430 which then got a warning when stored in a ptr-to-function variable. */
12432 gcc_assert (building_stmt_tree ());
12433 /* The current function is being defined, so its DECL_INITIAL should
12434 be set, and unless there's a multiple definition, it should be
12435 error_mark_node. */
12436 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12438 /* For a cloned function, we've already got all the code we need;
12439 there's no need to add any extra bits. */
12440 if (!DECL_CLONED_FUNCTION_P (fndecl))
12442 if (DECL_MAIN_P (current_function_decl))
12444 tree stmt;
12446 /* Make it so that `main' always returns 0 by default (or
12447 1 for VMS). */
12448 #if VMS_TARGET
12449 stmt = finish_return_stmt (integer_one_node);
12450 #else
12451 stmt = finish_return_stmt (integer_zero_node);
12452 #endif
12453 /* Hack. We don't want the middle-end to warn that this
12454 return is unreachable, so put the statement on the
12455 special line 0. */
12457 location_t linezero = linemap_line_start (line_table, 0, 1);
12458 SET_EXPR_LOCATION (stmt, linezero);
12462 if (use_eh_spec_block (current_function_decl))
12463 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12464 (TREE_TYPE (current_function_decl)),
12465 current_eh_spec_block);
12468 /* If we're saving up tree structure, tie off the function now. */
12469 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12471 finish_fname_decls ();
12473 /* If this function can't throw any exceptions, remember that. */
12474 if (!processing_template_decl
12475 && !cp_function_chain->can_throw
12476 && !flag_non_call_exceptions
12477 && !DECL_REPLACEABLE_P (fndecl))
12478 TREE_NOTHROW (fndecl) = 1;
12480 /* This must come after expand_function_end because cleanups might
12481 have declarations (from inline functions) that need to go into
12482 this function's blocks. */
12484 /* If the current binding level isn't the outermost binding level
12485 for this function, either there is a bug, or we have experienced
12486 syntax errors and the statement tree is malformed. */
12487 if (current_binding_level->kind != sk_function_parms)
12489 /* Make sure we have already experienced errors. */
12490 gcc_assert (errorcount);
12492 /* Throw away the broken statement tree and extra binding
12493 levels. */
12494 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12496 while (current_binding_level->kind != sk_function_parms)
12498 if (current_binding_level->kind == sk_class)
12499 pop_nested_class ();
12500 else
12501 poplevel (0, 0, 0);
12504 poplevel (1, 0, 1);
12506 /* Statements should always be full-expressions at the outermost set
12507 of curly braces for a function. */
12508 gcc_assert (stmts_are_full_exprs_p ());
12510 /* Set up the named return value optimization, if we can. Candidate
12511 variables are selected in check_return_expr. */
12512 if (current_function_return_value)
12514 tree r = current_function_return_value;
12515 tree outer;
12517 if (r != error_mark_node
12518 /* This is only worth doing for fns that return in memory--and
12519 simpler, since we don't have to worry about promoted modes. */
12520 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12521 /* Only allow this for variables declared in the outer scope of
12522 the function so we know that their lifetime always ends with a
12523 return; see g++.dg/opt/nrv6.C. We could be more flexible if
12524 we were to do this optimization in tree-ssa. */
12525 && (outer = outer_curly_brace_block (fndecl))
12526 && chain_member (r, BLOCK_VARS (outer)))
12527 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12529 current_function_return_value = NULL_TREE;
12532 /* Remember that we were in class scope. */
12533 if (current_class_name)
12534 ctype = current_class_type;
12536 /* Must mark the RESULT_DECL as being in this function. */
12537 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12539 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12540 to the FUNCTION_DECL node itself. */
12541 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12543 /* Save away current state, if appropriate. */
12544 if (!processing_template_decl)
12545 save_function_data (fndecl);
12547 /* Complain if there's just no return statement. */
12548 if (warn_return_type
12549 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12550 && !dependent_type_p (TREE_TYPE (fntype))
12551 && !current_function_returns_value && !current_function_returns_null
12552 /* Don't complain if we abort or throw. */
12553 && !current_function_returns_abnormally
12554 /* Don't complain if we are declared noreturn. */
12555 && !TREE_THIS_VOLATILE (fndecl)
12556 && !DECL_NAME (DECL_RESULT (fndecl))
12557 && !TREE_NO_WARNING (fndecl)
12558 /* Structor return values (if any) are set by the compiler. */
12559 && !DECL_CONSTRUCTOR_P (fndecl)
12560 && !DECL_DESTRUCTOR_P (fndecl))
12562 warning (OPT_Wreturn_type,
12563 "no return statement in function returning non-void");
12564 TREE_NO_WARNING (fndecl) = 1;
12567 /* Store the end of the function, so that we get good line number
12568 info for the epilogue. */
12569 cfun->function_end_locus = input_location;
12571 /* Genericize before inlining. */
12572 if (!processing_template_decl)
12574 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12575 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
12576 cp_genericize (fndecl);
12577 /* Clear out the bits we don't need. */
12578 f->x_current_class_ptr = NULL;
12579 f->x_current_class_ref = NULL;
12580 f->x_eh_spec_block = NULL;
12581 f->x_in_charge_parm = NULL;
12582 f->x_vtt_parm = NULL;
12583 f->x_return_value = NULL;
12584 f->bindings = NULL;
12585 f->extern_decl_map = NULL;
12587 /* Clear out the bits we don't need. */
12588 local_names = NULL;
12590 /* We're leaving the context of this function, so zap cfun. It's still in
12591 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
12592 set_cfun (NULL);
12593 current_function_decl = NULL;
12595 /* If this is an in-class inline definition, we may have to pop the
12596 bindings for the template parameters that we added in
12597 maybe_begin_member_template_processing when start_function was
12598 called. */
12599 if (inclass_inline)
12600 maybe_end_member_template_processing ();
12602 /* Leave the scope of the class. */
12603 if (ctype)
12604 pop_nested_class ();
12606 --function_depth;
12608 /* Clean up. */
12609 if (! nested)
12610 /* Let the error reporting routines know that we're outside a
12611 function. For a nested function, this value is used in
12612 cxx_pop_function_context and then reset via pop_function_context. */
12613 current_function_decl = NULL_TREE;
12615 defer_mark_used_calls = false;
12616 if (deferred_mark_used_calls)
12618 unsigned int i;
12619 tree decl;
12621 for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12622 mark_used (decl);
12623 VEC_free (tree, gc, deferred_mark_used_calls);
12626 return fndecl;
12629 /* Create the FUNCTION_DECL for a function definition.
12630 DECLSPECS and DECLARATOR are the parts of the declaration;
12631 they describe the return type and the name of the function,
12632 but twisted together in a fashion that parallels the syntax of C.
12634 This function creates a binding context for the function body
12635 as well as setting up the FUNCTION_DECL in current_function_decl.
12637 Returns a FUNCTION_DECL on success.
12639 If the DECLARATOR is not suitable for a function (it defines a datum
12640 instead), we return 0, which tells yyparse to report a parse error.
12642 May return void_type_node indicating that this method is actually
12643 a friend. See grokfield for more details.
12645 Came here with a `.pushlevel' .
12647 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12648 CHANGES TO CODE IN `grokfield'. */
12650 tree
12651 grokmethod (cp_decl_specifier_seq *declspecs,
12652 const cp_declarator *declarator, tree attrlist)
12654 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12655 &attrlist);
12657 if (fndecl == error_mark_node)
12658 return error_mark_node;
12660 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12662 error ("invalid member function declaration");
12663 return error_mark_node;
12666 if (attrlist)
12667 cplus_decl_attributes (&fndecl, attrlist, 0);
12669 /* Pass friends other than inline friend functions back. */
12670 if (fndecl == void_type_node)
12671 return fndecl;
12673 if (DECL_IN_AGGR_P (fndecl))
12675 if (DECL_CONTEXT (fndecl)
12676 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12677 error ("%qD is already defined in class %qT", fndecl,
12678 DECL_CONTEXT (fndecl));
12679 return error_mark_node;
12682 check_template_shadow (fndecl);
12684 DECL_DECLARED_INLINE_P (fndecl) = 1;
12685 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12687 /* We process method specializations in finish_struct_1. */
12688 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12690 fndecl = push_template_decl (fndecl);
12691 if (fndecl == error_mark_node)
12692 return fndecl;
12695 if (! DECL_FRIEND_P (fndecl))
12697 if (TREE_CHAIN (fndecl))
12699 fndecl = copy_node (fndecl);
12700 TREE_CHAIN (fndecl) = NULL_TREE;
12704 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
12706 DECL_IN_AGGR_P (fndecl) = 1;
12707 return fndecl;
12711 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12712 we can lay it out later, when and if its type becomes complete. */
12714 void
12715 maybe_register_incomplete_var (tree var)
12717 gcc_assert (TREE_CODE (var) == VAR_DECL);
12719 /* Keep track of variables with incomplete types. */
12720 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12721 && DECL_EXTERNAL (var))
12723 tree inner_type = TREE_TYPE (var);
12725 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12726 inner_type = TREE_TYPE (inner_type);
12727 inner_type = TYPE_MAIN_VARIANT (inner_type);
12729 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12730 /* RTTI TD entries are created while defining the type_info. */
12731 || (TYPE_LANG_SPECIFIC (inner_type)
12732 && TYPE_BEING_DEFINED (inner_type)))
12733 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12737 /* Called when a class type (given by TYPE) is defined. If there are
12738 any existing VAR_DECLs whose type has been completed by this
12739 declaration, update them now. */
12741 void
12742 complete_vars (tree type)
12744 tree *list = &incomplete_vars;
12746 gcc_assert (CLASS_TYPE_P (type));
12747 while (*list)
12749 if (same_type_p (type, TREE_PURPOSE (*list)))
12751 tree var = TREE_VALUE (*list);
12752 tree type = TREE_TYPE (var);
12753 /* Complete the type of the variable. The VAR_DECL itself
12754 will be laid out in expand_expr. */
12755 complete_type (type);
12756 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12757 /* Remove this entry from the list. */
12758 *list = TREE_CHAIN (*list);
12760 else
12761 list = &TREE_CHAIN (*list);
12764 /* Check for pending declarations which may have abstract type. */
12765 complete_type_check_abstract (type);
12768 /* If DECL is of a type which needs a cleanup, build and return an
12769 expression to perform that cleanup here. Return NULL_TREE if no
12770 cleanup need be done. */
12772 tree
12773 cxx_maybe_build_cleanup (tree decl)
12775 tree type;
12776 tree attr;
12777 tree cleanup;
12779 /* Assume no cleanup is required. */
12780 cleanup = NULL_TREE;
12782 if (error_operand_p (decl))
12783 return cleanup;
12785 /* Handle "__attribute__((cleanup))". We run the cleanup function
12786 before the destructor since the destructor is what actually
12787 terminates the lifetime of the object. */
12788 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12789 if (attr)
12791 tree id;
12792 tree fn;
12793 tree arg;
12795 /* Get the name specified by the user for the cleanup function. */
12796 id = TREE_VALUE (TREE_VALUE (attr));
12797 /* Look up the name to find the cleanup function to call. It is
12798 important to use lookup_name here because that is what is
12799 used in c-common.c:handle_cleanup_attribute when performing
12800 initial checks on the attribute. Note that those checks
12801 include ensuring that the function found is not an overloaded
12802 function, or an object with an overloaded call operator,
12803 etc.; we can rely on the fact that the function found is an
12804 ordinary FUNCTION_DECL. */
12805 fn = lookup_name (id);
12806 arg = build_address (decl);
12807 mark_used (decl);
12808 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12809 arg),
12810 tf_warning_or_error);
12812 /* Handle ordinary C++ destructors. */
12813 type = TREE_TYPE (decl);
12814 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12816 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12817 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12818 && CLASSTYPE_VBASECLASSES (type));
12819 tree addr;
12820 tree call;
12822 if (TREE_CODE (type) == ARRAY_TYPE)
12823 addr = decl;
12824 else
12825 addr = build_address (decl);
12827 /* Optimize for space over speed here. */
12828 if (!has_vbases || flag_expensive_optimizations)
12829 flags |= LOOKUP_NONVIRTUAL;
12831 call = build_delete (TREE_TYPE (addr), addr,
12832 sfk_complete_destructor, flags, 0);
12833 if (cleanup)
12834 cleanup = build_compound_expr (input_location, cleanup, call);
12835 else
12836 cleanup = call;
12839 return cleanup;
12842 /* When a stmt has been parsed, this function is called. */
12844 void
12845 finish_stmt (void)
12849 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
12850 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
12851 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
12853 tree
12854 static_fn_type (tree memfntype)
12856 tree fntype;
12857 tree args;
12858 int quals;
12860 if (TYPE_PTRMEMFUNC_P (memfntype))
12861 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
12862 if (POINTER_TYPE_P (memfntype)
12863 || TREE_CODE (memfntype) == FUNCTION_DECL)
12864 memfntype = TREE_TYPE (memfntype);
12865 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
12866 return memfntype;
12867 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
12868 args = TYPE_ARG_TYPES (memfntype);
12869 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
12870 quals = cp_type_quals (TREE_TYPE (TREE_VALUE (args)));
12871 fntype = build_qualified_type (fntype, quals);
12872 fntype = (cp_build_type_attribute_variant
12873 (fntype, TYPE_ATTRIBUTES (memfntype)));
12874 fntype = (build_exception_variant
12875 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
12876 return fntype;
12879 /* DECL was originally constructed as a non-static member function,
12880 but turned out to be static. Update it accordingly. */
12882 void
12883 revert_static_member_fn (tree decl)
12885 TREE_TYPE (decl) = static_fn_type (decl);
12887 if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
12888 error ("static member function %q#D declared with type qualifiers", decl);
12890 if (DECL_ARGUMENTS (decl))
12891 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12892 DECL_STATIC_FUNCTION_P (decl) = 1;
12895 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12896 one of the language-independent trees. */
12898 enum cp_tree_node_structure_enum
12899 cp_tree_node_structure (union lang_tree_node * t)
12901 switch (TREE_CODE (&t->generic))
12903 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
12904 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
12905 case OVERLOAD: return TS_CP_OVERLOAD;
12906 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12907 case PTRMEM_CST: return TS_CP_PTRMEM;
12908 case BASELINK: return TS_CP_BASELINK;
12909 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
12910 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
12911 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
12912 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
12913 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
12914 default: return TS_CP_GENERIC;
12918 /* Build the void_list_node (void_type_node having been created). */
12919 tree
12920 build_void_list_node (void)
12922 tree t = build_tree_list (NULL_TREE, void_type_node);
12923 return t;
12926 bool
12927 cp_missing_noreturn_ok_p (tree decl)
12929 /* A missing noreturn is ok for the `main' function. */
12930 return DECL_MAIN_P (decl);
12933 /* Return the COMDAT group into which DECL should be placed. */
12935 tree
12936 cxx_comdat_group (tree decl)
12938 tree name;
12940 /* Virtual tables, construction virtual tables, and virtual table
12941 tables all go in a single COMDAT group, named after the primary
12942 virtual table. */
12943 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12944 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12945 /* For all other DECLs, the COMDAT group is the mangled name of the
12946 declaration itself. */
12947 else
12949 while (DECL_THUNK_P (decl))
12951 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12952 into the same section as the target function. In that case
12953 we must return target's name. */
12954 tree target = THUNK_TARGET (decl);
12955 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12956 && DECL_SECTION_NAME (target) != NULL
12957 && DECL_ONE_ONLY (target))
12958 decl = target;
12959 else
12960 break;
12962 name = DECL_ASSEMBLER_NAME (decl);
12965 return name;
12968 #include "gt-cp-decl.h"