* cp-objcp-common.c (cp_expr_size): Return NULL in the case
[official-gcc.git] / gcc / cp / decl.c
blob8a55e417d40e65bbfdbd0881e50b75282bda4d6b
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 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
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 "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "hashtab.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "intl.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "tree-flow.h"
56 static tree grokparms (cp_parameter_declarator *, tree *);
57 static const char *redeclaration_error_message (tree, tree);
59 static int decl_jump_unsafe (tree);
60 static void require_complete_types_for_parms (tree);
61 static int ambi_op_p (enum tree_code);
62 static int unary_op_p (enum tree_code);
63 static void push_local_name (tree);
64 static tree grok_reference_init (tree, tree, tree, tree *);
65 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
66 int, int, tree);
67 static void record_unknown_type (tree, const char *);
68 static tree builtin_function_1 (tree, tree);
69 static tree build_library_fn_1 (tree, enum tree_code, tree);
70 static int member_function_or_else (tree, tree, enum overload_flags);
71 static void bad_specifiers (tree, const char *, int, int, int, int,
72 int);
73 static void check_for_uninitialized_const_var (tree);
74 static hashval_t typename_hash (const void *);
75 static int typename_compare (const void *, const void *);
76 static tree local_variable_p_walkfn (tree *, int *, void *);
77 static tree record_builtin_java_type (const char *, int);
78 static const char *tag_name (enum tag_types);
79 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
80 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
81 static void maybe_deduce_size_from_array_init (tree, tree);
82 static void layout_var_decl (tree);
83 static void maybe_commonize_var (tree);
84 static tree check_initializer (tree, tree, int, tree *);
85 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
86 static void save_function_data (tree);
87 static void check_function_type (tree, tree);
88 static void finish_constructor_body (void);
89 static void begin_destructor_body (void);
90 static void finish_destructor_body (void);
91 static tree create_array_type_for_decl (tree, tree, tree);
92 static tree get_atexit_node (void);
93 static tree get_dso_handle_node (void);
94 static tree start_cleanup_fn (void);
95 static void end_cleanup_fn (void);
96 static tree cp_make_fname_decl (tree, int);
97 static void initialize_predefined_identifiers (void);
98 static tree check_special_function_return_type
99 (special_function_kind, tree, tree);
100 static tree push_cp_library_fn (enum tree_code, tree);
101 static tree build_cp_library_fn (tree, enum tree_code, tree);
102 static void store_parm_decls (tree);
103 static void initialize_local_var (tree, tree);
104 static void expand_static_init (tree, tree);
105 static tree next_initializable_field (tree);
107 /* The following symbols are subsumed in the cp_global_trees array, and
108 listed here individually for documentation purposes.
110 C++ extensions
111 tree wchar_decl_node;
113 tree vtable_entry_type;
114 tree delta_type_node;
115 tree __t_desc_type_node;
117 tree class_type_node;
118 tree unknown_type_node;
120 Array type `vtable_entry_type[]'
122 tree vtbl_type_node;
123 tree vtbl_ptr_type_node;
125 Namespaces,
127 tree std_node;
128 tree abi_node;
130 A FUNCTION_DECL which can call `abort'. Not necessarily the
131 one that the user will declare, but sufficient to be called
132 by routines that want to abort the program.
134 tree abort_fndecl;
136 The FUNCTION_DECL for the default `::operator delete'.
138 tree global_delete_fndecl;
140 Used by RTTI
141 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
142 tree tinfo_var_id; */
144 tree cp_global_trees[CPTI_MAX];
146 /* Indicates that there is a type value in some namespace, although
147 that is not necessarily in scope at the moment. */
149 tree global_type_node;
151 /* The node that holds the "name" of the global scope. */
152 tree global_scope_name;
154 #define local_names cp_function_chain->x_local_names
156 /* A list of objects which have constructors or destructors
157 which reside in the global scope. The decl is stored in
158 the TREE_VALUE slot and the initializer is stored
159 in the TREE_PURPOSE slot. */
160 tree static_aggregates;
162 /* -- end of C++ */
164 /* A node for the integer constants 2, and 3. */
166 tree integer_two_node, integer_three_node;
168 /* Used only for jumps to as-yet undefined labels, since jumps to
169 defined labels can have their validity checked immediately. */
171 struct named_label_use_entry GTY(())
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 named_label_entry GTY(())
196 /* The decl itself. */
197 tree label_decl;
199 /* The binding level to which the label is *currently* attached.
200 This is initially set to the binding level in which the label
201 is defined, but is modified as scopes are closed. */
202 struct cp_binding_level *binding_level;
203 /* The head of the names list that was current when the label was
204 defined, or the inner scope popped. These are the decls that will
205 be skipped when jumping to the label. */
206 tree names_in_scope;
207 /* A tree list of all decls from all binding levels that would be
208 crossed by a backward branch to the label. */
209 tree bad_decls;
211 /* A list of uses of the label, before the label is defined. */
212 struct named_label_use_entry *uses;
214 /* The following bits are set after the label is defined, and are
215 updated as scopes are popped. They indicate that a backward jump
216 to the label will illegally enter a scope of the given flavor. */
217 bool in_try_scope;
218 bool in_catch_scope;
219 bool in_omp_scope;
222 #define named_labels cp_function_chain->x_named_labels
224 /* The number of function bodies which we are currently processing.
225 (Zero if we are at namespace scope, one inside the body of a
226 function, two inside the body of a function in a local class, etc.) */
227 int function_depth;
229 /* States indicating how grokdeclarator() should handle declspecs marked
230 with __attribute__((deprecated)). An object declared as
231 __attribute__((deprecated)) suppresses warnings of uses of other
232 deprecated items. */
234 enum deprecated_states {
235 DEPRECATED_NORMAL,
236 DEPRECATED_SUPPRESS
239 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
242 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
243 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
244 time the VAR_DECL was declared, the type was incomplete. */
246 static GTY(()) tree incomplete_vars;
248 /* Returns the kind of template specialization we are currently
249 processing, given that it's declaration contained N_CLASS_SCOPES
250 explicit scope qualifications. */
252 tmpl_spec_kind
253 current_tmpl_spec_kind (int n_class_scopes)
255 int n_template_parm_scopes = 0;
256 int seen_specialization_p = 0;
257 int innermost_specialization_p = 0;
258 struct cp_binding_level *b;
260 /* Scan through the template parameter scopes. */
261 for (b = current_binding_level;
262 b->kind == sk_template_parms;
263 b = b->level_chain)
265 /* If we see a specialization scope inside a parameter scope,
266 then something is wrong. That corresponds to a declaration
267 like:
269 template <class T> template <> ...
271 which is always invalid since [temp.expl.spec] forbids the
272 specialization of a class member template if the enclosing
273 class templates are not explicitly specialized as well. */
274 if (b->explicit_spec_p)
276 if (n_template_parm_scopes == 0)
277 innermost_specialization_p = 1;
278 else
279 seen_specialization_p = 1;
281 else if (seen_specialization_p == 1)
282 return tsk_invalid_member_spec;
284 ++n_template_parm_scopes;
287 /* Handle explicit instantiations. */
288 if (processing_explicit_instantiation)
290 if (n_template_parm_scopes != 0)
291 /* We've seen a template parameter list during an explicit
292 instantiation. For example:
294 template <class T> template void f(int);
296 This is erroneous. */
297 return tsk_invalid_expl_inst;
298 else
299 return tsk_expl_inst;
302 if (n_template_parm_scopes < n_class_scopes)
303 /* We've not seen enough template headers to match all the
304 specialized classes present. For example:
306 template <class T> void R<T>::S<T>::f(int);
308 This is invalid; there needs to be one set of template
309 parameters for each class. */
310 return tsk_insufficient_parms;
311 else if (n_template_parm_scopes == n_class_scopes)
312 /* We're processing a non-template declaration (even though it may
313 be a member of a template class.) For example:
315 template <class T> void S<T>::f(int);
317 The `class T' maches the `S<T>', leaving no template headers
318 corresponding to the `f'. */
319 return tsk_none;
320 else if (n_template_parm_scopes > n_class_scopes + 1)
321 /* We've got too many template headers. For example:
323 template <> template <class T> void f (T);
325 There need to be more enclosing classes. */
326 return tsk_excessive_parms;
327 else
328 /* This must be a template. It's of the form:
330 template <class T> template <class U> void S<T>::f(U);
332 This is a specialization if the innermost level was a
333 specialization; otherwise it's just a definition of the
334 template. */
335 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
338 /* Exit the current scope. */
340 void
341 finish_scope (void)
343 poplevel (0, 0, 0);
346 /* When a label goes out of scope, check to see if that label was used
347 in a valid manner, and issue any appropriate warnings or errors. */
349 static void
350 pop_label (tree label, tree old_value)
352 if (!processing_template_decl)
354 if (DECL_INITIAL (label) == NULL_TREE)
356 location_t location;
358 error ("label %q+D used but not defined", label);
359 #ifdef USE_MAPPED_LOCATION
360 location = input_location; /* FIXME want (input_filename, (line)0) */
361 #else
362 location.file = input_filename;
363 location.line = 0;
364 #endif
365 /* Avoid crashing later. */
366 define_label (location, DECL_NAME (label));
368 else if (!TREE_USED (label))
369 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
372 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
375 /* At the end of a function, all labels declared within the function
376 go out of scope. BLOCK is the top-level block for the
377 function. */
379 static int
380 pop_labels_1 (void **slot, void *data)
382 struct named_label_entry *ent = (struct named_label_entry *) *slot;
383 tree block = (tree) data;
385 pop_label (ent->label_decl, NULL_TREE);
387 /* Put the labels into the "variables" of the top-level block,
388 so debugger can see them. */
389 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
390 BLOCK_VARS (block) = ent->label_decl;
392 htab_clear_slot (named_labels, slot);
394 return 1;
397 static void
398 pop_labels (tree block)
400 if (named_labels)
402 htab_traverse (named_labels, pop_labels_1, block);
403 named_labels = NULL;
407 /* At the end of a block with local labels, restore the outer definition. */
409 static void
410 pop_local_label (tree label, tree old_value)
412 struct named_label_entry dummy;
413 void **slot;
415 pop_label (label, old_value);
417 dummy.label_decl = label;
418 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
419 htab_clear_slot (named_labels, slot);
422 /* The following two routines are used to interface to Objective-C++.
423 The binding level is purposely treated as an opaque type. */
425 void *
426 objc_get_current_scope (void)
428 return current_binding_level;
431 /* The following routine is used by the NeXT-style SJLJ exceptions;
432 variables get marked 'volatile' so as to not be clobbered by
433 _setjmp()/_longjmp() calls. All variables in the current scope,
434 as well as parent scopes up to (but not including) ENCLOSING_BLK
435 shall be thusly marked. */
437 void
438 objc_mark_locals_volatile (void *enclosing_blk)
440 struct cp_binding_level *scope;
442 for (scope = current_binding_level;
443 scope && scope != enclosing_blk;
444 scope = scope->level_chain)
446 tree decl;
448 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
449 objc_volatilize_decl (decl);
451 /* Do not climb up past the current function. */
452 if (scope->kind == sk_function_parms)
453 break;
457 /* Update data for defined and undefined labels when leaving a scope. */
459 static int
460 poplevel_named_label_1 (void **slot, void *data)
462 struct named_label_entry *ent = (struct named_label_entry *) *slot;
463 struct cp_binding_level *bl = (struct cp_binding_level *) data;
464 struct cp_binding_level *obl = bl->level_chain;
466 if (ent->binding_level == bl)
468 tree decl;
470 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
471 if (decl_jump_unsafe (decl))
472 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
474 ent->binding_level = obl;
475 ent->names_in_scope = obl->names;
476 switch (bl->kind)
478 case sk_try:
479 ent->in_try_scope = true;
480 break;
481 case sk_catch:
482 ent->in_catch_scope = true;
483 break;
484 case sk_omp:
485 ent->in_omp_scope = true;
486 break;
487 default:
488 break;
491 else if (ent->uses)
493 struct named_label_use_entry *use;
495 for (use = ent->uses; use ; use = use->next)
496 if (use->binding_level == bl)
498 use->binding_level = obl;
499 use->names_in_scope = obl->names;
500 if (bl->kind == sk_omp)
501 use->in_omp_scope = true;
505 return 1;
508 /* Exit a binding level.
509 Pop the level off, and restore the state of the identifier-decl mappings
510 that were in effect when this level was entered.
512 If KEEP == 1, this level had explicit declarations, so
513 and create a "block" (a BLOCK node) for the level
514 to record its declarations and subblocks for symbol table output.
516 If FUNCTIONBODY is nonzero, this level is the body of a function,
517 so create a block as if KEEP were set and also clear out all
518 label names.
520 If REVERSE is nonzero, reverse the order of decls before putting
521 them into the BLOCK. */
523 tree
524 poplevel (int keep, int reverse, int functionbody)
526 tree link;
527 /* The chain of decls was accumulated in reverse order.
528 Put it into forward order, just for cleanliness. */
529 tree decls;
530 int tmp = functionbody;
531 int real_functionbody;
532 tree subblocks;
533 tree block;
534 tree decl;
535 int leaving_for_scope;
536 scope_kind kind;
538 timevar_push (TV_NAME_LOOKUP);
539 restart:
541 block = NULL_TREE;
543 gcc_assert (current_binding_level->kind != sk_class);
545 real_functionbody = (current_binding_level->kind == sk_cleanup
546 ? ((functionbody = 0), tmp) : functionbody);
547 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
549 gcc_assert (!VEC_length(cp_class_binding,
550 current_binding_level->class_shadowed));
552 /* We used to use KEEP == 2 to indicate that the new block should go
553 at the beginning of the list of blocks at this binding level,
554 rather than the end. This hack is no longer used. */
555 gcc_assert (keep == 0 || keep == 1);
557 if (current_binding_level->keep)
558 keep = 1;
560 /* Any uses of undefined labels, and any defined labels, now operate
561 under constraints of next binding contour. */
562 if (cfun && !functionbody && named_labels)
563 htab_traverse (named_labels, poplevel_named_label_1,
564 current_binding_level);
566 /* Get the decls in the order they were written.
567 Usually current_binding_level->names is in reverse order.
568 But parameter decls were previously put in forward order. */
570 if (reverse)
571 current_binding_level->names
572 = decls = nreverse (current_binding_level->names);
573 else
574 decls = current_binding_level->names;
576 /* If there were any declarations or structure tags in that level,
577 or if this level is a function body,
578 create a BLOCK to record them for the life of this function. */
579 block = NULL_TREE;
580 if (keep == 1 || functionbody)
581 block = make_node (BLOCK);
582 if (block != NULL_TREE)
584 BLOCK_VARS (block) = decls;
585 BLOCK_SUBBLOCKS (block) = subblocks;
588 /* In each subblock, record that this is its superior. */
589 if (keep >= 0)
590 for (link = subblocks; link; link = TREE_CHAIN (link))
591 BLOCK_SUPERCONTEXT (link) = block;
593 /* We still support the old for-scope rules, whereby the variables
594 in a for-init statement were in scope after the for-statement
595 ended. We only use the new rules if flag_new_for_scope is
596 nonzero. */
597 leaving_for_scope
598 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
600 /* Before we remove the declarations first check for unused variables. */
601 if (warn_unused_variable
602 && !processing_template_decl)
603 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
604 if (TREE_CODE (decl) == VAR_DECL
605 && ! TREE_USED (decl)
606 && ! DECL_IN_SYSTEM_HEADER (decl)
607 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
608 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
610 /* Remove declarations for all the DECLs in this level. */
611 for (link = decls; link; link = TREE_CHAIN (link))
613 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
614 && DECL_NAME (link))
616 tree name = DECL_NAME (link);
617 cxx_binding *ob;
618 tree ns_binding;
620 ob = outer_binding (name,
621 IDENTIFIER_BINDING (name),
622 /*class_p=*/true);
623 if (!ob)
624 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
625 else
626 ns_binding = NULL_TREE;
628 if (ob && ob->scope == current_binding_level->level_chain)
629 /* We have something like:
631 int i;
632 for (int i; ;);
634 and we are leaving the `for' scope. There's no reason to
635 keep the binding of the inner `i' in this case. */
636 pop_binding (name, link);
637 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
638 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
639 /* Here, we have something like:
641 typedef int I;
643 void f () {
644 for (int I; ;);
647 We must pop the for-scope binding so we know what's a
648 type and what isn't. */
649 pop_binding (name, link);
650 else
652 /* Mark this VAR_DECL as dead so that we can tell we left it
653 there only for backward compatibility. */
654 DECL_DEAD_FOR_LOCAL (link) = 1;
656 /* Keep track of what should have happened when we
657 popped the binding. */
658 if (ob && ob->value)
660 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
661 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
664 /* Add it to the list of dead variables in the next
665 outermost binding to that we can remove these when we
666 leave that binding. */
667 current_binding_level->level_chain->dead_vars_from_for
668 = tree_cons (NULL_TREE, link,
669 current_binding_level->level_chain->
670 dead_vars_from_for);
672 /* Although we don't pop the cxx_binding, we do clear
673 its SCOPE since the scope is going away now. */
674 IDENTIFIER_BINDING (name)->scope
675 = current_binding_level->level_chain;
678 else
680 tree name;
682 /* Remove the binding. */
683 decl = link;
685 if (TREE_CODE (decl) == TREE_LIST)
686 decl = TREE_VALUE (decl);
687 name = decl;
689 if (TREE_CODE (name) == OVERLOAD)
690 name = OVL_FUNCTION (name);
692 gcc_assert (DECL_P (name));
693 pop_binding (DECL_NAME (name), decl);
697 /* Remove declarations for any `for' variables from inner scopes
698 that we kept around. */
699 for (link = current_binding_level->dead_vars_from_for;
700 link; link = TREE_CHAIN (link))
701 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
703 /* Restore the IDENTIFIER_TYPE_VALUEs. */
704 for (link = current_binding_level->type_shadowed;
705 link; link = TREE_CHAIN (link))
706 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
708 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
709 for (link = current_binding_level->shadowed_labels;
710 link;
711 link = TREE_CHAIN (link))
712 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
714 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
715 list if a `using' declaration put them there. The debugging
716 back-ends won't understand OVERLOAD, so we remove them here.
717 Because the BLOCK_VARS are (temporarily) shared with
718 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
719 popped all the bindings. */
720 if (block)
722 tree* d;
724 for (d = &BLOCK_VARS (block); *d; )
726 if (TREE_CODE (*d) == TREE_LIST)
727 *d = TREE_CHAIN (*d);
728 else
729 d = &TREE_CHAIN (*d);
733 /* If the level being exited is the top level of a function,
734 check over all the labels. */
735 if (functionbody)
737 /* Since this is the top level block of a function, the vars are
738 the function's parameters. Don't leave them in the BLOCK
739 because they are found in the FUNCTION_DECL instead. */
740 BLOCK_VARS (block) = 0;
741 pop_labels (block);
744 kind = current_binding_level->kind;
745 if (kind == sk_cleanup)
747 tree stmt;
749 /* If this is a temporary binding created for a cleanup, then we'll
750 have pushed a statement list level. Pop that, create a new
751 BIND_EXPR for the block, and insert it into the stream. */
752 stmt = pop_stmt_list (current_binding_level->statement_list);
753 stmt = c_build_bind_expr (block, stmt);
754 add_stmt (stmt);
757 leave_scope ();
758 if (functionbody)
760 /* The current function is being defined, so its DECL_INITIAL
761 should be error_mark_node. */
762 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
763 DECL_INITIAL (current_function_decl) = block;
765 else if (block)
766 current_binding_level->blocks
767 = chainon (current_binding_level->blocks, block);
769 /* If we did not make a block for the level just exited,
770 any blocks made for inner levels
771 (since they cannot be recorded as subblocks in that level)
772 must be carried forward so they will later become subblocks
773 of something else. */
774 else if (subblocks)
775 current_binding_level->blocks
776 = chainon (current_binding_level->blocks, subblocks);
778 /* Each and every BLOCK node created here in `poplevel' is important
779 (e.g. for proper debugging information) so if we created one
780 earlier, mark it as "used". */
781 if (block)
782 TREE_USED (block) = 1;
784 /* All temporary bindings created for cleanups are popped silently. */
785 if (kind == sk_cleanup)
786 goto restart;
788 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
791 /* Insert BLOCK at the end of the list of subblocks of the
792 current binding level. This is used when a BIND_EXPR is expanded,
793 to handle the BLOCK node inside the BIND_EXPR. */
795 void
796 insert_block (tree block)
798 TREE_USED (block) = 1;
799 current_binding_level->blocks
800 = chainon (current_binding_level->blocks, block);
803 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
804 itself, calling F for each. The DATA is passed to F as well. */
806 static int
807 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
809 int result = 0;
810 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
812 result |= (*f) (namespace, data);
814 for (; current; current = TREE_CHAIN (current))
815 result |= walk_namespaces_r (current, f, data);
817 return result;
820 /* Walk all the namespaces, calling F for each. The DATA is passed to
821 F as well. */
824 walk_namespaces (walk_namespaces_fn f, void* data)
826 return walk_namespaces_r (global_namespace, f, data);
829 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
830 DATA is non-NULL, this is the last time we will call
831 wrapup_global_declarations for this NAMESPACE. */
834 wrapup_globals_for_namespace (tree namespace, void* data)
836 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
837 VEC(tree,gc) *statics = level->static_decls;
838 tree *vec = VEC_address (tree, statics);
839 int len = VEC_length (tree, statics);
840 int last_time = (data != 0);
842 if (last_time)
844 check_global_declarations (vec, len);
845 emit_debug_global_declarations (vec, len);
846 return 0;
849 /* Write out any globals that need to be output. */
850 return wrapup_global_declarations (vec, len);
854 /* In C++, you don't have to write `struct S' to refer to `S'; you
855 can just use `S'. We accomplish this by creating a TYPE_DECL as
856 if the user had written `typedef struct S S'. Create and return
857 the TYPE_DECL for TYPE. */
859 tree
860 create_implicit_typedef (tree name, tree type)
862 tree decl;
864 decl = build_decl (TYPE_DECL, name, type);
865 DECL_ARTIFICIAL (decl) = 1;
866 /* There are other implicit type declarations, like the one *within*
867 a class that allows you to write `S::S'. We must distinguish
868 amongst these. */
869 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
870 TYPE_NAME (type) = decl;
872 return decl;
875 /* Remember a local name for name-mangling purposes. */
877 static void
878 push_local_name (tree decl)
880 size_t i, nelts;
881 tree t, name;
883 timevar_push (TV_NAME_LOOKUP);
885 name = DECL_NAME (decl);
887 nelts = VEC_length (tree, local_names);
888 for (i = 0; i < nelts; i++)
890 t = VEC_index (tree, local_names, i);
891 if (DECL_NAME (t) == name)
893 if (!DECL_LANG_SPECIFIC (decl))
894 retrofit_lang_decl (decl);
895 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
896 if (DECL_LANG_SPECIFIC (t))
897 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
898 else
899 DECL_DISCRIMINATOR (decl) = 1;
901 VEC_replace (tree, local_names, i, decl);
902 timevar_pop (TV_NAME_LOOKUP);
903 return;
907 VEC_safe_push (tree, gc, local_names, decl);
908 timevar_pop (TV_NAME_LOOKUP);
911 /* Subroutine of duplicate_decls: return truthvalue of whether
912 or not types of these decls match.
914 For C++, we must compare the parameter list so that `int' can match
915 `int&' in a parameter position, but `int&' is not confused with
916 `const int&'. */
919 decls_match (tree newdecl, tree olddecl)
921 int types_match;
923 if (newdecl == olddecl)
924 return 1;
926 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
927 /* If the two DECLs are not even the same kind of thing, we're not
928 interested in their types. */
929 return 0;
931 if (TREE_CODE (newdecl) == FUNCTION_DECL)
933 tree f1 = TREE_TYPE (newdecl);
934 tree f2 = TREE_TYPE (olddecl);
935 tree p1 = TYPE_ARG_TYPES (f1);
936 tree p2 = TYPE_ARG_TYPES (f2);
938 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
939 && ! (DECL_EXTERN_C_P (newdecl)
940 && DECL_EXTERN_C_P (olddecl)))
941 return 0;
943 if (TREE_CODE (f1) != TREE_CODE (f2))
944 return 0;
946 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
948 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
949 && (DECL_BUILT_IN (olddecl)
950 #ifndef NO_IMPLICIT_EXTERN_C
951 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
952 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
953 #endif
956 types_match = self_promoting_args_p (p1);
957 if (p1 == void_list_node)
958 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
960 #ifndef NO_IMPLICIT_EXTERN_C
961 else if (p1 == NULL_TREE
962 && (DECL_EXTERN_C_P (olddecl)
963 && DECL_IN_SYSTEM_HEADER (olddecl)
964 && !DECL_CLASS_SCOPE_P (olddecl))
965 && (DECL_EXTERN_C_P (newdecl)
966 && DECL_IN_SYSTEM_HEADER (newdecl)
967 && !DECL_CLASS_SCOPE_P (newdecl)))
969 types_match = self_promoting_args_p (p2);
970 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
972 #endif
973 else
974 types_match = compparms (p1, p2);
976 else
977 types_match = 0;
979 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
981 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
982 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
983 return 0;
985 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
986 DECL_TEMPLATE_PARMS (olddecl)))
987 return 0;
989 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
990 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
991 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
992 else
993 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
994 DECL_TEMPLATE_RESULT (newdecl));
996 else
998 /* Need to check scope for variable declaration (VAR_DECL).
999 For typedef (TYPE_DECL), scope is ignored. */
1000 if (TREE_CODE (newdecl) == VAR_DECL
1001 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1002 /* [dcl.link]
1003 Two declarations for an object with C language linkage
1004 with the same name (ignoring the namespace that qualify
1005 it) that appear in different namespace scopes refer to
1006 the same object. */
1007 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1008 return 0;
1010 if (TREE_TYPE (newdecl) == error_mark_node)
1011 types_match = TREE_TYPE (olddecl) == error_mark_node;
1012 else if (TREE_TYPE (olddecl) == NULL_TREE)
1013 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1014 else if (TREE_TYPE (newdecl) == NULL_TREE)
1015 types_match = 0;
1016 else
1017 types_match = comptypes (TREE_TYPE (newdecl),
1018 TREE_TYPE (olddecl),
1019 COMPARE_REDECLARATION);
1022 return types_match;
1025 /* If NEWDECL is `static' and an `extern' was seen previously,
1026 warn about it. OLDDECL is the previous declaration.
1028 Note that this does not apply to the C++ case of declaring
1029 a variable `extern const' and then later `const'.
1031 Don't complain about built-in functions, since they are beyond
1032 the user's control. */
1034 void
1035 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1037 tree name;
1039 if (TREE_CODE (newdecl) == TYPE_DECL
1040 || TREE_CODE (newdecl) == TEMPLATE_DECL
1041 || TREE_CODE (newdecl) == CONST_DECL
1042 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1043 return;
1045 /* Don't get confused by static member functions; that's a different
1046 use of `static'. */
1047 if (TREE_CODE (newdecl) == FUNCTION_DECL
1048 && DECL_STATIC_FUNCTION_P (newdecl))
1049 return;
1051 /* If the old declaration was `static', or the new one isn't, then
1052 then everything is OK. */
1053 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1054 return;
1056 /* It's OK to declare a builtin function as `static'. */
1057 if (TREE_CODE (olddecl) == FUNCTION_DECL
1058 && DECL_ARTIFICIAL (olddecl))
1059 return;
1061 name = DECL_ASSEMBLER_NAME (newdecl);
1062 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1063 pedwarn ("previous declaration of %q+D", olddecl);
1066 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1067 function templates. If their exception specifications do not
1068 match, issue an a diagnostic. */
1070 static void
1071 check_redeclaration_exception_specification (tree new_decl,
1072 tree old_decl)
1074 tree new_type;
1075 tree old_type;
1076 tree new_exceptions;
1077 tree old_exceptions;
1079 new_type = TREE_TYPE (new_decl);
1080 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1081 old_type = TREE_TYPE (old_decl);
1082 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1084 /* [except.spec]
1086 If any declaration of a function has an exception-specification,
1087 all declarations, including the definition and an explicit
1088 specialization, of that function shall have an
1089 exception-specification with the same set of type-ids. */
1090 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1091 && ! DECL_IS_BUILTIN (old_decl)
1092 && flag_exceptions
1093 && !comp_except_specs (new_exceptions, old_exceptions,
1094 /*exact=*/true))
1096 error ("declaration of %qF throws different exceptions", new_decl);
1097 error ("from previous declaration %q+F", old_decl);
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;
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, "shadowing %s function %q#D",
1183 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1184 olddecl);
1185 /* Discard the old built-in function. */
1186 return NULL_TREE;
1188 /* If the built-in is not ansi, then programs can override
1189 it even globally without an error. */
1190 else if (! DECL_BUILT_IN (olddecl))
1191 warning (0, "library function %q#D redeclared as non-function %q#D",
1192 olddecl, newdecl);
1193 else
1195 error ("declaration of %q#D", newdecl);
1196 error ("conflicts with built-in declaration %q#D",
1197 olddecl);
1199 return NULL_TREE;
1201 else if (!types_match)
1203 /* Avoid warnings redeclaring built-ins which have not been
1204 explicitly declared. */
1205 if (DECL_ANTICIPATED (olddecl))
1207 /* Deal with fileptr_type_node. FILE type is not known
1208 at the time we create the builtins. */
1209 tree t1, t2;
1211 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1212 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1213 t1 || t2;
1214 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1215 if (!t1 || !t2)
1216 break;
1217 else if (TREE_VALUE (t2) == fileptr_type_node)
1219 tree t = TREE_VALUE (t1);
1221 if (TREE_CODE (t) == POINTER_TYPE
1222 && TYPE_NAME (TREE_TYPE (t))
1223 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1224 == get_identifier ("FILE")
1225 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1227 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1229 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1230 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1231 types_match = decls_match (newdecl, olddecl);
1232 if (types_match)
1233 return duplicate_decls (newdecl, olddecl,
1234 newdecl_is_friend);
1235 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1238 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1239 break;
1241 else if ((DECL_EXTERN_C_P (newdecl)
1242 && DECL_EXTERN_C_P (olddecl))
1243 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1244 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1246 /* A near match; override the builtin. */
1248 if (TREE_PUBLIC (newdecl))
1250 warning (0, "new declaration %q#D", newdecl);
1251 warning (0, "ambiguates built-in declaration %q#D",
1252 olddecl);
1254 else
1255 warning (OPT_Wshadow, "shadowing %s function %q#D",
1256 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1257 olddecl);
1259 else
1260 /* Discard the old built-in function. */
1261 return NULL_TREE;
1263 /* Replace the old RTL to avoid problems with inlining. */
1264 COPY_DECL_RTL (newdecl, olddecl);
1266 /* Even if the types match, prefer the new declarations type for
1267 built-ins which have not been explicitly declared, for
1268 exception lists, etc... */
1269 else if (DECL_ANTICIPATED (olddecl))
1271 tree type = TREE_TYPE (newdecl);
1272 tree attribs = (*targetm.merge_type_attributes)
1273 (TREE_TYPE (olddecl), type);
1275 type = cp_build_type_attribute_variant (type, attribs);
1276 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1279 /* Whether or not the builtin can throw exceptions has no
1280 bearing on this declarator. */
1281 TREE_NOTHROW (olddecl) = 0;
1283 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1285 /* If a builtin function is redeclared as `static', merge
1286 the declarations, but make the original one static. */
1287 DECL_THIS_STATIC (olddecl) = 1;
1288 TREE_PUBLIC (olddecl) = 0;
1290 /* Make the old declaration consistent with the new one so
1291 that all remnants of the builtin-ness of this function
1292 will be banished. */
1293 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1294 COPY_DECL_RTL (newdecl, olddecl);
1297 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1299 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1300 && TREE_CODE (newdecl) != TYPE_DECL
1301 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1302 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1303 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1304 && TREE_CODE (olddecl) != TYPE_DECL
1305 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1306 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1307 == TYPE_DECL))))
1309 /* We do nothing special here, because C++ does such nasty
1310 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1311 get shadowed, and know that if we need to find a TYPE_DECL
1312 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1313 slot of the identifier. */
1314 return NULL_TREE;
1317 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1318 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1319 || (TREE_CODE (olddecl) == FUNCTION_DECL
1320 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1321 return NULL_TREE;
1323 error ("%q#D redeclared as different kind of symbol", newdecl);
1324 if (TREE_CODE (olddecl) == TREE_LIST)
1325 olddecl = TREE_VALUE (olddecl);
1326 error ("previous declaration of %q+#D", olddecl);
1328 return error_mark_node;
1330 else if (!types_match)
1332 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1333 /* These are certainly not duplicate declarations; they're
1334 from different scopes. */
1335 return NULL_TREE;
1337 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1339 /* The name of a class template may not be declared to refer to
1340 any other template, class, function, object, namespace, value,
1341 or type in the same scope. */
1342 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1343 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1345 error ("declaration of template %q#D", newdecl);
1346 error ("conflicts with previous declaration %q+#D", olddecl);
1348 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1349 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1350 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1351 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1352 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1353 DECL_TEMPLATE_PARMS (olddecl))
1354 /* Template functions can be disambiguated by
1355 return type. */
1356 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1357 TREE_TYPE (TREE_TYPE (olddecl))))
1359 error ("new declaration %q#D", newdecl);
1360 error ("ambiguates old declaration %q+#D", olddecl);
1362 return NULL_TREE;
1364 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1366 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1368 error ("declaration of C function %q#D conflicts with",
1369 newdecl);
1370 error ("previous declaration %q+#D here", olddecl);
1372 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1373 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1375 error ("new declaration %q#D", newdecl);
1376 error ("ambiguates old declaration %q+#D", olddecl);
1377 return error_mark_node;
1379 else
1380 return NULL_TREE;
1382 else
1384 error ("conflicting declaration %q#D", newdecl);
1385 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1386 return error_mark_node;
1389 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1390 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1391 && (!DECL_TEMPLATE_INFO (newdecl)
1392 || (DECL_TI_TEMPLATE (newdecl)
1393 != DECL_TI_TEMPLATE (olddecl))))
1394 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1395 && (!DECL_TEMPLATE_INFO (olddecl)
1396 || (DECL_TI_TEMPLATE (olddecl)
1397 != DECL_TI_TEMPLATE (newdecl))))))
1398 /* It's OK to have a template specialization and a non-template
1399 with the same type, or to have specializations of two
1400 different templates with the same type. Note that if one is a
1401 specialization, and the other is an instantiation of the same
1402 template, that we do not exit at this point. That situation
1403 can occur if we instantiate a template class, and then
1404 specialize one of its methods. This situation is valid, but
1405 the declarations must be merged in the usual way. */
1406 return NULL_TREE;
1407 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1408 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1409 && !DECL_USE_TEMPLATE (newdecl))
1410 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1411 && !DECL_USE_TEMPLATE (olddecl))))
1412 /* One of the declarations is a template instantiation, and the
1413 other is not a template at all. That's OK. */
1414 return NULL_TREE;
1415 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1417 /* In [namespace.alias] we have:
1419 In a declarative region, a namespace-alias-definition can be
1420 used to redefine a namespace-alias declared in that declarative
1421 region to refer only to the namespace to which it already
1422 refers.
1424 Therefore, if we encounter a second alias directive for the same
1425 alias, we can just ignore the second directive. */
1426 if (DECL_NAMESPACE_ALIAS (newdecl)
1427 && (DECL_NAMESPACE_ALIAS (newdecl)
1428 == DECL_NAMESPACE_ALIAS (olddecl)))
1429 return olddecl;
1430 /* [namespace.alias]
1432 A namespace-name or namespace-alias shall not be declared as
1433 the name of any other entity in the same declarative region.
1434 A namespace-name defined at global scope shall not be
1435 declared as the name of any other entity in any global scope
1436 of the program. */
1437 error ("declaration of namespace %qD conflicts with", newdecl);
1438 error ("previous declaration of namespace %q+D here", olddecl);
1439 return error_mark_node;
1441 else
1443 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1444 if (errmsg)
1446 error (errmsg, newdecl);
1447 if (DECL_NAME (olddecl) != NULL_TREE)
1448 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1449 ? "%q+#D previously defined here"
1450 : "%q+#D previously declared here", olddecl);
1451 return error_mark_node;
1453 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1454 && DECL_INITIAL (olddecl) != NULL_TREE
1455 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1456 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1458 /* Prototype decl follows defn w/o prototype. */
1459 warning (0, "prototype for %q+#D", newdecl);
1460 warning (0, "%Jfollows non-prototype definition here", olddecl);
1462 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1463 || TREE_CODE (olddecl) == VAR_DECL)
1464 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1466 /* [dcl.link]
1467 If two declarations of the same function or object
1468 specify different linkage-specifications ..., the program
1469 is ill-formed.... Except for functions with C++ linkage,
1470 a function declaration without a linkage specification
1471 shall not precede the first linkage specification for
1472 that function. A function can be declared without a
1473 linkage specification after an explicit linkage
1474 specification has been seen; the linkage explicitly
1475 specified in the earlier declaration is not affected by
1476 such a function declaration.
1478 DR 563 raises the question why the restrictions on
1479 functions should not also apply to objects. Older
1480 versions of G++ silently ignore the linkage-specification
1481 for this example:
1483 namespace N {
1484 extern int i;
1485 extern "C" int i;
1488 which is clearly wrong. Therefore, we now treat objects
1489 like functions. */
1490 if (current_lang_depth () == 0)
1492 /* There is no explicit linkage-specification, so we use
1493 the linkage from the previous declaration. */
1494 if (!DECL_LANG_SPECIFIC (newdecl))
1495 retrofit_lang_decl (newdecl);
1496 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1498 else
1500 error ("previous declaration of %q+#D with %qL linkage",
1501 olddecl, DECL_LANGUAGE (olddecl));
1502 error ("conflicts with new declaration with %qL linkage",
1503 DECL_LANGUAGE (newdecl));
1507 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1509 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1511 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1512 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1513 int i = 1;
1515 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1516 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1518 for (; t1 && t1 != void_list_node;
1519 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1520 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1522 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1523 TREE_PURPOSE (t2)))
1525 pedwarn ("default argument given for parameter %d of %q#D",
1526 i, newdecl);
1527 pedwarn ("after previous specification in %q+#D", olddecl);
1529 else
1531 error ("default argument given for parameter %d of %q#D",
1532 i, newdecl);
1533 error ("after previous specification in %q+#D",
1534 olddecl);
1538 if (DECL_DECLARED_INLINE_P (newdecl)
1539 && ! DECL_DECLARED_INLINE_P (olddecl)
1540 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1542 warning (0, "%q#D was used before it was declared inline", newdecl);
1543 warning (0, "%Jprevious non-inline declaration here", olddecl);
1548 /* Do not merge an implicit typedef with an explicit one. In:
1550 class A;
1552 typedef class A A __attribute__ ((foo));
1554 the attribute should apply only to the typedef. */
1555 if (TREE_CODE (olddecl) == TYPE_DECL
1556 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1557 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1558 return NULL_TREE;
1560 /* If new decl is `static' and an `extern' was seen previously,
1561 warn about it. */
1562 warn_extern_redeclared_static (newdecl, olddecl);
1564 /* We have committed to returning 1 at this point. */
1565 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1567 /* Now that functions must hold information normally held
1568 by field decls, there is extra work to do so that
1569 declaration information does not get destroyed during
1570 definition. */
1571 if (DECL_VINDEX (olddecl))
1572 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1573 if (DECL_CONTEXT (olddecl))
1574 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1575 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1576 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1577 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1578 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1579 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1580 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1581 SET_OVERLOADED_OPERATOR_CODE
1582 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1583 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1585 /* Optionally warn about more than one declaration for the same
1586 name, but don't warn about a function declaration followed by a
1587 definition. */
1588 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1589 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1590 /* Don't warn about extern decl followed by definition. */
1591 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1592 /* Don't warn about friends, let add_friend take care of it. */
1593 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1595 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1596 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1600 /* Deal with C++: must preserve virtual function table size. */
1601 if (TREE_CODE (olddecl) == TYPE_DECL)
1603 tree newtype = TREE_TYPE (newdecl);
1604 tree oldtype = TREE_TYPE (olddecl);
1606 if (newtype != error_mark_node && oldtype != error_mark_node
1607 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1608 CLASSTYPE_FRIEND_CLASSES (newtype)
1609 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1611 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1614 /* Copy all the DECL_... slots specified in the new decl
1615 except for any that we copy here from the old type. */
1616 DECL_ATTRIBUTES (newdecl)
1617 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1619 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1621 tree old_result;
1622 tree new_result;
1623 old_result = DECL_TEMPLATE_RESULT (olddecl);
1624 new_result = DECL_TEMPLATE_RESULT (newdecl);
1625 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1626 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1627 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1628 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1630 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1632 DECL_INLINE (old_result)
1633 |= DECL_INLINE (new_result);
1634 DECL_DECLARED_INLINE_P (old_result)
1635 |= DECL_DECLARED_INLINE_P (new_result);
1636 check_redeclaration_exception_specification (newdecl, olddecl);
1639 /* If the new declaration is a definition, update the file and
1640 line information on the declaration, and also make
1641 the old declaration the same definition. */
1642 if (DECL_INITIAL (old_result) == NULL_TREE
1643 && DECL_INITIAL (new_result) != NULL_TREE)
1645 DECL_SOURCE_LOCATION (olddecl)
1646 = DECL_SOURCE_LOCATION (old_result)
1647 = DECL_SOURCE_LOCATION (newdecl);
1648 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1649 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1650 DECL_ARGUMENTS (old_result)
1651 = DECL_ARGUMENTS (new_result);
1654 return olddecl;
1657 if (types_match)
1659 /* Automatically handles default parameters. */
1660 tree oldtype = TREE_TYPE (olddecl);
1661 tree newtype;
1663 /* Merge the data types specified in the two decls. */
1664 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1666 /* If merge_types produces a non-typedef type, just use the old type. */
1667 if (TREE_CODE (newdecl) == TYPE_DECL
1668 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1669 newtype = oldtype;
1671 if (TREE_CODE (newdecl) == VAR_DECL)
1673 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1674 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1675 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1676 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1677 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1678 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1680 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1681 if (DECL_LANG_SPECIFIC (olddecl)
1682 && CP_DECL_THREADPRIVATE_P (olddecl))
1684 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1685 if (!DECL_LANG_SPECIFIC (newdecl))
1686 retrofit_lang_decl (newdecl);
1688 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1689 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1693 /* Do this after calling `merge_types' so that default
1694 parameters don't confuse us. */
1695 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1696 check_redeclaration_exception_specification (newdecl, olddecl);
1697 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1699 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1700 check_default_args (newdecl);
1702 /* Lay the type out, unless already done. */
1703 if (! same_type_p (newtype, oldtype)
1704 && TREE_TYPE (newdecl) != error_mark_node
1705 && !(processing_template_decl && uses_template_parms (newdecl)))
1706 layout_type (TREE_TYPE (newdecl));
1708 if ((TREE_CODE (newdecl) == VAR_DECL
1709 || TREE_CODE (newdecl) == PARM_DECL
1710 || TREE_CODE (newdecl) == RESULT_DECL
1711 || TREE_CODE (newdecl) == FIELD_DECL
1712 || TREE_CODE (newdecl) == TYPE_DECL)
1713 && !(processing_template_decl && uses_template_parms (newdecl)))
1714 layout_decl (newdecl, 0);
1716 /* Merge the type qualifiers. */
1717 if (TREE_READONLY (newdecl))
1718 TREE_READONLY (olddecl) = 1;
1719 if (TREE_THIS_VOLATILE (newdecl))
1720 TREE_THIS_VOLATILE (olddecl) = 1;
1721 if (TREE_NOTHROW (newdecl))
1722 TREE_NOTHROW (olddecl) = 1;
1724 /* Merge deprecatedness. */
1725 if (TREE_DEPRECATED (newdecl))
1726 TREE_DEPRECATED (olddecl) = 1;
1728 /* Merge the initialization information. */
1729 if (DECL_INITIAL (newdecl) == NULL_TREE
1730 && DECL_INITIAL (olddecl) != NULL_TREE)
1732 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1733 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1734 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1735 && DECL_LANG_SPECIFIC (newdecl)
1736 && DECL_LANG_SPECIFIC (olddecl))
1738 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1739 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1743 /* Merge the section attribute.
1744 We want to issue an error if the sections conflict but that must be
1745 done later in decl_attributes since we are called before attributes
1746 are assigned. */
1747 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1748 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1750 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1752 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1753 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1754 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1755 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1756 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1757 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1758 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1759 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1760 /* Keep the old RTL. */
1761 COPY_DECL_RTL (olddecl, newdecl);
1763 else if (TREE_CODE (newdecl) == VAR_DECL
1764 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1766 /* Keep the old RTL. We cannot keep the old RTL if the old
1767 declaration was for an incomplete object and the new
1768 declaration is not since many attributes of the RTL will
1769 change. */
1770 COPY_DECL_RTL (olddecl, newdecl);
1773 /* If cannot merge, then use the new type and qualifiers,
1774 and don't preserve the old rtl. */
1775 else
1777 /* Clean out any memory we had of the old declaration. */
1778 tree oldstatic = value_member (olddecl, static_aggregates);
1779 if (oldstatic)
1780 TREE_VALUE (oldstatic) = error_mark_node;
1782 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1783 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1784 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1785 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1788 /* Merge the storage class information. */
1789 merge_weak (newdecl, olddecl);
1791 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1792 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1793 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1794 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1795 if (! DECL_EXTERNAL (olddecl))
1796 DECL_EXTERNAL (newdecl) = 0;
1798 new_template = NULL_TREE;
1799 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1801 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1802 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1803 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1804 DECL_TEMPLATE_INSTANTIATED (newdecl)
1805 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1807 /* If the OLDDECL is an instantiation and/or specialization,
1808 then the NEWDECL must be too. But, it may not yet be marked
1809 as such if the caller has created NEWDECL, but has not yet
1810 figured out that it is a redeclaration. */
1811 if (!DECL_USE_TEMPLATE (newdecl))
1812 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1814 /* Don't really know how much of the language-specific
1815 values we should copy from old to new. */
1816 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1817 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1818 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1819 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1820 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1821 if (DECL_TEMPLATE_INFO (newdecl))
1822 new_template = DECL_TI_TEMPLATE (newdecl);
1823 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1824 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1825 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1826 olddecl_friend = DECL_FRIEND_P (olddecl);
1827 hidden_friend = (DECL_ANTICIPATED (olddecl)
1828 && DECL_HIDDEN_FRIEND_P (olddecl)
1829 && newdecl_is_friend);
1831 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1832 if (TREE_CODE (newdecl) == FUNCTION_DECL
1833 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1835 DECL_BEFRIENDING_CLASSES (newdecl)
1836 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1837 DECL_BEFRIENDING_CLASSES (olddecl));
1838 /* DECL_THUNKS is only valid for virtual functions,
1839 otherwise it is a DECL_FRIEND_CONTEXT. */
1840 if (DECL_VIRTUAL_P (newdecl))
1841 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1845 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1847 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1848 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1850 /* If newdecl is not a specialization, then it is not a
1851 template-related function at all. And that means that we
1852 should have exited above, returning 0. */
1853 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1855 if (TREE_USED (olddecl))
1856 /* From [temp.expl.spec]:
1858 If a template, a member template or the member of a class
1859 template is explicitly specialized then that
1860 specialization shall be declared before the first use of
1861 that specialization that would cause an implicit
1862 instantiation to take place, in every translation unit in
1863 which such a use occurs. */
1864 error ("explicit specialization of %qD after first use",
1865 olddecl);
1867 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1869 /* Don't propagate visibility from the template to the
1870 specialization here. We'll do that in determine_visibility if
1871 appropriate. */
1872 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1874 /* [temp.expl.spec/14] We don't inline explicit specialization
1875 just because the primary template says so. */
1877 else
1879 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1880 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1882 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1884 /* If either decl says `inline', this fn is inline, unless
1885 its definition was passed already. */
1886 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1887 DECL_INLINE (olddecl) = 1;
1888 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1890 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1891 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1894 /* Preserve abstractness on cloned [cd]tors. */
1895 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1897 if (! types_match)
1899 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1900 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1901 COPY_DECL_RTL (newdecl, olddecl);
1903 if (! types_match || new_defines_function)
1905 /* These need to be copied so that the names are available.
1906 Note that if the types do match, we'll preserve inline
1907 info and other bits, but if not, we won't. */
1908 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1909 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1911 if (new_defines_function)
1912 /* If defining a function declared with other language
1913 linkage, use the previously declared language linkage. */
1914 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1915 else if (types_match)
1917 /* If redeclaring a builtin function, and not a definition,
1918 it stays built in. */
1919 if (DECL_BUILT_IN (olddecl))
1921 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1922 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1923 /* If we're keeping the built-in definition, keep the rtl,
1924 regardless of declaration matches. */
1925 COPY_DECL_RTL (olddecl, newdecl);
1928 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1929 /* Don't clear out the arguments if we're redefining a function. */
1930 if (DECL_ARGUMENTS (olddecl))
1931 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1934 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1935 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1937 /* Now preserve various other info from the definition. */
1938 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1939 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1940 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1941 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1943 /* Warn about conflicting visibility specifications. */
1944 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1945 && DECL_VISIBILITY_SPECIFIED (newdecl)
1946 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1948 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
1949 "because it", newdecl);
1950 warning (OPT_Wattributes, "%Jconflicts with previous "
1951 "declaration here", olddecl);
1953 /* Choose the declaration which specified visibility. */
1954 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1956 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1957 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1959 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
1960 so keep this behavior. */
1961 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
1963 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
1964 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
1967 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1968 with that from NEWDECL below. */
1969 if (DECL_LANG_SPECIFIC (olddecl))
1971 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1972 != DECL_LANG_SPECIFIC (newdecl));
1973 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1976 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1978 int function_size;
1980 function_size = sizeof (struct tree_decl_common);
1982 memcpy ((char *) olddecl + sizeof (struct tree_common),
1983 (char *) newdecl + sizeof (struct tree_common),
1984 function_size - sizeof (struct tree_common));
1986 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1987 (char *) newdecl + sizeof (struct tree_decl_common),
1988 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
1989 if (new_template)
1990 /* If newdecl is a template instantiation, it is possible that
1991 the following sequence of events has occurred:
1993 o A friend function was declared in a class template. The
1994 class template was instantiated.
1996 o The instantiation of the friend declaration was
1997 recorded on the instantiation list, and is newdecl.
1999 o Later, however, instantiate_class_template called pushdecl
2000 on the newdecl to perform name injection. But, pushdecl in
2001 turn called duplicate_decls when it discovered that another
2002 declaration of a global function with the same name already
2003 existed.
2005 o Here, in duplicate_decls, we decided to clobber newdecl.
2007 If we're going to do that, we'd better make sure that
2008 olddecl, and not newdecl, is on the list of
2009 instantiations so that if we try to do the instantiation
2010 again we won't get the clobbered declaration. */
2011 reregister_specialization (newdecl,
2012 new_template,
2013 olddecl);
2015 else
2017 size_t size = tree_code_size (TREE_CODE (olddecl));
2018 memcpy ((char *) olddecl + sizeof (struct tree_common),
2019 (char *) newdecl + sizeof (struct tree_common),
2020 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2021 switch (TREE_CODE (olddecl))
2023 case LABEL_DECL:
2024 case VAR_DECL:
2025 case RESULT_DECL:
2026 case PARM_DECL:
2027 case FIELD_DECL:
2028 case TYPE_DECL:
2029 case CONST_DECL:
2031 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2032 (char *) newdecl + sizeof (struct tree_decl_common),
2033 size - sizeof (struct tree_decl_common)
2034 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2036 break;
2037 default:
2038 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2039 (char *) newdecl + sizeof (struct tree_decl_common),
2040 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2041 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2042 break;
2045 DECL_UID (olddecl) = olddecl_uid;
2046 if (olddecl_friend)
2047 DECL_FRIEND_P (olddecl) = 1;
2048 if (hidden_friend)
2050 DECL_ANTICIPATED (olddecl) = 1;
2051 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2054 /* NEWDECL contains the merged attribute lists.
2055 Update OLDDECL to be the same. */
2056 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2058 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2059 so that encode_section_info has a chance to look at the new decl
2060 flags and attributes. */
2061 if (DECL_RTL_SET_P (olddecl)
2062 && (TREE_CODE (olddecl) == FUNCTION_DECL
2063 || (TREE_CODE (olddecl) == VAR_DECL
2064 && TREE_STATIC (olddecl))))
2065 make_decl_rtl (olddecl);
2067 /* The NEWDECL will no longer be needed. Because every out-of-class
2068 declaration of a member results in a call to duplicate_decls,
2069 freeing these nodes represents in a significant savings. */
2070 ggc_free (newdecl);
2072 return olddecl;
2075 /* Return zero if the declaration NEWDECL is valid
2076 when the declaration OLDDECL (assumed to be for the same name)
2077 has already been seen.
2078 Otherwise return an error message format string with a %s
2079 where the identifier should go. */
2081 static const char *
2082 redeclaration_error_message (tree newdecl, tree olddecl)
2084 if (TREE_CODE (newdecl) == TYPE_DECL)
2086 /* Because C++ can put things into name space for free,
2087 constructs like "typedef struct foo { ... } foo"
2088 would look like an erroneous redeclaration. */
2089 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2090 return NULL;
2091 else
2092 return "redefinition of %q#D";
2094 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2096 /* If this is a pure function, its olddecl will actually be
2097 the original initialization to `0' (which we force to call
2098 abort()). Don't complain about redefinition in this case. */
2099 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2100 && DECL_INITIAL (olddecl) == NULL_TREE)
2101 return NULL;
2103 /* If both functions come from different namespaces, this is not
2104 a redeclaration - this is a conflict with a used function. */
2105 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2106 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2107 && ! decls_match (olddecl, newdecl))
2108 return "%qD conflicts with used function";
2110 /* We'll complain about linkage mismatches in
2111 warn_extern_redeclared_static. */
2113 /* Defining the same name twice is no good. */
2114 if (DECL_INITIAL (olddecl) != NULL_TREE
2115 && DECL_INITIAL (newdecl) != NULL_TREE)
2117 if (DECL_NAME (olddecl) == NULL_TREE)
2118 return "%q#D not declared in class";
2119 else
2120 return "redefinition of %q#D";
2122 return NULL;
2124 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2126 tree nt, ot;
2128 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2130 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2131 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2132 return "redefinition of %q#D";
2133 return NULL;
2136 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2137 || (DECL_TEMPLATE_RESULT (newdecl)
2138 == DECL_TEMPLATE_RESULT (olddecl)))
2139 return NULL;
2141 nt = DECL_TEMPLATE_RESULT (newdecl);
2142 if (DECL_TEMPLATE_INFO (nt))
2143 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2144 ot = DECL_TEMPLATE_RESULT (olddecl);
2145 if (DECL_TEMPLATE_INFO (ot))
2146 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2147 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2148 return "redefinition of %q#D";
2150 return NULL;
2152 else if (TREE_CODE (newdecl) == VAR_DECL
2153 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2154 && (! DECL_LANG_SPECIFIC (olddecl)
2155 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2156 || DECL_THREAD_LOCAL_P (newdecl)))
2158 /* Only variables can be thread-local, and all declarations must
2159 agree on this property. */
2160 if (DECL_THREAD_LOCAL_P (newdecl))
2161 return "thread-local declaration of %q#D follows "
2162 "non-thread-local declaration";
2163 else
2164 return "non-thread-local declaration of %q#D follows "
2165 "thread-local declaration";
2167 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2169 /* Objects declared at top level: */
2170 /* If at least one is a reference, it's ok. */
2171 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2172 return NULL;
2173 /* Reject two definitions. */
2174 return "redefinition of %q#D";
2176 else
2178 /* Objects declared with block scope: */
2179 /* Reject two definitions, and reject a definition
2180 together with an external reference. */
2181 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2182 return "redeclaration of %q#D";
2183 return NULL;
2187 /* Hash and equality functions for the named_label table. */
2189 static hashval_t
2190 named_label_entry_hash (const void *data)
2192 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2193 return DECL_UID (ent->label_decl);
2196 static int
2197 named_label_entry_eq (const void *a, const void *b)
2199 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2200 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2201 return ent_a->label_decl == ent_b->label_decl;
2204 /* Create a new label, named ID. */
2206 static tree
2207 make_label_decl (tree id, int local_p)
2209 struct named_label_entry *ent;
2210 void **slot;
2211 tree decl;
2213 decl = build_decl (LABEL_DECL, id, void_type_node);
2215 DECL_CONTEXT (decl) = current_function_decl;
2216 DECL_MODE (decl) = VOIDmode;
2217 C_DECLARED_LABEL_FLAG (decl) = local_p;
2219 /* Say where one reference is to the label, for the sake of the
2220 error if it is not defined. */
2221 DECL_SOURCE_LOCATION (decl) = input_location;
2223 /* Record the fact that this identifier is bound to this label. */
2224 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2226 /* Create the label htab for the function on demand. */
2227 if (!named_labels)
2228 named_labels = htab_create_ggc (13, named_label_entry_hash,
2229 named_label_entry_eq, NULL);
2231 /* Record this label on the list of labels used in this function.
2232 We do this before calling make_label_decl so that we get the
2233 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2234 ent = GGC_CNEW (struct named_label_entry);
2235 ent->label_decl = decl;
2237 slot = htab_find_slot (named_labels, ent, INSERT);
2238 gcc_assert (*slot == NULL);
2239 *slot = ent;
2241 return decl;
2244 /* Look for a label named ID in the current function. If one cannot
2245 be found, create one. (We keep track of used, but undefined,
2246 labels, and complain about them at the end of a function.) */
2248 tree
2249 lookup_label (tree id)
2251 tree decl;
2253 timevar_push (TV_NAME_LOOKUP);
2254 /* You can't use labels at global scope. */
2255 if (current_function_decl == NULL_TREE)
2257 error ("label %qE referenced outside of any function", id);
2258 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2261 /* See if we've already got this label. */
2262 decl = IDENTIFIER_LABEL_VALUE (id);
2263 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2264 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2266 decl = make_label_decl (id, /*local_p=*/0);
2267 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2270 /* Declare a local label named ID. */
2272 tree
2273 declare_local_label (tree id)
2275 tree decl, shadow;
2277 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2278 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2279 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2280 current_binding_level->shadowed_labels);
2281 current_binding_level->shadowed_labels = shadow;
2283 decl = make_label_decl (id, /*local_p=*/1);
2284 TREE_VALUE (shadow) = decl;
2286 return decl;
2289 /* Returns nonzero if it is ill-formed to jump past the declaration of
2290 DECL. Returns 2 if it's also a real problem. */
2292 static int
2293 decl_jump_unsafe (tree decl)
2295 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2296 || TREE_TYPE (decl) == error_mark_node)
2297 return 0;
2299 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2300 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2301 return 2;
2303 if (pod_type_p (TREE_TYPE (decl)))
2304 return 0;
2306 /* The POD stuff is just pedantry; why should it matter if the class
2307 contains a field of pointer to member type? */
2308 return 1;
2311 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2313 static void
2314 identify_goto (tree decl, const location_t *locus)
2316 if (decl)
2317 pedwarn ("jump to label %qD", decl);
2318 else
2319 pedwarn ("jump to case label");
2320 if (locus)
2321 pedwarn ("%H from here", locus);
2324 /* Check that a single previously seen jump to a newly defined label
2325 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2326 the jump context; NAMES are the names in scope in LEVEL at the jump
2327 context; LOCUS is the source position of the jump or 0. Returns
2328 true if all is well. */
2330 static bool
2331 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2332 bool exited_omp, const location_t *locus)
2334 struct cp_binding_level *b;
2335 bool identified = false, saw_eh = false, saw_omp = false;
2337 if (exited_omp)
2339 identify_goto (decl, locus);
2340 error (" exits OpenMP structured block");
2341 identified = saw_omp = true;
2344 for (b = current_binding_level; b ; b = b->level_chain)
2346 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2348 for (new_decls = b->names; new_decls != old_decls;
2349 new_decls = TREE_CHAIN (new_decls))
2351 int problem = decl_jump_unsafe (new_decls);
2352 if (! problem)
2353 continue;
2355 if (!identified)
2357 identify_goto (decl, locus);
2358 identified = true;
2360 if (problem > 1)
2361 error (" crosses initialization of %q+#D", new_decls);
2362 else
2363 pedwarn (" enters scope of non-POD %q+#D", new_decls);
2366 if (b == level)
2367 break;
2368 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2370 if (!identified)
2372 identify_goto (decl, locus);
2373 identified = true;
2375 if (b->kind == sk_try)
2376 error (" enters try block");
2377 else
2378 error (" enters catch block");
2379 saw_eh = true;
2381 if (b->kind == sk_omp && !saw_omp)
2383 if (!identified)
2385 identify_goto (decl, locus);
2386 identified = true;
2388 error (" enters OpenMP structured block");
2389 saw_omp = true;
2393 return !identified;
2396 static void
2397 check_previous_goto (tree decl, struct named_label_use_entry *use)
2399 check_previous_goto_1 (decl, use->binding_level,
2400 use->names_in_scope, use->in_omp_scope,
2401 &use->o_goto_locus);
2404 static bool
2405 check_switch_goto (struct cp_binding_level* level)
2407 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2410 /* Check that a new jump to a label DECL is OK. Called by
2411 finish_goto_stmt. */
2413 void
2414 check_goto (tree decl)
2416 struct named_label_entry *ent, dummy;
2417 bool saw_catch = false, identified = false;
2418 tree bad;
2420 /* We can't know where a computed goto is jumping.
2421 So we assume that it's OK. */
2422 if (TREE_CODE (decl) != LABEL_DECL)
2423 return;
2425 /* We didn't record any information about this label when we created it,
2426 and there's not much point since it's trivial to analyze as a return. */
2427 if (decl == cdtor_label)
2428 return;
2430 dummy.label_decl = decl;
2431 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2432 gcc_assert (ent != NULL);
2434 /* If the label hasn't been defined yet, defer checking. */
2435 if (! DECL_INITIAL (decl))
2437 struct named_label_use_entry *new_use;
2439 /* Don't bother creating another use if the last goto had the
2440 same data, and will therefore create the same set of errors. */
2441 if (ent->uses
2442 && ent->uses->names_in_scope == current_binding_level->names)
2443 return;
2445 new_use = GGC_NEW (struct named_label_use_entry);
2446 new_use->binding_level = current_binding_level;
2447 new_use->names_in_scope = current_binding_level->names;
2448 new_use->o_goto_locus = input_location;
2449 new_use->in_omp_scope = false;
2451 new_use->next = ent->uses;
2452 ent->uses = new_use;
2453 return;
2456 if (ent->in_try_scope || ent->in_catch_scope
2457 || ent->in_omp_scope || ent->bad_decls)
2459 pedwarn ("jump to label %q+D", decl);
2460 pedwarn (" from here");
2461 identified = true;
2464 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2466 tree b = TREE_VALUE (bad);
2467 int u = decl_jump_unsafe (b);
2469 if (u > 1 && DECL_ARTIFICIAL (b))
2471 /* Can't skip init of __exception_info. */
2472 error ("%J enters catch block", b);
2473 saw_catch = true;
2475 else if (u > 1)
2476 error (" skips initialization of %q+#D", b);
2477 else
2478 pedwarn (" enters scope of non-POD %q+#D", b);
2481 if (ent->in_try_scope)
2482 error (" enters try block");
2483 else if (ent->in_catch_scope && !saw_catch)
2484 error (" enters catch block");
2486 if (ent->in_omp_scope)
2487 error (" enters OpenMP structured block");
2488 else if (flag_openmp)
2490 struct cp_binding_level *b;
2491 for (b = current_binding_level; b ; b = b->level_chain)
2493 if (b == ent->binding_level)
2494 break;
2495 if (b->kind == sk_omp)
2497 if (!identified)
2499 pedwarn ("jump to label %q+D", decl);
2500 pedwarn (" from here");
2501 identified = true;
2503 error (" exits OpenMP structured block");
2504 break;
2510 /* Check that a return is ok wrt OpenMP structured blocks.
2511 Called by finish_return_stmt. Returns true if all is well. */
2513 bool
2514 check_omp_return (void)
2516 struct cp_binding_level *b;
2517 for (b = current_binding_level; b ; b = b->level_chain)
2518 if (b->kind == sk_omp)
2520 error ("invalid exit from OpenMP structured block");
2521 return false;
2523 return true;
2526 /* Define a label, specifying the location in the source file.
2527 Return the LABEL_DECL node for the label. */
2529 tree
2530 define_label (location_t location, tree name)
2532 struct named_label_entry *ent, dummy;
2533 struct cp_binding_level *p;
2534 tree decl;
2536 timevar_push (TV_NAME_LOOKUP);
2538 decl = lookup_label (name);
2540 dummy.label_decl = decl;
2541 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2542 gcc_assert (ent != NULL);
2544 /* After labels, make any new cleanups in the function go into their
2545 own new (temporary) binding contour. */
2546 for (p = current_binding_level;
2547 p->kind != sk_function_parms;
2548 p = p->level_chain)
2549 p->more_cleanups_ok = 0;
2551 if (name == get_identifier ("wchar_t"))
2552 pedwarn ("label named wchar_t");
2554 if (DECL_INITIAL (decl) != NULL_TREE)
2556 error ("duplicate label %qD", decl);
2557 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2559 else
2561 struct named_label_use_entry *use;
2563 /* Mark label as having been defined. */
2564 DECL_INITIAL (decl) = error_mark_node;
2565 /* Say where in the source. */
2566 DECL_SOURCE_LOCATION (decl) = location;
2568 ent->binding_level = current_binding_level;
2569 ent->names_in_scope = current_binding_level->names;
2571 for (use = ent->uses; use ; use = use->next)
2572 check_previous_goto (decl, use);
2573 ent->uses = NULL;
2576 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2579 struct cp_switch
2581 struct cp_binding_level *level;
2582 struct cp_switch *next;
2583 /* The SWITCH_STMT being built. */
2584 tree switch_stmt;
2585 /* A splay-tree mapping the low element of a case range to the high
2586 element, or NULL_TREE if there is no high element. Used to
2587 determine whether or not a new case label duplicates an old case
2588 label. We need a tree, rather than simply a hash table, because
2589 of the GNU case range extension. */
2590 splay_tree cases;
2593 /* A stack of the currently active switch statements. The innermost
2594 switch statement is on the top of the stack. There is no need to
2595 mark the stack for garbage collection because it is only active
2596 during the processing of the body of a function, and we never
2597 collect at that point. */
2599 static struct cp_switch *switch_stack;
2601 /* Called right after a switch-statement condition is parsed.
2602 SWITCH_STMT is the switch statement being parsed. */
2604 void
2605 push_switch (tree switch_stmt)
2607 struct cp_switch *p = XNEW (struct cp_switch);
2608 p->level = current_binding_level;
2609 p->next = switch_stack;
2610 p->switch_stmt = switch_stmt;
2611 p->cases = splay_tree_new (case_compare, NULL, NULL);
2612 switch_stack = p;
2615 void
2616 pop_switch (void)
2618 struct cp_switch *cs = switch_stack;
2619 location_t switch_location;
2621 /* Emit warnings as needed. */
2622 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2623 switch_location = EXPR_LOCATION (cs->switch_stmt);
2624 else
2625 switch_location = input_location;
2626 if (!processing_template_decl)
2627 c_do_switch_warnings (cs->cases, switch_location,
2628 SWITCH_STMT_TYPE (cs->switch_stmt),
2629 SWITCH_STMT_COND (cs->switch_stmt));
2631 splay_tree_delete (cs->cases);
2632 switch_stack = switch_stack->next;
2633 free (cs);
2636 /* Note that we've seen a definition of a case label, and complain if this
2637 is a bad place for one. */
2639 tree
2640 finish_case_label (tree low_value, tree high_value)
2642 tree cond, r;
2643 struct cp_binding_level *p;
2645 if (processing_template_decl)
2647 tree label;
2649 /* For templates, just add the case label; we'll do semantic
2650 analysis at instantiation-time. */
2651 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2652 return add_stmt (build_case_label (low_value, high_value, label));
2655 /* Find the condition on which this switch statement depends. */
2656 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2657 if (cond && TREE_CODE (cond) == TREE_LIST)
2658 cond = TREE_VALUE (cond);
2660 if (!check_switch_goto (switch_stack->level))
2661 return error_mark_node;
2663 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2664 low_value, high_value);
2666 /* After labels, make any new cleanups in the function go into their
2667 own new (temporary) binding contour. */
2668 for (p = current_binding_level;
2669 p->kind != sk_function_parms;
2670 p = p->level_chain)
2671 p->more_cleanups_ok = 0;
2673 return r;
2676 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2678 static hashval_t
2679 typename_hash (const void* k)
2681 hashval_t hash;
2682 tree t = (tree) k;
2684 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2685 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2687 return hash;
2690 typedef struct typename_info {
2691 tree scope;
2692 tree name;
2693 tree template_id;
2694 bool enum_p;
2695 bool class_p;
2696 } typename_info;
2698 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2700 static int
2701 typename_compare (const void * k1, const void * k2)
2703 tree t1;
2704 const typename_info *t2;
2706 t1 = (tree) k1;
2707 t2 = (const typename_info *) k2;
2709 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2710 && TYPE_CONTEXT (t1) == t2->scope
2711 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2712 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2713 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2716 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2717 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2719 Returns the new TYPENAME_TYPE. */
2721 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2723 static tree
2724 build_typename_type (tree context, tree name, tree fullname,
2725 enum tag_types tag_type)
2727 tree t;
2728 tree d;
2729 typename_info ti;
2730 void **e;
2731 hashval_t hash;
2733 if (typename_htab == NULL)
2734 typename_htab = htab_create_ggc (61, &typename_hash,
2735 &typename_compare, NULL);
2737 ti.scope = FROB_CONTEXT (context);
2738 ti.name = name;
2739 ti.template_id = fullname;
2740 ti.enum_p = tag_type == enum_type;
2741 ti.class_p = (tag_type == class_type
2742 || tag_type == record_type
2743 || tag_type == union_type);
2744 hash = (htab_hash_pointer (ti.scope)
2745 ^ htab_hash_pointer (ti.name));
2747 /* See if we already have this type. */
2748 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2749 if (*e)
2750 t = (tree) *e;
2751 else
2753 /* Build the TYPENAME_TYPE. */
2754 t = make_aggr_type (TYPENAME_TYPE);
2755 TYPE_CONTEXT (t) = ti.scope;
2756 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2757 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2758 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2760 /* Build the corresponding TYPE_DECL. */
2761 d = build_decl (TYPE_DECL, name, t);
2762 TYPE_NAME (TREE_TYPE (d)) = d;
2763 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2764 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2765 DECL_ARTIFICIAL (d) = 1;
2767 /* Store it in the hash table. */
2768 *e = t;
2771 return t;
2774 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2775 provided to name the type. Returns an appropriate type, unless an
2776 error occurs, in which case error_mark_node is returned. If we
2777 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2778 return that, rather than the _TYPE it corresponds to, in other
2779 cases we look through the type decl. If TF_ERROR is set, complain
2780 about errors, otherwise be quiet. */
2782 tree
2783 make_typename_type (tree context, tree name, enum tag_types tag_type,
2784 tsubst_flags_t complain)
2786 tree fullname;
2787 tree t;
2788 bool want_template;
2790 if (name == error_mark_node
2791 || context == NULL_TREE
2792 || context == error_mark_node)
2793 return error_mark_node;
2795 if (TYPE_P (name))
2797 if (!(TYPE_LANG_SPECIFIC (name)
2798 && (CLASSTYPE_IS_TEMPLATE (name)
2799 || CLASSTYPE_USE_TEMPLATE (name))))
2800 name = TYPE_IDENTIFIER (name);
2801 else
2802 /* Create a TEMPLATE_ID_EXPR for the type. */
2803 name = build_nt (TEMPLATE_ID_EXPR,
2804 CLASSTYPE_TI_TEMPLATE (name),
2805 CLASSTYPE_TI_ARGS (name));
2807 else if (TREE_CODE (name) == TYPE_DECL)
2808 name = DECL_NAME (name);
2810 fullname = name;
2812 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2814 name = TREE_OPERAND (name, 0);
2815 if (TREE_CODE (name) == TEMPLATE_DECL)
2816 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2818 if (TREE_CODE (name) == TEMPLATE_DECL)
2820 error ("%qD used without template parameters", name);
2821 return error_mark_node;
2823 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2824 gcc_assert (TYPE_P (context));
2826 /* When the CONTEXT is a dependent type, NAME could refer to a
2827 dependent base class of CONTEXT. So we cannot peek inside it,
2828 even if CONTEXT is a currently open scope. */
2829 if (dependent_type_p (context))
2830 return build_typename_type (context, name, fullname, tag_type);
2832 if (!IS_AGGR_TYPE (context))
2834 if (complain & tf_error)
2835 error ("%q#T is not a class", context);
2836 return error_mark_node;
2839 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
2841 /* We should only set WANT_TYPE when we're a nested typename type.
2842 Then we can give better diagnostics if we find a non-type. */
2843 t = lookup_field (context, name, 0, /*want_type=*/true);
2844 if (!t)
2846 if (complain & tf_error)
2847 error (want_template ? "no class template named %q#T in %q#T"
2848 : "no type named %q#T in %q#T", name, context);
2849 return error_mark_node;
2852 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
2854 if (complain & tf_error)
2855 error ("%<typename %T::%D%> names %q#T, which is not a class template",
2856 context, name, t);
2857 return error_mark_node;
2859 if (!want_template && TREE_CODE (t) != TYPE_DECL)
2861 if (complain & tf_error)
2862 error ("%<typename %T::%D%> names %q#T, which is not a type",
2863 context, name, t);
2864 return error_mark_node;
2867 if (complain & tf_error)
2868 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
2870 if (want_template)
2871 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
2872 NULL_TREE, context,
2873 /*entering_scope=*/0,
2874 tf_warning_or_error | tf_user);
2876 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2877 t = TREE_TYPE (t);
2879 return t;
2882 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2883 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2884 in which case error_mark_node is returned.
2886 If PARM_LIST is non-NULL, also make sure that the template parameter
2887 list of TEMPLATE_DECL matches.
2889 If COMPLAIN zero, don't complain about any errors that occur. */
2891 tree
2892 make_unbound_class_template (tree context, tree name, tree parm_list,
2893 tsubst_flags_t complain)
2895 tree t;
2896 tree d;
2898 if (TYPE_P (name))
2899 name = TYPE_IDENTIFIER (name);
2900 else if (DECL_P (name))
2901 name = DECL_NAME (name);
2902 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2904 if (!dependent_type_p (context)
2905 || currently_open_class (context))
2907 tree tmpl = NULL_TREE;
2909 if (IS_AGGR_TYPE (context))
2910 tmpl = lookup_field (context, name, 0, false);
2912 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2914 if (complain & tf_error)
2915 error ("no class template named %q#T in %q#T", name, context);
2916 return error_mark_node;
2919 if (parm_list
2920 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2922 if (complain & tf_error)
2924 error ("template parameters do not match template");
2925 error ("%q+D declared here", tmpl);
2927 return error_mark_node;
2930 if (complain & tf_error)
2931 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
2933 return tmpl;
2936 /* Build the UNBOUND_CLASS_TEMPLATE. */
2937 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2938 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2939 TREE_TYPE (t) = NULL_TREE;
2941 /* Build the corresponding TEMPLATE_DECL. */
2942 d = build_decl (TEMPLATE_DECL, name, t);
2943 TYPE_NAME (TREE_TYPE (d)) = d;
2944 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2945 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2946 DECL_ARTIFICIAL (d) = 1;
2947 DECL_TEMPLATE_PARMS (d) = parm_list;
2949 return t;
2954 /* Push the declarations of builtin types into the namespace.
2955 RID_INDEX is the index of the builtin type in the array
2956 RID_POINTERS. NAME is the name used when looking up the builtin
2957 type. TYPE is the _TYPE node for the builtin type. */
2959 void
2960 record_builtin_type (enum rid rid_index,
2961 const char* name,
2962 tree type)
2964 tree rname = NULL_TREE, tname = NULL_TREE;
2965 tree tdecl = NULL_TREE;
2967 if ((int) rid_index < (int) RID_MAX)
2968 rname = ridpointers[(int) rid_index];
2969 if (name)
2970 tname = get_identifier (name);
2972 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2973 eliminated. Built-in types should not be looked up name; their
2974 names are keywords that the parser can recognize. However, there
2975 is code in c-common.c that uses identifier_global_value to look
2976 up built-in types by name. */
2977 if (tname)
2979 tdecl = build_decl (TYPE_DECL, tname, type);
2980 DECL_ARTIFICIAL (tdecl) = 1;
2981 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2983 if (rname)
2985 if (!tdecl)
2987 tdecl = build_decl (TYPE_DECL, rname, type);
2988 DECL_ARTIFICIAL (tdecl) = 1;
2990 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2993 if (!TYPE_NAME (type))
2994 TYPE_NAME (type) = tdecl;
2996 if (tdecl)
2997 debug_hooks->type_decl (tdecl, 0);
3000 /* Record one of the standard Java types.
3001 * Declare it as having the given NAME.
3002 * If SIZE > 0, it is the size of one of the integral types;
3003 * otherwise it is the negative of the size of one of the other types. */
3005 static tree
3006 record_builtin_java_type (const char* name, int size)
3008 tree type, decl;
3009 if (size > 0)
3010 type = make_signed_type (size);
3011 else if (size > -32)
3012 { /* "__java_char" or ""__java_boolean". */
3013 type = make_unsigned_type (-size);
3014 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3016 else
3017 { /* "__java_float" or ""__java_double". */
3018 type = make_node (REAL_TYPE);
3019 TYPE_PRECISION (type) = - size;
3020 layout_type (type);
3022 record_builtin_type (RID_MAX, name, type);
3023 decl = TYPE_NAME (type);
3025 /* Suppress generate debug symbol entries for these types,
3026 since for normal C++ they are just clutter.
3027 However, push_lang_context undoes this if extern "Java" is seen. */
3028 DECL_IGNORED_P (decl) = 1;
3030 TYPE_FOR_JAVA (type) = 1;
3031 return type;
3034 /* Push a type into the namespace so that the back-ends ignore it. */
3036 static void
3037 record_unknown_type (tree type, const char* name)
3039 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3040 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3041 DECL_IGNORED_P (decl) = 1;
3042 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3043 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3044 TYPE_ALIGN (type) = 1;
3045 TYPE_USER_ALIGN (type) = 0;
3046 TYPE_MODE (type) = TYPE_MODE (void_type_node);
3049 /* A string for which we should create an IDENTIFIER_NODE at
3050 startup. */
3052 typedef struct predefined_identifier
3054 /* The name of the identifier. */
3055 const char *const name;
3056 /* The place where the IDENTIFIER_NODE should be stored. */
3057 tree *const node;
3058 /* Nonzero if this is the name of a constructor or destructor. */
3059 const int ctor_or_dtor_p;
3060 } predefined_identifier;
3062 /* Create all the predefined identifiers. */
3064 static void
3065 initialize_predefined_identifiers (void)
3067 const predefined_identifier *pid;
3069 /* A table of identifiers to create at startup. */
3070 static const predefined_identifier predefined_identifiers[] = {
3071 { "C++", &lang_name_cplusplus, 0 },
3072 { "C", &lang_name_c, 0 },
3073 { "Java", &lang_name_java, 0 },
3074 /* Some of these names have a trailing space so that it is
3075 impossible for them to conflict with names written by users. */
3076 { "__ct ", &ctor_identifier, 1 },
3077 { "__base_ctor ", &base_ctor_identifier, 1 },
3078 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3079 { "__dt ", &dtor_identifier, 1 },
3080 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3081 { "__base_dtor ", &base_dtor_identifier, 1 },
3082 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3083 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3084 { "nelts", &nelts_identifier, 0 },
3085 { THIS_NAME, &this_identifier, 0 },
3086 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3087 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3088 { "_vptr", &vptr_identifier, 0 },
3089 { "__vtt_parm", &vtt_parm_identifier, 0 },
3090 { "::", &global_scope_name, 0 },
3091 { "std", &std_identifier, 0 },
3092 { NULL, NULL, 0 }
3095 for (pid = predefined_identifiers; pid->name; ++pid)
3097 *pid->node = get_identifier (pid->name);
3098 if (pid->ctor_or_dtor_p)
3099 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3103 /* Create the predefined scalar types of C,
3104 and some nodes representing standard constants (0, 1, (void *)0).
3105 Initialize the global binding level.
3106 Make definitions for built-in primitive functions. */
3108 void
3109 cxx_init_decl_processing (void)
3111 tree void_ftype;
3112 tree void_ftype_ptr;
3114 build_common_tree_nodes (flag_signed_char, false);
3116 /* Create all the identifiers we need. */
3117 initialize_predefined_identifiers ();
3119 /* Create the global variables. */
3120 push_to_top_level ();
3122 current_function_decl = NULL_TREE;
3123 current_binding_level = NULL;
3124 /* Enter the global namespace. */
3125 gcc_assert (global_namespace == NULL_TREE);
3126 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3127 void_type_node);
3128 TREE_PUBLIC (global_namespace) = 1;
3129 begin_scope (sk_namespace, global_namespace);
3131 current_lang_name = NULL_TREE;
3133 /* Adjust various flags based on command-line settings. */
3134 if (!flag_permissive)
3135 flag_pedantic_errors = 1;
3136 if (!flag_no_inline)
3138 flag_inline_trees = 1;
3139 flag_no_inline = 1;
3141 if (flag_inline_functions)
3142 flag_inline_trees = 2;
3144 /* Force minimum function alignment if using the least significant
3145 bit of function pointers to store the virtual bit. */
3146 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
3147 && force_align_functions_log < 1)
3148 force_align_functions_log = 1;
3150 /* Initially, C. */
3151 current_lang_name = lang_name_c;
3153 /* Create the `std' namespace. */
3154 push_namespace (std_identifier);
3155 std_node = current_namespace;
3156 pop_namespace ();
3158 c_common_nodes_and_builtins ();
3160 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3161 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3162 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3163 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3164 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3165 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3166 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3167 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3169 integer_two_node = build_int_cst (NULL_TREE, 2);
3170 integer_three_node = build_int_cst (NULL_TREE, 3);
3172 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3173 truthvalue_type_node = boolean_type_node;
3174 truthvalue_false_node = boolean_false_node;
3175 truthvalue_true_node = boolean_true_node;
3177 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3179 #if 0
3180 record_builtin_type (RID_MAX, NULL, string_type_node);
3181 #endif
3183 delta_type_node = ptrdiff_type_node;
3184 vtable_index_type = ptrdiff_type_node;
3186 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3187 void_ftype = build_function_type (void_type_node, void_list_node);
3188 void_ftype_ptr = build_function_type (void_type_node,
3189 tree_cons (NULL_TREE,
3190 ptr_type_node,
3191 void_list_node));
3192 void_ftype_ptr
3193 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3195 /* C++ extensions */
3197 unknown_type_node = make_node (UNKNOWN_TYPE);
3198 record_unknown_type (unknown_type_node, "unknown type");
3200 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3201 TREE_TYPE (unknown_type_node) = unknown_type_node;
3203 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3204 result. */
3205 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3206 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3209 /* Make sure we get a unique function type, so we can give
3210 its pointer type a name. (This wins for gdb.) */
3211 tree vfunc_type = make_node (FUNCTION_TYPE);
3212 TREE_TYPE (vfunc_type) = integer_type_node;
3213 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3214 layout_type (vfunc_type);
3216 vtable_entry_type = build_pointer_type (vfunc_type);
3218 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3220 vtbl_type_node
3221 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3222 layout_type (vtbl_type_node);
3223 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3224 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3225 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3226 layout_type (vtbl_ptr_type_node);
3227 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3229 push_namespace (get_identifier ("__cxxabiv1"));
3230 abi_node = current_namespace;
3231 pop_namespace ();
3233 global_type_node = make_node (LANG_TYPE);
3234 record_unknown_type (global_type_node, "global type");
3236 /* Now, C++. */
3237 current_lang_name = lang_name_cplusplus;
3240 tree bad_alloc_id;
3241 tree bad_alloc_type_node;
3242 tree bad_alloc_decl;
3243 tree newtype, deltype;
3244 tree ptr_ftype_sizetype;
3246 push_namespace (std_identifier);
3247 bad_alloc_id = get_identifier ("bad_alloc");
3248 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3249 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3250 bad_alloc_decl
3251 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3252 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3253 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3254 pop_namespace ();
3256 ptr_ftype_sizetype
3257 = build_function_type (ptr_type_node,
3258 tree_cons (NULL_TREE,
3259 size_type_node,
3260 void_list_node));
3261 newtype = build_exception_variant
3262 (ptr_ftype_sizetype, add_exception_specifier
3263 (NULL_TREE, bad_alloc_type_node, -1));
3264 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3265 push_cp_library_fn (NEW_EXPR, newtype);
3266 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3267 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3268 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3271 abort_fndecl
3272 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3274 /* Perform other language dependent initializations. */
3275 init_class_processing ();
3276 init_rtti_processing ();
3278 if (flag_exceptions)
3279 init_exception_processing ();
3281 if (! supports_one_only ())
3282 flag_weak = 0;
3284 make_fname_decl = cp_make_fname_decl;
3285 start_fname_decls ();
3287 /* Show we use EH for cleanups. */
3288 if (flag_exceptions)
3289 using_eh_for_cleanups ();
3292 /* Generate an initializer for a function naming variable from
3293 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3294 filled in with the type of the init. */
3296 tree
3297 cp_fname_init (const char* name, tree *type_p)
3299 tree domain = NULL_TREE;
3300 tree type;
3301 tree init = NULL_TREE;
3302 size_t length = 0;
3304 if (name)
3306 length = strlen (name);
3307 domain = build_index_type (size_int (length));
3308 init = build_string (length + 1, name);
3311 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3312 type = build_cplus_array_type (type, domain);
3314 *type_p = type;
3316 if (init)
3317 TREE_TYPE (init) = type;
3318 else
3319 init = error_mark_node;
3321 return init;
3324 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3325 decl, NAME is the initialization string and TYPE_DEP indicates whether
3326 NAME depended on the type of the function. We make use of that to detect
3327 __PRETTY_FUNCTION__ inside a template fn. This is being done
3328 lazily at the point of first use, so we mustn't push the decl now. */
3330 static tree
3331 cp_make_fname_decl (tree id, int type_dep)
3333 const char *const name = (type_dep && processing_template_decl
3334 ? NULL : fname_as_string (type_dep));
3335 tree type;
3336 tree init = cp_fname_init (name, &type);
3337 tree decl = build_decl (VAR_DECL, id, type);
3339 if (name)
3340 free ((char *) name);
3342 /* As we're using pushdecl_with_scope, we must set the context. */
3343 DECL_CONTEXT (decl) = current_function_decl;
3344 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3346 TREE_STATIC (decl) = 1;
3347 TREE_READONLY (decl) = 1;
3348 DECL_ARTIFICIAL (decl) = 1;
3350 TREE_USED (decl) = 1;
3352 if (current_function_decl)
3354 struct cp_binding_level *b = current_binding_level;
3355 while (b->level_chain->kind != sk_function_parms)
3356 b = b->level_chain;
3357 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3358 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3359 LOOKUP_ONLYCONVERTING);
3361 else
3362 pushdecl_top_level_and_finish (decl, init);
3364 return decl;
3367 static tree
3368 builtin_function_1 (tree decl, tree context)
3370 tree id = DECL_NAME (decl);
3371 const char *name = IDENTIFIER_POINTER (id);
3373 retrofit_lang_decl (decl);
3375 /* All nesting of C++ functions is lexical; there is never a "static
3376 chain" in the sense of GNU C nested functions. */
3377 DECL_NO_STATIC_CHAIN (decl) = 1;
3379 DECL_ARTIFICIAL (decl) = 1;
3380 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3381 SET_DECL_LANGUAGE (decl, lang_c);
3382 /* Runtime library routines are, by definition, available in an
3383 external shared object. */
3384 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3385 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3387 DECL_CONTEXT (decl) = context;
3389 pushdecl (decl);
3391 /* A function in the user's namespace should have an explicit
3392 declaration before it is used. Mark the built-in function as
3393 anticipated but not actually declared. */
3394 if (name[0] != '_' || name[1] != '_')
3395 DECL_ANTICIPATED (decl) = 1;
3397 return decl;
3400 tree
3401 cxx_builtin_function (tree decl)
3403 tree id = DECL_NAME (decl);
3404 const char *name = IDENTIFIER_POINTER (id);
3405 tree decl2 = copy_node(decl);
3406 /* All builtins that don't begin with an '_' should additionally
3407 go in the 'std' namespace. */
3408 if (name[0] != '_')
3410 push_namespace (std_identifier);
3411 builtin_function_1 (decl, std_node);
3412 pop_namespace ();
3415 return builtin_function_1 (decl2, NULL_TREE);
3418 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3419 function. Not called directly. */
3421 static tree
3422 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3424 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3425 DECL_EXTERNAL (fn) = 1;
3426 TREE_PUBLIC (fn) = 1;
3427 DECL_ARTIFICIAL (fn) = 1;
3428 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3429 SET_DECL_LANGUAGE (fn, lang_c);
3430 /* Runtime library routines are, by definition, available in an
3431 external shared object. */
3432 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3433 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3434 return fn;
3437 /* Returns the _DECL for a library function with C linkage.
3438 We assume that such functions never throw; if this is incorrect,
3439 callers should unset TREE_NOTHROW. */
3441 tree
3442 build_library_fn (tree name, tree type)
3444 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3445 TREE_NOTHROW (fn) = 1;
3446 return fn;
3449 /* Returns the _DECL for a library function with C++ linkage. */
3451 static tree
3452 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3454 tree fn = build_library_fn_1 (name, operator_code, type);
3455 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3456 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3457 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3458 return fn;
3461 /* Like build_library_fn, but takes a C string instead of an
3462 IDENTIFIER_NODE. */
3464 tree
3465 build_library_fn_ptr (const char* name, tree type)
3467 return build_library_fn (get_identifier (name), type);
3470 /* Like build_cp_library_fn, but takes a C string instead of an
3471 IDENTIFIER_NODE. */
3473 tree
3474 build_cp_library_fn_ptr (const char* name, tree type)
3476 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3479 /* Like build_library_fn, but also pushes the function so that we will
3480 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3482 tree
3483 push_library_fn (tree name, tree type)
3485 tree fn = build_library_fn (name, type);
3486 pushdecl_top_level (fn);
3487 return fn;
3490 /* Like build_cp_library_fn, but also pushes the function so that it
3491 will be found by normal lookup. */
3493 static tree
3494 push_cp_library_fn (enum tree_code operator_code, tree type)
3496 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3497 operator_code,
3498 type);
3499 pushdecl (fn);
3500 return fn;
3503 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3504 a FUNCTION_TYPE. */
3506 tree
3507 push_void_library_fn (tree name, tree parmtypes)
3509 tree type = build_function_type (void_type_node, parmtypes);
3510 return push_library_fn (name, type);
3513 /* Like push_library_fn, but also note that this function throws
3514 and does not return. Used for __throw_foo and the like. */
3516 tree
3517 push_throw_library_fn (tree name, tree type)
3519 tree fn = push_library_fn (name, type);
3520 TREE_THIS_VOLATILE (fn) = 1;
3521 TREE_NOTHROW (fn) = 0;
3522 return fn;
3525 /* When we call finish_struct for an anonymous union, we create
3526 default copy constructors and such. But, an anonymous union
3527 shouldn't have such things; this function undoes the damage to the
3528 anonymous union type T.
3530 (The reason that we create the synthesized methods is that we don't
3531 distinguish `union { int i; }' from `typedef union { int i; } U'.
3532 The first is an anonymous union; the second is just an ordinary
3533 union type.) */
3535 void
3536 fixup_anonymous_aggr (tree t)
3538 tree *q;
3540 /* Wipe out memory of synthesized methods. */
3541 TYPE_HAS_CONSTRUCTOR (t) = 0;
3542 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3543 TYPE_HAS_INIT_REF (t) = 0;
3544 TYPE_HAS_CONST_INIT_REF (t) = 0;
3545 TYPE_HAS_ASSIGN_REF (t) = 0;
3546 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3548 /* Splice the implicitly generated functions out of the TYPE_METHODS
3549 list. */
3550 q = &TYPE_METHODS (t);
3551 while (*q)
3553 if (DECL_ARTIFICIAL (*q))
3554 *q = TREE_CHAIN (*q);
3555 else
3556 q = &TREE_CHAIN (*q);
3559 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3560 if (TYPE_METHODS (t))
3561 error ("%Jan anonymous union cannot have function members",
3562 TYPE_MAIN_DECL (t));
3564 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3565 assignment operators (because they cannot have these methods themselves).
3566 For anonymous unions this is already checked because they are not allowed
3567 in any union, otherwise we have to check it. */
3568 if (TREE_CODE (t) != UNION_TYPE)
3570 tree field, type;
3572 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3573 if (TREE_CODE (field) == FIELD_DECL)
3575 type = TREE_TYPE (field);
3576 if (CLASS_TYPE_P (type))
3578 if (TYPE_NEEDS_CONSTRUCTING (type))
3579 error ("member %q+#D with constructor not allowed "
3580 "in anonymous aggregate", field);
3581 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3582 error ("member %q+#D with destructor not allowed "
3583 "in anonymous aggregate", field);
3584 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3585 error ("member %q+#D with copy assignment operator "
3586 "not allowed in anonymous aggregate", field);
3592 /* Make sure that a declaration with no declarator is well-formed, i.e.
3593 just declares a tagged type or anonymous union.
3595 Returns the type declared; or NULL_TREE if none. */
3597 tree
3598 check_tag_decl (cp_decl_specifier_seq *declspecs)
3600 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3601 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3602 /* If a class, struct, or enum type is declared by the DECLSPECS
3603 (i.e, if a class-specifier, enum-specifier, or non-typename
3604 elaborated-type-specifier appears in the DECLSPECS),
3605 DECLARED_TYPE is set to the corresponding type. */
3606 tree declared_type = NULL_TREE;
3607 bool error_p = false;
3609 if (declspecs->multiple_types_p)
3610 error ("multiple types in one declaration");
3611 else if (declspecs->redefined_builtin_type)
3613 if (!in_system_header)
3614 pedwarn ("redeclaration of C++ built-in type %qT",
3615 declspecs->redefined_builtin_type);
3616 return NULL_TREE;
3619 if (declspecs->type
3620 && TYPE_P (declspecs->type)
3621 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3622 && IS_AGGR_TYPE (declspecs->type))
3623 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3624 declared_type = declspecs->type;
3625 else if (declspecs->type == error_mark_node)
3626 error_p = true;
3627 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3628 pedwarn ("declaration does not declare anything");
3629 /* Check for an anonymous union. */
3630 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3631 && TYPE_ANONYMOUS_P (declared_type))
3633 /* 7/3 In a simple-declaration, the optional init-declarator-list
3634 can be omitted only when declaring a class (clause 9) or
3635 enumeration (7.2), that is, when the decl-specifier-seq contains
3636 either a class-specifier, an elaborated-type-specifier with
3637 a class-key (9.1), or an enum-specifier. In these cases and
3638 whenever a class-specifier or enum-specifier is present in the
3639 decl-specifier-seq, the identifiers in these specifiers are among
3640 the names being declared by the declaration (as class-name,
3641 enum-names, or enumerators, depending on the syntax). In such
3642 cases, and except for the declaration of an unnamed bit-field (9.6),
3643 the decl-specifier-seq shall introduce one or more names into the
3644 program, or shall redeclare a name introduced by a previous
3645 declaration. [Example:
3646 enum { }; // ill-formed
3647 typedef class { }; // ill-formed
3648 --end example] */
3649 if (saw_typedef)
3651 error ("missing type-name in typedef-declaration");
3652 return NULL_TREE;
3654 /* Anonymous unions are objects, so they can have specifiers. */;
3655 SET_ANON_AGGR_TYPE_P (declared_type);
3657 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3658 && !in_system_header)
3659 pedwarn ("ISO C++ prohibits anonymous structs");
3662 else
3664 if (declspecs->specs[(int)ds_inline]
3665 || declspecs->specs[(int)ds_virtual])
3666 error ("%qs can only be specified for functions",
3667 declspecs->specs[(int)ds_inline]
3668 ? "inline" : "virtual");
3669 else if (saw_friend
3670 && (!current_class_type
3671 || current_scope () != current_class_type))
3672 error ("%<friend%> can only be specified inside a class");
3673 else if (declspecs->specs[(int)ds_explicit])
3674 error ("%<explicit%> can only be specified for constructors");
3675 else if (declspecs->storage_class)
3676 error ("a storage class can only be specified for objects "
3677 "and functions");
3678 else if (declspecs->specs[(int)ds_const]
3679 || declspecs->specs[(int)ds_volatile]
3680 || declspecs->specs[(int)ds_restrict]
3681 || declspecs->specs[(int)ds_thread])
3682 error ("qualifiers can only be specified for objects "
3683 "and functions");
3686 return declared_type;
3689 /* Called when a declaration is seen that contains no names to declare.
3690 If its type is a reference to a structure, union or enum inherited
3691 from a containing scope, shadow that tag name for the current scope
3692 with a forward reference.
3693 If its type defines a new named structure or union
3694 or defines an enum, it is valid but we need not do anything here.
3695 Otherwise, it is an error.
3697 C++: may have to grok the declspecs to learn about static,
3698 complain for anonymous unions.
3700 Returns the TYPE declared -- or NULL_TREE if none. */
3702 tree
3703 shadow_tag (cp_decl_specifier_seq *declspecs)
3705 tree t = check_tag_decl (declspecs);
3707 if (!t)
3708 return NULL_TREE;
3710 if (declspecs->attributes)
3712 warning (0, "attribute ignored in declaration of %q+#T", t);
3713 warning (0, "attribute for %q+#T must follow the %qs keyword",
3714 t, class_key_or_enum_as_string (t));
3718 if (maybe_process_partial_specialization (t) == error_mark_node)
3719 return NULL_TREE;
3721 /* This is where the variables in an anonymous union are
3722 declared. An anonymous union declaration looks like:
3723 union { ... } ;
3724 because there is no declarator after the union, the parser
3725 sends that declaration here. */
3726 if (ANON_AGGR_TYPE_P (t))
3728 fixup_anonymous_aggr (t);
3730 if (TYPE_FIELDS (t))
3732 tree decl = grokdeclarator (/*declarator=*/NULL,
3733 declspecs, NORMAL, 0, NULL);
3734 finish_anon_union (decl);
3738 return t;
3741 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3743 tree
3744 groktypename (cp_decl_specifier_seq *type_specifiers,
3745 const cp_declarator *declarator)
3747 tree attrs;
3748 tree type;
3749 attrs = type_specifiers->attributes;
3750 type_specifiers->attributes = NULL_TREE;
3751 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3752 if (attrs)
3753 cplus_decl_attributes (&type, attrs, 0);
3754 return type;
3757 /* Decode a declarator in an ordinary declaration or data definition.
3758 This is called as soon as the type information and variable name
3759 have been parsed, before parsing the initializer if any.
3760 Here we create the ..._DECL node, fill in its type,
3761 and put it on the list of decls for the current context.
3762 The ..._DECL node is returned as the value.
3764 Exception: for arrays where the length is not specified,
3765 the type is left null, to be filled in by `cp_finish_decl'.
3767 Function definitions do not come here; they go to start_function
3768 instead. However, external and forward declarations of functions
3769 do go through here. Structure field declarations are done by
3770 grokfield and not through here. */
3772 tree
3773 start_decl (const cp_declarator *declarator,
3774 cp_decl_specifier_seq *declspecs,
3775 int initialized,
3776 tree attributes,
3777 tree prefix_attributes,
3778 tree *pushed_scope_p)
3780 tree decl;
3781 tree type, tem;
3782 tree context;
3784 *pushed_scope_p = NULL_TREE;
3786 /* An object declared as __attribute__((deprecated)) suppresses
3787 warnings of uses of other deprecated items. */
3788 if (lookup_attribute ("deprecated", attributes))
3789 deprecated_state = DEPRECATED_SUPPRESS;
3791 attributes = chainon (attributes, prefix_attributes);
3793 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3794 &attributes);
3796 deprecated_state = DEPRECATED_NORMAL;
3798 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3799 || decl == error_mark_node)
3800 return error_mark_node;
3802 type = TREE_TYPE (decl);
3804 context = DECL_CONTEXT (decl);
3806 if (context)
3808 *pushed_scope_p = push_scope (context);
3810 /* We are only interested in class contexts, later. */
3811 if (TREE_CODE (context) == NAMESPACE_DECL)
3812 context = NULL_TREE;
3815 if (initialized)
3816 /* Is it valid for this decl to have an initializer at all?
3817 If not, set INITIALIZED to zero, which will indirectly
3818 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3819 switch (TREE_CODE (decl))
3821 case TYPE_DECL:
3822 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3823 return error_mark_node;
3825 case FUNCTION_DECL:
3826 error ("function %q#D is initialized like a variable", decl);
3827 return error_mark_node;
3829 default:
3830 break;
3833 if (initialized)
3835 if (! toplevel_bindings_p ()
3836 && DECL_EXTERNAL (decl))
3837 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3838 decl);
3839 DECL_EXTERNAL (decl) = 0;
3840 if (toplevel_bindings_p ())
3841 TREE_STATIC (decl) = 1;
3844 /* Set attributes here so if duplicate decl, will have proper attributes. */
3845 cplus_decl_attributes (&decl, attributes, 0);
3847 /* Dllimported symbols cannot be defined. Static data members (which
3848 can be initialized in-class and dllimported) go through grokfield,
3849 not here, so we don't need to exclude those decls when checking for
3850 a definition. */
3851 if (initialized && DECL_DLLIMPORT_P (decl))
3853 error ("definition of %q#D is marked %<dllimport%>", decl);
3854 DECL_DLLIMPORT_P (decl) = 0;
3857 /* If #pragma weak was used, mark the decl weak now. */
3858 maybe_apply_pragma_weak (decl);
3860 if (TREE_CODE (decl) == FUNCTION_DECL
3861 && DECL_DECLARED_INLINE_P (decl)
3862 && DECL_UNINLINABLE (decl)
3863 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3864 warning (0, "inline function %q+D given attribute noinline", decl);
3866 if (context && COMPLETE_TYPE_P (complete_type (context)))
3868 if (TREE_CODE (decl) == VAR_DECL)
3870 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3871 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3872 error ("%q#D is not a static member of %q#T", decl, context);
3873 else
3875 if (DECL_CONTEXT (field) != context)
3877 if (!same_type_p (DECL_CONTEXT (field), context))
3878 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3879 "to be defined as %<%T::%D%>",
3880 DECL_CONTEXT (field), DECL_NAME (decl),
3881 context, DECL_NAME (decl));
3882 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3884 if (processing_specialization
3885 && template_class_depth (context) == 0
3886 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3887 error ("template header not allowed in member definition "
3888 "of explicitly specialized class");
3889 /* Static data member are tricky; an in-class initialization
3890 still doesn't provide a definition, so the in-class
3891 declaration will have DECL_EXTERNAL set, but will have an
3892 initialization. Thus, duplicate_decls won't warn
3893 about this situation, and so we check here. */
3894 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
3895 error ("duplicate initialization of %qD", decl);
3896 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
3897 decl = field;
3900 else
3902 tree field = check_classfn (context, decl,
3903 (processing_template_decl
3904 > template_class_depth (context))
3905 ? current_template_parms
3906 : NULL_TREE);
3907 if (field && duplicate_decls (decl, field,
3908 /*newdecl_is_friend=*/false))
3909 decl = field;
3912 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3913 DECL_IN_AGGR_P (decl) = 0;
3914 /* Do not mark DECL as an explicit specialization if it was not
3915 already marked as an instantiation; a declaration should
3916 never be marked as a specialization unless we know what
3917 template is being specialized. */
3918 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3920 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3922 /* [temp.expl.spec] An explicit specialization of a static data
3923 member of a template is a definition if the declaration
3924 includes an initializer; otherwise, it is a declaration.
3926 We check for processing_specialization so this only applies
3927 to the new specialization syntax. */
3928 if (!initialized && processing_specialization)
3929 DECL_EXTERNAL (decl) = 1;
3932 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3933 pedwarn ("declaration of %q#D outside of class is not definition",
3934 decl);
3937 /* Enter this declaration into the symbol table. */
3938 tem = maybe_push_decl (decl);
3940 if (processing_template_decl)
3941 tem = push_template_decl (tem);
3942 if (tem == error_mark_node)
3943 return error_mark_node;
3945 /* Tell the back-end to use or not use .common as appropriate. If we say
3946 -fconserve-space, we want this to save .data space, at the expense of
3947 wrong semantics. If we say -fno-conserve-space, we want this to
3948 produce errors about redefs; to do this we force variables into the
3949 data segment. */
3950 if (flag_conserve_space
3951 && TREE_CODE (tem) == VAR_DECL
3952 && TREE_PUBLIC (tem)
3953 && !DECL_THREAD_LOCAL_P (tem)
3954 && !have_global_bss_p ())
3955 DECL_COMMON (tem) = 1;
3957 if (!processing_template_decl && TREE_CODE (tem) == VAR_DECL)
3958 start_decl_1 (tem, initialized);
3960 return tem;
3963 void
3964 start_decl_1 (tree decl, bool initialized)
3966 tree type;
3968 gcc_assert (!processing_template_decl);
3970 if (error_operand_p (decl))
3971 return;
3973 gcc_assert (TREE_CODE (decl) == VAR_DECL);
3974 type = TREE_TYPE (decl);
3976 if (initialized)
3977 /* Is it valid for this decl to have an initializer at all?
3978 If not, set INITIALIZED to zero, which will indirectly
3979 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3981 /* Don't allow initializations for incomplete types except for
3982 arrays which might be completed by the initialization. */
3983 if (COMPLETE_TYPE_P (complete_type (type)))
3984 ; /* A complete type is ok. */
3985 else if (TREE_CODE (type) != ARRAY_TYPE)
3987 error ("variable %q#D has initializer but incomplete type", decl);
3988 initialized = 0;
3989 type = TREE_TYPE (decl) = error_mark_node;
3991 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3993 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3994 error ("elements of array %q#D have incomplete type", decl);
3995 /* else we already gave an error in start_decl. */
3996 initialized = 0;
3999 else if (IS_AGGR_TYPE (type)
4000 && ! DECL_EXTERNAL (decl))
4002 if (!COMPLETE_TYPE_P (complete_type (type)))
4004 error ("aggregate %q#D has incomplete type and cannot be defined",
4005 decl);
4006 /* Change the type so that assemble_variable will give
4007 DECL an rtl we can live with: (mem (const_int 0)). */
4008 type = TREE_TYPE (decl) = error_mark_node;
4010 else
4012 /* If any base type in the hierarchy of TYPE needs a constructor,
4013 then we set initialized to 1. This way any nodes which are
4014 created for the purposes of initializing this aggregate
4015 will live as long as it does. This is necessary for global
4016 aggregates which do not have their initializers processed until
4017 the end of the file. */
4018 initialized = TYPE_NEEDS_CONSTRUCTING (type);
4022 /* Create a new scope to hold this declaration if necessary.
4023 Whether or not a new scope is necessary cannot be determined
4024 until after the type has been completed; if the type is a
4025 specialization of a class template it is not until after
4026 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4027 will be set correctly. */
4028 maybe_push_cleanup_level (type);
4031 /* Handle initialization of references. DECL, TYPE, and INIT have the
4032 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4033 but will be set to a new CLEANUP_STMT if a temporary is created
4034 that must be destroyed subsequently.
4036 Returns an initializer expression to use to initialize DECL, or
4037 NULL if the initialization can be performed statically.
4039 Quotes on semantics can be found in ARM 8.4.3. */
4041 static tree
4042 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4044 tree tmp;
4046 if (init == NULL_TREE)
4048 if ((DECL_LANG_SPECIFIC (decl) == 0
4049 || DECL_IN_AGGR_P (decl) == 0)
4050 && ! DECL_THIS_EXTERN (decl))
4051 error ("%qD declared as reference but not initialized", decl);
4052 return NULL_TREE;
4055 if (TREE_CODE (init) == CONSTRUCTOR)
4057 error ("ISO C++ forbids use of initializer list to "
4058 "initialize reference %qD", decl);
4059 return NULL_TREE;
4062 if (TREE_CODE (init) == TREE_LIST)
4063 init = build_x_compound_expr_from_list (init, "initializer");
4065 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4066 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4067 /* Note: default conversion is only called in very special cases. */
4068 init = decay_conversion (init);
4070 /* Convert INIT to the reference type TYPE. This may involve the
4071 creation of a temporary, whose lifetime must be the same as that
4072 of the reference. If so, a DECL_EXPR for the temporary will be
4073 added just after the DECL_EXPR for DECL. That's why we don't set
4074 DECL_INITIAL for local references (instead assigning to them
4075 explicitly); we need to allow the temporary to be initialized
4076 first. */
4077 tmp = initialize_reference (type, init, decl, cleanup);
4079 if (tmp == error_mark_node)
4080 return NULL_TREE;
4081 else if (tmp == NULL_TREE)
4083 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4084 return NULL_TREE;
4087 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4088 return tmp;
4090 DECL_INITIAL (decl) = tmp;
4092 return NULL_TREE;
4095 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4096 array until we finish parsing the initializer. If that's the
4097 situation we're in, update DECL accordingly. */
4099 static void
4100 maybe_deduce_size_from_array_init (tree decl, tree init)
4102 tree type = TREE_TYPE (decl);
4104 if (TREE_CODE (type) == ARRAY_TYPE
4105 && TYPE_DOMAIN (type) == NULL_TREE
4106 && TREE_CODE (decl) != TYPE_DECL)
4108 /* do_default is really a C-ism to deal with tentative definitions.
4109 But let's leave it here to ease the eventual merge. */
4110 int do_default = !DECL_EXTERNAL (decl);
4111 tree initializer = init ? init : DECL_INITIAL (decl);
4112 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4113 do_default);
4115 if (failure == 1)
4117 error ("initializer fails to determine size of %qD", decl);
4118 TREE_TYPE (decl) = error_mark_node;
4120 else if (failure == 2)
4122 if (do_default)
4124 error ("array size missing in %qD", decl);
4125 TREE_TYPE (decl) = error_mark_node;
4127 /* If a `static' var's size isn't known, make it extern as
4128 well as static, so it does not get allocated. If it's not
4129 `static', then don't mark it extern; finish_incomplete_decl
4130 will give it a default size and it will get allocated. */
4131 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4132 DECL_EXTERNAL (decl) = 1;
4134 else if (failure == 3)
4136 error ("zero-size array %qD", decl);
4137 TREE_TYPE (decl) = error_mark_node;
4140 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4142 layout_decl (decl, 0);
4146 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4147 any appropriate error messages regarding the layout. */
4149 static void
4150 layout_var_decl (tree decl)
4152 tree type;
4154 type = TREE_TYPE (decl);
4155 if (type == error_mark_node)
4156 return;
4158 /* If we haven't already layed out this declaration, do so now.
4159 Note that we must not call complete type for an external object
4160 because it's type might involve templates that we are not
4161 supposed to instantiate yet. (And it's perfectly valid to say
4162 `extern X x' for some incomplete type `X'.) */
4163 if (!DECL_EXTERNAL (decl))
4164 complete_type (type);
4165 if (!DECL_SIZE (decl)
4166 && TREE_TYPE (decl) != error_mark_node
4167 && (COMPLETE_TYPE_P (type)
4168 || (TREE_CODE (type) == ARRAY_TYPE
4169 && !TYPE_DOMAIN (type)
4170 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4171 layout_decl (decl, 0);
4173 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4175 /* An automatic variable with an incomplete type: that is an error.
4176 Don't talk about array types here, since we took care of that
4177 message in grokdeclarator. */
4178 error ("storage size of %qD isn't known", decl);
4179 TREE_TYPE (decl) = error_mark_node;
4181 #if 0
4182 /* Keep this code around in case we later want to control debug info
4183 based on whether a type is "used". (jason 1999-11-11) */
4185 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4186 /* Let debugger know it should output info for this type. */
4187 note_debug_info_needed (ttype);
4189 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4190 note_debug_info_needed (DECL_CONTEXT (decl));
4191 #endif
4193 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4194 && DECL_SIZE (decl) != NULL_TREE
4195 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4197 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4198 constant_expression_warning (DECL_SIZE (decl));
4199 else
4200 error ("storage size of %qD isn't constant", decl);
4204 /* If a local static variable is declared in an inline function, or if
4205 we have a weak definition, we must endeavor to create only one
4206 instance of the variable at link-time. */
4208 static void
4209 maybe_commonize_var (tree decl)
4211 /* Static data in a function with comdat linkage also has comdat
4212 linkage. */
4213 if (TREE_STATIC (decl)
4214 /* Don't mess with __FUNCTION__. */
4215 && ! DECL_ARTIFICIAL (decl)
4216 && DECL_FUNCTION_SCOPE_P (decl)
4217 /* Unfortunately, import_export_decl has not always been called
4218 before the function is processed, so we cannot simply check
4219 DECL_COMDAT. */
4220 && (DECL_COMDAT (DECL_CONTEXT (decl))
4221 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4222 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4223 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4225 if (flag_weak)
4227 /* With weak symbols, we simply make the variable COMDAT;
4228 that will cause copies in multiple translations units to
4229 be merged. */
4230 comdat_linkage (decl);
4232 else
4234 if (DECL_INITIAL (decl) == NULL_TREE
4235 || DECL_INITIAL (decl) == error_mark_node)
4237 /* Without weak symbols, we can use COMMON to merge
4238 uninitialized variables. */
4239 TREE_PUBLIC (decl) = 1;
4240 DECL_COMMON (decl) = 1;
4242 else
4244 /* While for initialized variables, we must use internal
4245 linkage -- which means that multiple copies will not
4246 be merged. */
4247 TREE_PUBLIC (decl) = 0;
4248 DECL_COMMON (decl) = 0;
4249 warning (0, "sorry: semantics of inline function static "
4250 "data %q+#D are wrong (you'll wind up "
4251 "with multiple copies)", decl);
4252 warning (0, "%J you can work around this by removing "
4253 "the initializer",
4254 decl);
4258 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4259 /* Set it up again; we might have set DECL_INITIAL since the last
4260 time. */
4261 comdat_linkage (decl);
4264 /* Issue an error message if DECL is an uninitialized const variable. */
4266 static void
4267 check_for_uninitialized_const_var (tree decl)
4269 tree type = TREE_TYPE (decl);
4271 /* ``Unless explicitly declared extern, a const object does not have
4272 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4273 7.1.6 */
4274 if (TREE_CODE (decl) == VAR_DECL
4275 && TREE_CODE (type) != REFERENCE_TYPE
4276 && CP_TYPE_CONST_P (type)
4277 && !TYPE_NEEDS_CONSTRUCTING (type)
4278 && !DECL_INITIAL (decl))
4279 error ("uninitialized const %qD", decl);
4283 /* Structure holding the current initializer being processed by reshape_init.
4284 CUR is a pointer to the current element being processed, END is a pointer
4285 after the last element present in the initializer. */
4286 typedef struct reshape_iterator_t
4288 constructor_elt *cur;
4289 constructor_elt *end;
4290 } reshape_iter;
4292 static tree reshape_init_r (tree, reshape_iter *, bool);
4294 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4295 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4296 initialized. If there are no more such fields, the return value
4297 will be NULL. */
4299 static tree
4300 next_initializable_field (tree field)
4302 while (field
4303 && (TREE_CODE (field) != FIELD_DECL
4304 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4305 || DECL_ARTIFICIAL (field)))
4306 field = TREE_CHAIN (field);
4308 return field;
4311 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4312 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4313 INTEGER_CST representing the size of the array minus one (the maximum index),
4314 or NULL_TREE if the array was declared without specifying the size. D is
4315 the iterator within the constructor. */
4317 static tree
4318 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4320 tree new_init;
4321 bool sized_array_p = (max_index != NULL_TREE);
4322 unsigned HOST_WIDE_INT max_index_cst = 0;
4323 unsigned HOST_WIDE_INT index;
4325 /* The initializer for an array is always a CONSTRUCTOR. */
4326 new_init = build_constructor (NULL_TREE, NULL);
4328 if (sized_array_p)
4330 /* Minus 1 is used for zero sized arrays. */
4331 if (integer_all_onesp (max_index))
4332 return new_init;
4334 if (host_integerp (max_index, 1))
4335 max_index_cst = tree_low_cst (max_index, 1);
4336 /* sizetype is sign extended, not zero extended. */
4337 else
4338 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4342 /* Loop until there are no more initializers. */
4343 for (index = 0;
4344 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4345 ++index)
4347 tree elt_init;
4349 if (d->cur->index)
4351 /* Handle array designated initializers (GNU extension). */
4352 if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
4354 error ("name %qD used in a GNU-style designated "
4355 "initializer for an array", d->cur->index);
4357 else
4358 gcc_unreachable ();
4361 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4362 if (elt_init == error_mark_node)
4363 return error_mark_node;
4364 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4367 return new_init;
4370 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4371 Parameters are the same of reshape_init_r. */
4373 static tree
4374 reshape_init_array (tree type, reshape_iter *d)
4376 tree max_index = NULL_TREE;
4378 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4380 if (TYPE_DOMAIN (type))
4381 max_index = array_type_nelts (type);
4383 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4386 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4387 Parameters are the same of reshape_init_r. */
4389 static tree
4390 reshape_init_vector (tree type, reshape_iter *d)
4392 tree max_index = NULL_TREE;
4393 tree rtype;
4395 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4397 if (COMPOUND_LITERAL_P (d->cur->value))
4399 tree value = d->cur->value;
4400 if (!same_type_p (TREE_TYPE (value), type))
4402 error ("invalid type %qT as initializer for a vector of type %qT",
4403 TREE_TYPE (d->cur->value), type);
4404 value = error_mark_node;
4406 ++d->cur;
4407 return value;
4410 /* For a vector, the representation type is a struct
4411 containing a single member which is an array of the
4412 appropriate size. */
4413 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4414 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4415 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4417 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4420 /* Subroutine of reshape_init_r, processes the initializers for classes
4421 or union. Parameters are the same of reshape_init_r. */
4423 static tree
4424 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4426 tree field;
4427 tree new_init;
4429 gcc_assert (CLASS_TYPE_P (type));
4431 /* The initializer for a class is always a CONSTRUCTOR. */
4432 new_init = build_constructor (NULL_TREE, NULL);
4433 field = next_initializable_field (TYPE_FIELDS (type));
4435 if (!field)
4437 /* [dcl.init.aggr]
4439 An initializer for an aggregate member that is an
4440 empty class shall have the form of an empty
4441 initializer-list {}. */
4442 if (!first_initializer_p)
4444 error ("initializer for %qT must be brace-enclosed", type);
4445 return error_mark_node;
4447 return new_init;
4450 /* Loop through the initializable fields, gathering initializers. */
4451 while (d->cur != d->end)
4453 tree field_init;
4455 /* Handle designated initializers, as an extension. */
4456 if (d->cur->index)
4458 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4460 if (!field || TREE_CODE (field) != FIELD_DECL)
4462 error ("%qT has no non-static data member named %qD", type,
4463 d->cur->index);
4464 return error_mark_node;
4468 /* If we processed all the member of the class, we are done. */
4469 if (!field)
4470 break;
4472 field_init = reshape_init_r (TREE_TYPE (field), d,
4473 /*first_initializer_p=*/false);
4474 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4476 /* [dcl.init.aggr]
4478 When a union is initialized with a brace-enclosed
4479 initializer, the braces shall only contain an
4480 initializer for the first member of the union. */
4481 if (TREE_CODE (type) == UNION_TYPE)
4482 break;
4484 field = next_initializable_field (TREE_CHAIN (field));
4487 return new_init;
4490 /* Subroutine of reshape_init, which processes a single initializer (part of
4491 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4492 iterator within the CONSTRUCTOR which points to the initializer to process.
4493 FIRST_INITIALIZER_P is true if this is the first initializer of the
4494 CONSTRUCTOR node. */
4496 static tree
4497 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4499 tree init = d->cur->value;
4501 /* A non-aggregate type is always initialized with a single
4502 initializer. */
4503 if (!CP_AGGREGATE_TYPE_P (type))
4505 /* It is invalid to initialize a non-aggregate type with a
4506 brace-enclosed initializer.
4507 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4508 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4509 a CONSTRUCTOR (with a record type). */
4510 if (TREE_CODE (init) == CONSTRUCTOR
4511 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4513 error ("braces around scalar initializer for type %qT", type);
4514 init = error_mark_node;
4517 d->cur++;
4518 return init;
4521 /* [dcl.init.aggr]
4523 All implicit type conversions (clause _conv_) are considered when
4524 initializing the aggregate member with an initializer from an
4525 initializer-list. If the initializer can initialize a member,
4526 the member is initialized. Otherwise, if the member is itself a
4527 non-empty subaggregate, brace elision is assumed and the
4528 initializer is considered for the initialization of the first
4529 member of the subaggregate. */
4530 if (TREE_CODE (init) != CONSTRUCTOR
4531 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4533 d->cur++;
4534 return init;
4537 /* [dcl.init.string]
4539 A char array (whether plain char, signed char, or unsigned char)
4540 can be initialized by a string-literal (optionally enclosed in
4541 braces); a wchar_t array can be initialized by a wide
4542 string-literal (optionally enclosed in braces). */
4543 if (TREE_CODE (type) == ARRAY_TYPE
4544 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4546 tree str_init = init;
4548 /* Strip one level of braces if and only if they enclose a single
4549 element (as allowed by [dcl.init.string]). */
4550 if (!first_initializer_p
4551 && TREE_CODE (str_init) == CONSTRUCTOR
4552 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4554 str_init = VEC_index (constructor_elt,
4555 CONSTRUCTOR_ELTS (str_init), 0)->value;
4558 /* If it's a string literal, then it's the initializer for the array
4559 as a whole. Otherwise, continue with normal initialization for
4560 array types (one value per array element). */
4561 if (TREE_CODE (str_init) == STRING_CST)
4563 d->cur++;
4564 return str_init;
4568 /* The following cases are about aggregates. If we are not within a full
4569 initializer already, and there is not a CONSTRUCTOR, it means that there
4570 is a missing set of braces (that is, we are processing the case for
4571 which reshape_init exists). */
4572 if (!first_initializer_p)
4574 if (TREE_CODE (init) == CONSTRUCTOR)
4576 /* For a nested compound literal, there is no need to reshape since
4577 brace elision is not allowed. Even if we decided to allow it,
4578 we should add a call to reshape_init in finish_compound_literal,
4579 before calling digest_init, so changing this code would still
4580 not be necessary. */
4581 if (!COMPOUND_LITERAL_P (init))
4583 ++d->cur;
4584 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4585 return reshape_init (type, init);
4587 else
4588 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4591 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4592 type);
4595 /* Dispatch to specialized routines. */
4596 if (CLASS_TYPE_P (type))
4597 return reshape_init_class (type, d, first_initializer_p);
4598 else if (TREE_CODE (type) == ARRAY_TYPE)
4599 return reshape_init_array (type, d);
4600 else if (TREE_CODE (type) == VECTOR_TYPE)
4601 return reshape_init_vector (type, d);
4602 else
4603 gcc_unreachable();
4606 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4607 brace-enclosed aggregate initializer.
4609 INIT is the CONSTRUCTOR containing the list of initializers describing
4610 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4611 It may not presently match the shape of the TYPE; for example:
4613 struct S { int a; int b; };
4614 struct S a[] = { 1, 2, 3, 4 };
4616 Here INIT will hold a VEC of four elements, rather than a
4617 VEC of two elements, each itself a VEC of two elements. This
4618 routine transforms INIT from the former form into the latter. The
4619 revised CONSTRUCTOR node is returned. */
4621 tree
4622 reshape_init (tree type, tree init)
4624 VEC(constructor_elt, gc) *v;
4625 reshape_iter d;
4626 tree new_init;
4628 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4630 v = CONSTRUCTOR_ELTS (init);
4632 /* An empty constructor does not need reshaping, and it is always a valid
4633 initializer. */
4634 if (VEC_empty (constructor_elt, v))
4635 return init;
4637 /* Recurse on this CONSTRUCTOR. */
4638 d.cur = VEC_index (constructor_elt, v, 0);
4639 d.end = d.cur + VEC_length (constructor_elt, v);
4641 new_init = reshape_init_r (type, &d, true);
4642 if (new_init == error_mark_node)
4643 return error_mark_node;
4645 /* Make sure all the element of the constructor were used. Otherwise,
4646 issue an error about exceeding initializers. */
4647 if (d.cur != d.end)
4648 error ("too many initializers for %qT", type);
4650 return new_init;
4653 /* Verify INIT (the initializer for DECL), and record the
4654 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4655 grok_reference_init.
4657 If the return value is non-NULL, it is an expression that must be
4658 evaluated dynamically to initialize DECL. */
4660 static tree
4661 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4663 tree type = TREE_TYPE (decl);
4664 tree init_code = NULL;
4666 /* Things that are going to be initialized need to have complete
4667 type. */
4668 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4670 if (type == error_mark_node)
4671 /* We will have already complained. */
4672 return NULL_TREE;
4674 if (TREE_CODE (type) == ARRAY_TYPE)
4676 tree element_type = TREE_TYPE (type);
4678 /* The array type itself need not be complete, because the
4679 initializer may tell us how many elements are in the array.
4680 But, the elements of the array must be complete. */
4681 if (!COMPLETE_TYPE_P (complete_type (element_type)))
4683 error ("elements of array %q#D have incomplete type", decl);
4684 return NULL_TREE;
4686 /* It is not valid to initialize an a VLA. */
4687 if (init
4688 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
4689 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
4691 error ("variable-sized object %qD may not be initialized", decl);
4692 return NULL_TREE;
4695 else if (!COMPLETE_TYPE_P (type))
4697 error ("%qD has incomplete type", decl);
4698 TREE_TYPE (decl) = error_mark_node;
4699 return NULL_TREE;
4701 else
4702 /* There is no way to make a variable-sized class type in GNU C++. */
4703 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
4705 if (!CP_AGGREGATE_TYPE_P (type)
4706 && init && BRACE_ENCLOSED_INITIALIZER_P (init)
4707 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) != 1)
4709 error ("scalar object %qD requires one element in initializer", decl);
4710 TREE_TYPE (decl) = error_mark_node;
4711 return NULL_TREE;
4714 if (TREE_CODE (decl) == CONST_DECL)
4716 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
4718 DECL_INITIAL (decl) = init;
4720 gcc_assert (init != NULL_TREE);
4721 init = NULL_TREE;
4723 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4724 init = grok_reference_init (decl, type, init, cleanup);
4725 else if (init)
4727 /* Do not reshape constructors of vectors (they don't need to be
4728 reshaped. */
4729 if (TREE_CODE (init) == CONSTRUCTOR
4730 && !COMPOUND_LITERAL_P (init)
4731 && !TREE_TYPE (init)) /* ptrmemfunc */
4733 init = reshape_init (type, init);
4735 if ((*targetm.vector_opaque_p) (type))
4737 error ("opaque vector types cannot be initialized");
4738 init = error_mark_node;
4742 /* If DECL has an array type without a specific bound, deduce the
4743 array size from the initializer. */
4744 maybe_deduce_size_from_array_init (decl, init);
4745 type = TREE_TYPE (decl);
4746 if (type == error_mark_node)
4747 return NULL_TREE;
4749 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4751 if (TREE_CODE (type) == ARRAY_TYPE)
4752 goto initialize_aggr;
4753 else if (TREE_CODE (init) == CONSTRUCTOR)
4755 if (TYPE_NON_AGGREGATE_CLASS (type))
4757 error ("%qD must be initialized by constructor, "
4758 "not by %<{...}%>",
4759 decl);
4760 init = error_mark_node;
4762 else
4763 goto dont_use_constructor;
4765 else
4767 int saved_stmts_are_full_exprs_p;
4769 initialize_aggr:
4770 saved_stmts_are_full_exprs_p = 0;
4771 if (building_stmt_tree ())
4773 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4774 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4776 init = build_aggr_init (decl, init, flags);
4777 if (building_stmt_tree ())
4778 current_stmt_tree ()->stmts_are_full_exprs_p =
4779 saved_stmts_are_full_exprs_p;
4780 return init;
4783 else
4785 dont_use_constructor:
4786 if (TREE_CODE (init) != TREE_VEC)
4788 init_code = store_init_value (decl, init);
4789 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4790 && DECL_INITIAL (decl)
4791 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4792 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4793 warning (0, "array %qD initialized by parenthesized string literal %qE",
4794 decl, DECL_INITIAL (decl));
4795 init = NULL;
4799 else if (DECL_EXTERNAL (decl))
4801 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4802 goto initialize_aggr;
4803 else if (IS_AGGR_TYPE (type))
4805 tree core_type = strip_array_types (type);
4807 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4808 error ("structure %qD with uninitialized const members", decl);
4809 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4810 error ("structure %qD with uninitialized reference members", decl);
4812 check_for_uninitialized_const_var (decl);
4814 else
4815 check_for_uninitialized_const_var (decl);
4817 if (init && init != error_mark_node)
4818 init_code = build2 (INIT_EXPR, type, decl, init);
4820 return init_code;
4823 /* If DECL is not a local variable, give it RTL. */
4825 static void
4826 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4828 int toplev = toplevel_bindings_p ();
4829 int defer_p;
4830 const char *filename;
4832 /* Set the DECL_ASSEMBLER_NAME for the object. */
4833 if (asmspec)
4835 /* The `register' keyword, when used together with an
4836 asm-specification, indicates that the variable should be
4837 placed in a particular register. */
4838 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4840 set_user_assembler_name (decl, asmspec);
4841 DECL_HARD_REGISTER (decl) = 1;
4843 else
4845 if (TREE_CODE (decl) == FUNCTION_DECL
4846 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4847 set_builtin_user_assembler_name (decl, asmspec);
4848 set_user_assembler_name (decl, asmspec);
4852 /* Handle non-variables up front. */
4853 if (TREE_CODE (decl) != VAR_DECL)
4855 rest_of_decl_compilation (decl, toplev, at_eof);
4856 return;
4859 /* If we see a class member here, it should be a static data
4860 member. */
4861 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4863 gcc_assert (TREE_STATIC (decl));
4864 /* An in-class declaration of a static data member should be
4865 external; it is only a declaration, and not a definition. */
4866 if (init == NULL_TREE)
4867 gcc_assert (DECL_EXTERNAL (decl));
4870 /* We don't create any RTL for local variables. */
4871 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4872 return;
4874 /* We defer emission of local statics until the corresponding
4875 DECL_EXPR is expanded. */
4876 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4878 /* We try to defer namespace-scope static constants so that they are
4879 not emitted into the object file unnecessarily. */
4880 filename = input_filename;
4881 if (!DECL_VIRTUAL_P (decl)
4882 && TREE_READONLY (decl)
4883 && DECL_INITIAL (decl) != NULL_TREE
4884 && DECL_INITIAL (decl) != error_mark_node
4885 && filename != NULL
4886 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4887 && toplev
4888 && !TREE_PUBLIC (decl))
4890 /* Fool with the linkage of static consts according to #pragma
4891 interface. */
4892 struct c_fileinfo *finfo = get_fileinfo (filename);
4893 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4895 TREE_PUBLIC (decl) = 1;
4896 DECL_EXTERNAL (decl) = finfo->interface_only;
4899 defer_p = 1;
4901 /* Likewise for template instantiations. */
4902 else if (DECL_LANG_SPECIFIC (decl)
4903 && DECL_IMPLICIT_INSTANTIATION (decl))
4904 defer_p = 1;
4906 /* If we're not deferring, go ahead and assemble the variable. */
4907 if (!defer_p)
4908 rest_of_decl_compilation (decl, toplev, at_eof);
4911 /* Generate code to initialize DECL (a local variable). */
4913 static void
4914 initialize_local_var (tree decl, tree init)
4916 tree type = TREE_TYPE (decl);
4917 tree cleanup;
4919 gcc_assert (TREE_CODE (decl) == VAR_DECL
4920 || TREE_CODE (decl) == RESULT_DECL);
4921 gcc_assert (!TREE_STATIC (decl));
4923 if (DECL_SIZE (decl) == NULL_TREE)
4925 /* If we used it already as memory, it must stay in memory. */
4926 DECL_INITIAL (decl) = NULL_TREE;
4927 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4930 if (DECL_SIZE (decl) && type != error_mark_node)
4932 int already_used;
4934 /* Compute and store the initial value. */
4935 already_used = TREE_USED (decl) || TREE_USED (type);
4937 /* Perform the initialization. */
4938 if (init)
4940 int saved_stmts_are_full_exprs_p;
4942 gcc_assert (building_stmt_tree ());
4943 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4944 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4945 finish_expr_stmt (init);
4946 current_stmt_tree ()->stmts_are_full_exprs_p =
4947 saved_stmts_are_full_exprs_p;
4950 /* Set this to 0 so we can tell whether an aggregate which was
4951 initialized was ever used. Don't do this if it has a
4952 destructor, so we don't complain about the 'resource
4953 allocation is initialization' idiom. Now set
4954 attribute((unused)) on types so decls of that type will be
4955 marked used. (see TREE_USED, above.) */
4956 if (TYPE_NEEDS_CONSTRUCTING (type)
4957 && ! already_used
4958 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4959 && DECL_NAME (decl))
4960 TREE_USED (decl) = 0;
4961 else if (already_used)
4962 TREE_USED (decl) = 1;
4965 /* Generate a cleanup, if necessary. */
4966 cleanup = cxx_maybe_build_cleanup (decl);
4967 if (DECL_SIZE (decl) && cleanup)
4968 finish_decl_cleanup (decl, cleanup);
4971 /* DECL is a VAR_DECL for a compiler-generated variable with static
4972 storage duration (like a virtual table) whose initializer is a
4973 compile-time constant. INIT must be either a TREE_LIST of values,
4974 or a CONSTRUCTOR. Initialize the variable and provide it to the
4975 back end. */
4977 void
4978 initialize_artificial_var (tree decl, tree init)
4980 gcc_assert (DECL_ARTIFICIAL (decl));
4981 if (TREE_CODE (init) == TREE_LIST)
4982 init = build_constructor_from_list (NULL_TREE, init);
4983 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
4984 DECL_INITIAL (decl) = init;
4985 DECL_INITIALIZED_P (decl) = 1;
4986 determine_visibility (decl);
4987 layout_var_decl (decl);
4988 maybe_commonize_var (decl);
4989 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4992 /* Finish processing of a declaration;
4993 install its line number and initial value.
4994 If the length of an array type is not known before,
4995 it must be determined now, from the initial value, or it is an error.
4997 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
4998 true, then INIT is an integral constant expression.
5000 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5001 if the (init) syntax was used. */
5003 void
5004 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5005 tree asmspec_tree, int flags)
5007 tree type;
5008 tree cleanup;
5009 const char *asmspec = NULL;
5010 int was_readonly = 0;
5011 bool var_definition_p = false;
5012 int saved_processing_template_decl;
5014 if (decl == error_mark_node)
5015 return;
5016 else if (! decl)
5018 if (init)
5019 error ("assignment (not initialization) in declaration");
5020 return;
5023 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5024 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5025 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5027 type = TREE_TYPE (decl);
5028 if (type == error_mark_node)
5029 return;
5031 /* Assume no cleanup is required. */
5032 cleanup = NULL_TREE;
5033 saved_processing_template_decl = processing_template_decl;
5035 /* If a name was specified, get the string. */
5036 if (global_scope_p (current_binding_level))
5037 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5038 if (asmspec_tree && asmspec_tree != error_mark_node)
5039 asmspec = TREE_STRING_POINTER (asmspec_tree);
5041 if (current_class_type
5042 && CP_DECL_CONTEXT (decl) == current_class_type
5043 && TYPE_BEING_DEFINED (current_class_type)
5044 && (DECL_INITIAL (decl) || init))
5045 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5047 if (processing_template_decl)
5049 bool type_dependent_p;
5051 /* Add this declaration to the statement-tree. */
5052 if (at_function_scope_p ())
5053 add_decl_expr (decl);
5055 type_dependent_p = dependent_type_p (type);
5057 if (init && init_const_expr_p)
5059 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5060 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5061 TREE_CONSTANT (decl) = 1;
5064 if (!init
5065 || !DECL_CLASS_SCOPE_P (decl)
5066 || !DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5067 || type_dependent_p
5068 || value_dependent_expression_p (init)
5069 /* Check also if initializer is a value dependent
5070 { integral_constant_expression }. */
5071 || (TREE_CODE (init) == CONSTRUCTOR
5072 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)) == 1
5073 && value_dependent_expression_p
5074 (VEC_index (constructor_elt,
5075 CONSTRUCTOR_ELTS (init), 0)->value)))
5077 if (init)
5078 DECL_INITIAL (decl) = init;
5079 if (TREE_CODE (decl) == VAR_DECL
5080 && !DECL_PRETTY_FUNCTION_P (decl)
5081 && !type_dependent_p)
5082 maybe_deduce_size_from_array_init (decl, init);
5083 goto finish_end;
5086 init = fold_non_dependent_expr (init);
5087 processing_template_decl = 0;
5090 /* Take care of TYPE_DECLs up front. */
5091 if (TREE_CODE (decl) == TYPE_DECL)
5093 if (type != error_mark_node
5094 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
5096 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5097 warning (0, "shadowing previous type declaration of %q#D", decl);
5098 set_identifier_type_value (DECL_NAME (decl), decl);
5101 /* If we have installed this as the canonical typedef for this
5102 type, and that type has not been defined yet, delay emitting
5103 the debug information for it, as we will emit it later. */
5104 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5105 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5106 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5108 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5109 at_eof);
5110 goto finish_end;
5113 /* A reference will be modified here, as it is initialized. */
5114 if (! DECL_EXTERNAL (decl)
5115 && TREE_READONLY (decl)
5116 && TREE_CODE (type) == REFERENCE_TYPE)
5118 was_readonly = 1;
5119 TREE_READONLY (decl) = 0;
5122 if (TREE_CODE (decl) == VAR_DECL)
5124 /* Only PODs can have thread-local storage. Other types may require
5125 various kinds of non-trivial initialization. */
5126 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5127 error ("%qD cannot be thread-local because it has non-POD type %qT",
5128 decl, TREE_TYPE (decl));
5129 /* If this is a local variable that will need a mangled name,
5130 register it now. We must do this before processing the
5131 initializer for the variable, since the initialization might
5132 require a guard variable, and since the mangled name of the
5133 guard variable will depend on the mangled name of this
5134 variable. */
5135 if (!processing_template_decl
5136 && DECL_FUNCTION_SCOPE_P (decl)
5137 && TREE_STATIC (decl)
5138 && !DECL_ARTIFICIAL (decl))
5139 push_local_name (decl);
5140 /* Convert the initializer to the type of DECL, if we have not
5141 already initialized DECL. */
5142 if (!DECL_INITIALIZED_P (decl)
5143 /* If !DECL_EXTERNAL then DECL is being defined. In the
5144 case of a static data member initialized inside the
5145 class-specifier, there can be an initializer even if DECL
5146 is *not* defined. */
5147 && (!DECL_EXTERNAL (decl) || init))
5149 if (init)
5151 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5152 if (init_const_expr_p)
5154 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5155 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5156 TREE_CONSTANT (decl) = 1;
5159 init = check_initializer (decl, init, flags, &cleanup);
5160 /* Thread-local storage cannot be dynamically initialized. */
5161 if (DECL_THREAD_LOCAL_P (decl) && init)
5163 error ("%qD is thread-local and so cannot be dynamically "
5164 "initialized", decl);
5165 init = NULL_TREE;
5168 /* Check that the initializer for a static data member was a
5169 constant. Although we check in the parser that the
5170 initializer is an integral constant expression, we do not
5171 simplify division-by-zero at the point at which it
5172 occurs. Therefore, in:
5174 struct S { static const int i = 7 / 0; };
5176 we issue an error at this point. It would
5177 probably be better to forbid division by zero in
5178 integral constant expressions. */
5179 if (DECL_EXTERNAL (decl) && init)
5181 error ("%qD cannot be initialized by a non-constant expression"
5182 " when being declared", decl);
5183 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5184 init = NULL_TREE;
5187 /* Handle:
5189 [dcl.init]
5191 The memory occupied by any object of static storage
5192 duration is zero-initialized at program startup before
5193 any other initialization takes place.
5195 We cannot create an appropriate initializer until after
5196 the type of DECL is finalized. If DECL_INITIAL is set,
5197 then the DECL is statically initialized, and any
5198 necessary zero-initialization has already been performed. */
5199 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5200 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5201 /*nelts=*/NULL_TREE,
5202 /*static_storage_p=*/true);
5203 /* Remember that the initialization for this variable has
5204 taken place. */
5205 DECL_INITIALIZED_P (decl) = 1;
5206 /* This declaration is the definition of this variable,
5207 unless we are initializing a static data member within
5208 the class specifier. */
5209 if (!DECL_EXTERNAL (decl))
5210 var_definition_p = true;
5212 /* If the variable has an array type, lay out the type, even if
5213 there is no initializer. It is valid to index through the
5214 array, and we must get TYPE_ALIGN set correctly on the array
5215 type. */
5216 else if (TREE_CODE (type) == ARRAY_TYPE)
5217 layout_type (type);
5220 /* Add this declaration to the statement-tree. This needs to happen
5221 after the call to check_initializer so that the DECL_EXPR for a
5222 reference temp is added before the DECL_EXPR for the reference itself. */
5223 if (at_function_scope_p ())
5224 add_decl_expr (decl);
5226 /* Let the middle end know about variables and functions -- but not
5227 static data members in uninstantiated class templates. */
5228 if (!saved_processing_template_decl
5229 && (TREE_CODE (decl) == VAR_DECL
5230 || TREE_CODE (decl) == FUNCTION_DECL))
5232 if (TREE_CODE (decl) == VAR_DECL)
5234 layout_var_decl (decl);
5235 maybe_commonize_var (decl);
5236 if (DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl)
5237 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5239 /* This is a const variable with implicit 'static'. Set
5240 DECL_THIS_STATIC so we can tell it from variables that are
5241 !TREE_PUBLIC because of the anonymous namespace. */
5242 DECL_THIS_STATIC (decl) = 1;
5246 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5248 /* Check for abstractness of the type. Notice that there is no
5249 need to strip array types here since the check for those types
5250 is already done within create_array_type_for_decl. */
5251 if (TREE_CODE (type) == FUNCTION_TYPE
5252 || TREE_CODE (type) == METHOD_TYPE)
5253 abstract_virtuals_error (decl, TREE_TYPE (type));
5254 else
5255 abstract_virtuals_error (decl, type);
5257 /* This needs to happen after the linkage is set. */
5258 determine_visibility (decl);
5260 if (TREE_CODE (decl) == FUNCTION_DECL
5261 || TREE_TYPE (decl) == error_mark_node)
5262 /* No initialization required. */
5264 else if (DECL_EXTERNAL (decl)
5265 && ! (DECL_LANG_SPECIFIC (decl)
5266 && DECL_NOT_REALLY_EXTERN (decl)))
5268 if (init)
5269 DECL_INITIAL (decl) = init;
5271 else
5273 /* A variable definition. */
5274 if (DECL_FUNCTION_SCOPE_P (decl))
5276 /* Initialize the local variable. */
5277 if (processing_template_decl)
5278 DECL_INITIAL (decl) = init;
5279 else if (!TREE_STATIC (decl))
5280 initialize_local_var (decl, init);
5283 /* If a variable is defined, and then a subsequent
5284 definition with external linkage is encountered, we will
5285 get here twice for the same variable. We want to avoid
5286 calling expand_static_init more than once. For variables
5287 that are not static data members, we can call
5288 expand_static_init only when we actually process the
5289 initializer. It is not legal to redeclare a static data
5290 member, so this issue does not arise in that case. */
5291 if (var_definition_p && TREE_STATIC (decl))
5292 expand_static_init (decl, init);
5296 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5297 reference, insert it in the statement-tree now. */
5298 if (cleanup)
5299 push_cleanup (decl, cleanup, false);
5301 finish_end:
5302 processing_template_decl = saved_processing_template_decl;
5304 if (was_readonly)
5305 TREE_READONLY (decl) = 1;
5307 /* If this was marked 'used', be sure it will be output. */
5308 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5309 mark_decl_referenced (decl);
5312 /* This is here for a midend callback from c-common.c. */
5314 void
5315 finish_decl (tree decl, tree init, tree asmspec_tree)
5317 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5320 /* Returns a declaration for a VAR_DECL as if:
5322 extern "C" TYPE NAME;
5324 had been seen. Used to create compiler-generated global
5325 variables. */
5327 static tree
5328 declare_global_var (tree name, tree type)
5330 tree decl;
5332 push_to_top_level ();
5333 decl = build_decl (VAR_DECL, name, type);
5334 TREE_PUBLIC (decl) = 1;
5335 DECL_EXTERNAL (decl) = 1;
5336 DECL_ARTIFICIAL (decl) = 1;
5337 /* If the user has explicitly declared this variable (perhaps
5338 because the code we are compiling is part of a low-level runtime
5339 library), then it is possible that our declaration will be merged
5340 with theirs by pushdecl. */
5341 decl = pushdecl (decl);
5342 finish_decl (decl, NULL_TREE, NULL_TREE);
5343 pop_from_top_level ();
5345 return decl;
5348 /* Returns a pointer to the `atexit' function. Note that if
5349 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5350 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5352 static tree
5353 get_atexit_node (void)
5355 tree atexit_fndecl;
5356 tree arg_types;
5357 tree fn_type;
5358 tree fn_ptr_type;
5359 const char *name;
5360 bool use_aeabi_atexit;
5362 if (atexit_node)
5363 return atexit_node;
5365 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5367 /* The declaration for `__cxa_atexit' is:
5369 int __cxa_atexit (void (*)(void *), void *, void *)
5371 We build up the argument types and then then function type
5372 itself. */
5374 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5375 /* First, build the pointer-to-function type for the first
5376 argument. */
5377 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5378 fn_type = build_function_type (void_type_node, arg_types);
5379 fn_ptr_type = build_pointer_type (fn_type);
5380 /* Then, build the rest of the argument types. */
5381 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5382 if (use_aeabi_atexit)
5384 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5385 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5387 else
5389 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5390 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5392 /* And the final __cxa_atexit type. */
5393 fn_type = build_function_type (integer_type_node, arg_types);
5394 fn_ptr_type = build_pointer_type (fn_type);
5395 if (use_aeabi_atexit)
5396 name = "__aeabi_atexit";
5397 else
5398 name = "__cxa_atexit";
5400 else
5402 /* The declaration for `atexit' is:
5404 int atexit (void (*)());
5406 We build up the argument types and then then function type
5407 itself. */
5408 fn_type = build_function_type (void_type_node, void_list_node);
5409 fn_ptr_type = build_pointer_type (fn_type);
5410 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5411 /* Build the final atexit type. */
5412 fn_type = build_function_type (integer_type_node, arg_types);
5413 name = "atexit";
5416 /* Now, build the function declaration. */
5417 push_lang_context (lang_name_c);
5418 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5419 mark_used (atexit_fndecl);
5420 pop_lang_context ();
5421 atexit_node = decay_conversion (atexit_fndecl);
5423 return atexit_node;
5426 /* Returns the __dso_handle VAR_DECL. */
5428 static tree
5429 get_dso_handle_node (void)
5431 if (dso_handle_node)
5432 return dso_handle_node;
5434 /* Declare the variable. */
5435 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5436 ptr_type_node);
5438 return dso_handle_node;
5441 /* Begin a new function with internal linkage whose job will be simply
5442 to destroy some particular variable. */
5444 static GTY(()) int start_cleanup_cnt;
5446 static tree
5447 start_cleanup_fn (void)
5449 char name[32];
5450 tree parmtypes;
5451 tree fntype;
5452 tree fndecl;
5453 bool use_cxa_atexit = flag_use_cxa_atexit
5454 && !targetm.cxx.use_atexit_for_cxa_atexit ();
5456 push_to_top_level ();
5458 /* No need to mangle this. */
5459 push_lang_context (lang_name_c);
5461 /* Build the parameter-types. */
5462 parmtypes = void_list_node;
5463 /* Functions passed to __cxa_atexit take an additional parameter.
5464 We'll just ignore it. After we implement the new calling
5465 convention for destructors, we can eliminate the use of
5466 additional cleanup functions entirely in the -fnew-abi case. */
5467 if (use_cxa_atexit)
5468 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5469 /* Build the function type itself. */
5470 fntype = build_function_type (void_type_node, parmtypes);
5471 /* Build the name of the function. */
5472 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5473 /* Build the function declaration. */
5474 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5475 /* It's a function with internal linkage, generated by the
5476 compiler. */
5477 TREE_PUBLIC (fndecl) = 0;
5478 DECL_ARTIFICIAL (fndecl) = 1;
5479 /* Make the function `inline' so that it is only emitted if it is
5480 actually needed. It is unlikely that it will be inlined, since
5481 it is only called via a function pointer, but we avoid unnecessary
5482 emissions this way. */
5483 DECL_INLINE (fndecl) = 1;
5484 DECL_DECLARED_INLINE_P (fndecl) = 1;
5485 DECL_INTERFACE_KNOWN (fndecl) = 1;
5486 /* Build the parameter. */
5487 if (use_cxa_atexit)
5489 tree parmdecl;
5491 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5492 DECL_CONTEXT (parmdecl) = fndecl;
5493 TREE_USED (parmdecl) = 1;
5494 DECL_ARGUMENTS (fndecl) = parmdecl;
5497 pushdecl (fndecl);
5498 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5500 pop_lang_context ();
5502 return current_function_decl;
5505 /* Finish the cleanup function begun by start_cleanup_fn. */
5507 static void
5508 end_cleanup_fn (void)
5510 expand_or_defer_fn (finish_function (0));
5512 pop_from_top_level ();
5515 /* Generate code to handle the destruction of DECL, an object with
5516 static storage duration. */
5518 tree
5519 register_dtor_fn (tree decl)
5521 tree cleanup;
5522 tree compound_stmt;
5523 tree args;
5524 tree fcall;
5526 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5527 return void_zero_node;
5529 /* Call build_cleanup before we enter the anonymous function so that
5530 any access checks will be done relative to the current scope,
5531 rather than the scope of the anonymous function. */
5532 build_cleanup (decl);
5534 /* Now start the function. */
5535 cleanup = start_cleanup_fn ();
5537 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5538 to the original function, rather than the anonymous one. That
5539 will make the back-end think that nested functions are in use,
5540 which causes confusion. */
5542 push_deferring_access_checks (dk_no_check);
5543 fcall = build_cleanup (decl);
5544 pop_deferring_access_checks ();
5546 /* Create the body of the anonymous function. */
5547 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5548 finish_expr_stmt (fcall);
5549 finish_compound_stmt (compound_stmt);
5550 end_cleanup_fn ();
5552 /* Call atexit with the cleanup function. */
5553 cxx_mark_addressable (cleanup);
5554 mark_used (cleanup);
5555 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5556 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5558 args = tree_cons (NULL_TREE,
5559 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5560 NULL_TREE);
5561 if (targetm.cxx.use_aeabi_atexit ())
5563 args = tree_cons (NULL_TREE, cleanup, args);
5564 args = tree_cons (NULL_TREE, null_pointer_node, args);
5566 else
5568 args = tree_cons (NULL_TREE, null_pointer_node, args);
5569 args = tree_cons (NULL_TREE, cleanup, args);
5572 else
5573 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5574 return build_function_call (get_atexit_node (), args);
5577 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5578 is its initializer. Generate code to handle the construction
5579 and destruction of DECL. */
5581 static void
5582 expand_static_init (tree decl, tree init)
5584 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5585 gcc_assert (TREE_STATIC (decl));
5587 /* Some variables require no initialization. */
5588 if (!init
5589 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5590 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5591 return;
5593 if (DECL_FUNCTION_SCOPE_P (decl))
5595 /* Emit code to perform this initialization but once. */
5596 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5597 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5598 tree guard, guard_addr, guard_addr_list;
5599 tree acquire_fn, release_fn, abort_fn;
5600 tree flag, begin;
5602 /* Emit code to perform this initialization but once. This code
5603 looks like:
5605 static <type> guard;
5606 if (!guard.first_byte) {
5607 if (__cxa_guard_acquire (&guard)) {
5608 bool flag = false;
5609 try {
5610 // Do initialization.
5611 flag = true; __cxa_guard_release (&guard);
5612 // Register variable for destruction at end of program.
5613 } catch {
5614 if (!flag) __cxa_guard_abort (&guard);
5618 Note that the `flag' variable is only set to 1 *after* the
5619 initialization is complete. This ensures that an exception,
5620 thrown during the construction, will cause the variable to
5621 reinitialized when we pass through this code again, as per:
5623 [stmt.dcl]
5625 If the initialization exits by throwing an exception, the
5626 initialization is not complete, so it will be tried again
5627 the next time control enters the declaration.
5629 This process should be thread-safe, too; multiple threads
5630 should not be able to initialize the variable more than
5631 once. */
5633 /* Create the guard variable. */
5634 guard = get_guard (decl);
5636 /* This optimization isn't safe on targets with relaxed memory
5637 consistency. On such targets we force synchronization in
5638 __cxa_guard_acquire. */
5639 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5641 /* Begin the conditional initialization. */
5642 if_stmt = begin_if_stmt ();
5643 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5644 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5647 if (flag_threadsafe_statics)
5649 guard_addr = build_address (guard);
5650 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5652 acquire_fn = get_identifier ("__cxa_guard_acquire");
5653 release_fn = get_identifier ("__cxa_guard_release");
5654 abort_fn = get_identifier ("__cxa_guard_abort");
5655 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5657 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5658 void_list_node);
5659 tree vfntype = build_function_type (void_type_node, argtypes);
5660 acquire_fn = push_library_fn
5661 (acquire_fn, build_function_type (integer_type_node, argtypes));
5662 release_fn = push_library_fn (release_fn, vfntype);
5663 abort_fn = push_library_fn (abort_fn, vfntype);
5665 else
5667 release_fn = identifier_global_value (release_fn);
5668 abort_fn = identifier_global_value (abort_fn);
5671 inner_if_stmt = begin_if_stmt ();
5672 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5673 inner_if_stmt);
5675 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5676 begin = get_target_expr (boolean_false_node);
5677 flag = TARGET_EXPR_SLOT (begin);
5679 TARGET_EXPR_CLEANUP (begin)
5680 = build3 (COND_EXPR, void_type_node, flag,
5681 void_zero_node,
5682 build_call (abort_fn, guard_addr_list));
5683 CLEANUP_EH_ONLY (begin) = 1;
5685 /* Do the initialization itself. */
5686 init = add_stmt_to_compound (begin, init);
5687 init = add_stmt_to_compound
5688 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5689 init = add_stmt_to_compound
5690 (init, build_call (release_fn, guard_addr_list));
5692 else
5693 init = add_stmt_to_compound (init, set_guard (guard));
5695 /* Use atexit to register a function for destroying this static
5696 variable. */
5697 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5699 finish_expr_stmt (init);
5701 if (flag_threadsafe_statics)
5703 finish_compound_stmt (inner_then_clause);
5704 finish_then_clause (inner_if_stmt);
5705 finish_if_stmt (inner_if_stmt);
5708 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5710 finish_compound_stmt (then_clause);
5711 finish_then_clause (if_stmt);
5712 finish_if_stmt (if_stmt);
5715 else
5716 static_aggregates = tree_cons (init, decl, static_aggregates);
5720 /* Make TYPE a complete type based on INITIAL_VALUE.
5721 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5722 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5723 3 if the initializer list is empty (in pedantic mode). */
5726 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5728 int failure;
5729 tree type, elt_type;
5731 if (initial_value)
5733 /* An array of character type can be initialized from a
5734 brace-enclosed string constant.
5736 FIXME: this code is duplicated from reshape_init. Probably
5737 we should just call reshape_init here? */
5738 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5739 && TREE_CODE (initial_value) == CONSTRUCTOR
5740 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5742 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5743 tree value = VEC_index (constructor_elt, v, 0)->value;
5745 if (TREE_CODE (value) == STRING_CST
5746 && VEC_length (constructor_elt, v) == 1)
5747 initial_value = value;
5751 failure = complete_array_type (ptype, initial_value, do_default);
5753 /* We can create the array before the element type is complete, which
5754 means that we didn't have these two bits set in the original type
5755 either. In completing the type, we are expected to propagate these
5756 bits. See also complete_type which does the same thing for arrays
5757 of fixed size. */
5758 type = *ptype;
5759 if (TYPE_DOMAIN (type))
5761 elt_type = TREE_TYPE (type);
5762 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5763 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5764 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5767 return failure;
5770 /* Return zero if something is declared to be a member of type
5771 CTYPE when in the context of CUR_TYPE. STRING is the error
5772 message to print in that case. Otherwise, quietly return 1. */
5774 static int
5775 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5777 if (ctype && ctype != cur_type)
5779 if (flags == DTOR_FLAG)
5780 error ("destructor for alien class %qT cannot be a member", ctype);
5781 else
5782 error ("constructor for alien class %qT cannot be a member", ctype);
5783 return 0;
5785 return 1;
5788 /* Subroutine of `grokdeclarator'. */
5790 /* Generate errors possibly applicable for a given set of specifiers.
5791 This is for ARM $7.1.2. */
5793 static void
5794 bad_specifiers (tree object,
5795 const char* type,
5796 int virtualp,
5797 int quals,
5798 int inlinep,
5799 int friendp,
5800 int raises)
5802 if (virtualp)
5803 error ("%qD declared as a %<virtual%> %s", object, type);
5804 if (inlinep)
5805 error ("%qD declared as an %<inline%> %s", object, type);
5806 if (quals)
5807 error ("%<const%> and %<volatile%> function specifiers on "
5808 "%qD invalid in %s declaration",
5809 object, type);
5810 if (friendp)
5811 error ("%q+D declared as a friend", object);
5812 if (raises
5813 && (TREE_CODE (object) == TYPE_DECL
5814 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5815 && !TYPE_REFFN_P (TREE_TYPE (object))
5816 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5817 error ("%q+D declared with an exception specification", object);
5820 /* DECL is a member function or static data member and is presently
5821 being defined. Check that the definition is taking place in a
5822 valid namespace. */
5824 static void
5825 check_class_member_definition_namespace (tree decl)
5827 /* These checks only apply to member functions and static data
5828 members. */
5829 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5830 || TREE_CODE (decl) == VAR_DECL);
5831 /* We check for problems with specializations in pt.c in
5832 check_specialization_namespace, where we can issue better
5833 diagnostics. */
5834 if (processing_specialization)
5835 return;
5836 /* There are no restrictions on the placement of
5837 explicit instantiations. */
5838 if (processing_explicit_instantiation)
5839 return;
5840 /* [class.mfct]
5842 A member function definition that appears outside of the
5843 class definition shall appear in a namespace scope enclosing
5844 the class definition.
5846 [class.static.data]
5848 The definition for a static data member shall appear in a
5849 namespace scope enclosing the member's class definition. */
5850 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5851 pedwarn ("definition of %qD is not in namespace enclosing %qT",
5852 decl, DECL_CONTEXT (decl));
5855 /* Build a PARM_DECL for the "this" parameter. TYPE is the
5856 METHOD_TYPE for a non-static member function; QUALS are the
5857 cv-qualifiers that apply to the function. */
5859 tree
5860 build_this_parm (tree type, cp_cv_quals quals)
5862 tree this_type;
5863 tree qual_type;
5864 tree parm;
5865 cp_cv_quals this_quals;
5867 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
5868 /* The `this' parameter is implicitly `const'; it cannot be
5869 assigned to. */
5870 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
5871 qual_type = cp_build_qualified_type (this_type, this_quals);
5872 parm = build_artificial_parm (this_identifier, qual_type);
5873 cp_apply_type_quals_to_decl (this_quals, parm);
5874 return parm;
5877 /* CTYPE is class type, or null if non-class.
5878 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5879 or METHOD_TYPE.
5880 DECLARATOR is the function's name.
5881 PARMS is a chain of PARM_DECLs for the function.
5882 VIRTUALP is truthvalue of whether the function is virtual or not.
5883 FLAGS are to be passed through to `grokclassfn'.
5884 QUALS are qualifiers indicating whether the function is `const'
5885 or `volatile'.
5886 RAISES is a list of exceptions that this function can raise.
5887 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5888 not look, and -1 if we should not call `grokclassfn' at all.
5890 SFK is the kind of special function (if any) for the new function.
5892 Returns `NULL_TREE' if something goes wrong, after issuing
5893 applicable error messages. */
5895 static tree
5896 grokfndecl (tree ctype,
5897 tree type,
5898 tree declarator,
5899 tree parms,
5900 tree orig_declarator,
5901 int virtualp,
5902 enum overload_flags flags,
5903 cp_cv_quals quals,
5904 tree raises,
5905 int check,
5906 int friendp,
5907 int publicp,
5908 int inlinep,
5909 special_function_kind sfk,
5910 bool funcdef_flag,
5911 int template_count,
5912 tree in_namespace,
5913 tree* attrlist)
5915 tree decl;
5916 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5917 tree t;
5919 if (raises)
5920 type = build_exception_variant (type, raises);
5922 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5923 if (TREE_CODE (type) == METHOD_TYPE)
5925 tree parm;
5926 parm = build_this_parm (type, quals);
5927 TREE_CHAIN (parm) = parms;
5928 parms = parm;
5930 DECL_ARGUMENTS (decl) = parms;
5931 /* Propagate volatile out from type to decl. */
5932 if (TYPE_VOLATILE (type))
5933 TREE_THIS_VOLATILE (decl) = 1;
5935 if (friendp
5936 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5938 if (funcdef_flag)
5939 error
5940 ("defining explicit specialization %qD in friend declaration",
5941 orig_declarator);
5942 else
5944 tree fns = TREE_OPERAND (orig_declarator, 0);
5945 tree args = TREE_OPERAND (orig_declarator, 1);
5947 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5949 /* Something like `template <class T> friend void f<T>()'. */
5950 error ("invalid use of template-id %qD in declaration "
5951 "of primary template",
5952 orig_declarator);
5953 return NULL_TREE;
5957 /* A friend declaration of the form friend void f<>(). Record
5958 the information in the TEMPLATE_ID_EXPR. */
5959 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5961 if (TREE_CODE (fns) == COMPONENT_REF)
5963 /* Due to bison parser ickiness, we will have already looked
5964 up an operator_name or PFUNCNAME within the current class
5965 (see template_id in parse.y). If the current class contains
5966 such a name, we'll get a COMPONENT_REF here. Undo that. */
5968 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5969 == current_class_type);
5970 fns = TREE_OPERAND (fns, 1);
5972 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5973 || TREE_CODE (fns) == OVERLOAD);
5974 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5976 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5977 if (TREE_PURPOSE (t)
5978 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5980 error ("default arguments are not allowed in declaration "
5981 "of friend template specialization %qD",
5982 decl);
5983 return NULL_TREE;
5986 if (inlinep)
5988 error ("%<inline%> is not allowed in declaration of friend "
5989 "template specialization %qD",
5990 decl);
5991 return NULL_TREE;
5996 /* If this decl has namespace scope, set that up. */
5997 if (in_namespace)
5998 set_decl_namespace (decl, in_namespace, friendp);
5999 else if (!ctype)
6000 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6002 /* `main' and builtins have implicit 'C' linkage. */
6003 if ((MAIN_NAME_P (declarator)
6004 || (IDENTIFIER_LENGTH (declarator) > 10
6005 && IDENTIFIER_POINTER (declarator)[0] == '_'
6006 && IDENTIFIER_POINTER (declarator)[1] == '_'
6007 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6008 && current_lang_name == lang_name_cplusplus
6009 && ctype == NULL_TREE
6010 /* NULL_TREE means global namespace. */
6011 && DECL_CONTEXT (decl) == NULL_TREE)
6012 SET_DECL_LANGUAGE (decl, lang_c);
6014 /* Should probably propagate const out from type to decl I bet (mrs). */
6015 if (staticp)
6017 DECL_STATIC_FUNCTION_P (decl) = 1;
6018 DECL_CONTEXT (decl) = ctype;
6021 if (ctype)
6023 DECL_CONTEXT (decl) = ctype;
6024 if (funcdef_flag)
6025 check_class_member_definition_namespace (decl);
6028 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6030 if (processing_template_decl)
6031 error ("cannot declare %<::main%> to be a template");
6032 if (inlinep)
6033 error ("cannot declare %<::main%> to be inline");
6034 if (!publicp)
6035 error ("cannot declare %<::main%> to be static");
6036 inlinep = 0;
6037 publicp = 1;
6040 /* Members of anonymous types and local classes have no linkage; make
6041 them internal. If a typedef is made later, this will be changed. */
6042 if (ctype && (TYPE_ANONYMOUS_P (ctype)
6043 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6044 publicp = 0;
6046 if (publicp)
6048 /* [basic.link]: A name with no linkage (notably, the name of a class
6049 or enumeration declared in a local scope) shall not be used to
6050 declare an entity with linkage.
6052 Only check this for public decls for now. See core 319, 389. */
6053 t = no_linkage_check (TREE_TYPE (decl),
6054 /*relaxed_p=*/false);
6055 if (t)
6057 if (TYPE_ANONYMOUS_P (t))
6059 if (DECL_EXTERN_C_P (decl))
6060 /* Allow this; it's pretty common in C. */;
6061 else
6063 pedwarn ("non-local function %q#D uses anonymous type",
6064 decl);
6065 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6066 pedwarn ("%q+#D does not refer to the unqualified "
6067 "type, so it is not used for linkage",
6068 TYPE_NAME (t));
6071 else
6072 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6076 TREE_PUBLIC (decl) = publicp;
6077 if (! publicp)
6079 DECL_INTERFACE_KNOWN (decl) = 1;
6080 DECL_NOT_REALLY_EXTERN (decl) = 1;
6083 /* If the declaration was declared inline, mark it as such. */
6084 if (inlinep)
6085 DECL_DECLARED_INLINE_P (decl) = 1;
6086 /* We inline functions that are explicitly declared inline, or, when
6087 the user explicitly asks us to, all functions. */
6088 if (DECL_DECLARED_INLINE_P (decl)
6089 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6090 DECL_INLINE (decl) = 1;
6092 DECL_EXTERNAL (decl) = 1;
6093 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6095 error (ctype
6096 ? G_("static member function %qD cannot have cv-qualifier")
6097 : G_("non-member function %qD cannot have cv-qualifier"),
6098 decl);
6099 quals = TYPE_UNQUALIFIED;
6102 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6103 && !grok_op_properties (decl, /*complain=*/true))
6104 return NULL_TREE;
6106 if (ctype && decl_function_context (decl))
6107 DECL_NO_STATIC_CHAIN (decl) = 1;
6109 if (funcdef_flag)
6110 /* Make the init_value nonzero so pushdecl knows this is not
6111 tentative. error_mark_node is replaced later with the BLOCK. */
6112 DECL_INITIAL (decl) = error_mark_node;
6114 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6115 TREE_NOTHROW (decl) = 1;
6117 /* Caller will do the rest of this. */
6118 if (check < 0)
6119 return decl;
6121 if (ctype != NULL_TREE)
6123 if (sfk == sfk_constructor)
6124 DECL_CONSTRUCTOR_P (decl) = 1;
6126 grokclassfn (ctype, decl, flags);
6129 decl = check_explicit_specialization (orig_declarator, decl,
6130 template_count,
6131 2 * funcdef_flag +
6132 4 * (friendp != 0));
6133 if (decl == error_mark_node)
6134 return NULL_TREE;
6136 if (attrlist)
6138 cplus_decl_attributes (&decl, *attrlist, 0);
6139 *attrlist = NULL_TREE;
6142 /* Check main's type after attributes have been applied. */
6143 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6145 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6146 integer_type_node))
6148 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6149 tree newtype;
6150 error ("%<::main%> must return %<int%>");
6151 newtype = build_function_type (integer_type_node, oldtypeargs);
6152 TREE_TYPE (decl) = newtype;
6154 check_main_parameter_types (decl);
6157 if (ctype != NULL_TREE
6158 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6159 && check)
6161 tree old_decl;
6163 old_decl = check_classfn (ctype, decl,
6164 (processing_template_decl
6165 > template_class_depth (ctype))
6166 ? current_template_parms
6167 : NULL_TREE);
6168 if (old_decl)
6170 tree ok;
6171 tree pushed_scope;
6173 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6174 /* Because grokfndecl is always supposed to return a
6175 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6176 here. We depend on our callers to figure out that its
6177 really a template that's being returned. */
6178 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6180 if (DECL_STATIC_FUNCTION_P (old_decl)
6181 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6182 /* Remove the `this' parm added by grokclassfn.
6183 XXX Isn't this done in start_function, too? */
6184 revert_static_member_fn (decl);
6185 if (DECL_ARTIFICIAL (old_decl))
6186 error ("definition of implicitly-declared %qD", old_decl);
6188 /* Since we've smashed OLD_DECL to its
6189 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6190 if (TREE_CODE (decl) == TEMPLATE_DECL)
6191 decl = DECL_TEMPLATE_RESULT (decl);
6193 /* Attempt to merge the declarations. This can fail, in
6194 the case of some invalid specialization declarations. */
6195 pushed_scope = push_scope (ctype);
6196 ok = duplicate_decls (decl, old_decl, friendp);
6197 if (pushed_scope)
6198 pop_scope (pushed_scope);
6199 if (!ok)
6201 error ("no %q#D member function declared in class %qT",
6202 decl, ctype);
6203 return NULL_TREE;
6205 return old_decl;
6209 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6210 return NULL_TREE;
6212 if (ctype == NULL_TREE || check)
6213 return decl;
6215 if (virtualp)
6216 DECL_VIRTUAL_P (decl) = 1;
6218 return decl;
6221 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6222 the linkage that DECL will receive in the object file. */
6224 static void
6225 set_linkage_for_static_data_member (tree decl)
6227 /* A static data member always has static storage duration and
6228 external linkage. Note that static data members are forbidden in
6229 local classes -- the only situation in which a class has
6230 non-external linkage. */
6231 TREE_PUBLIC (decl) = 1;
6232 TREE_STATIC (decl) = 1;
6233 /* For non-template classes, static data members are always put
6234 out in exactly those files where they are defined, just as
6235 with ordinary namespace-scope variables. */
6236 if (!processing_template_decl)
6237 DECL_INTERFACE_KNOWN (decl) = 1;
6240 /* Create a VAR_DECL named NAME with the indicated TYPE.
6242 If SCOPE is non-NULL, it is the class type or namespace containing
6243 the variable. If SCOPE is NULL, the variable should is created in
6244 the innermost enclosings scope. */
6246 static tree
6247 grokvardecl (tree type,
6248 tree name,
6249 const cp_decl_specifier_seq *declspecs,
6250 int initialized,
6251 int constp,
6252 tree scope)
6254 tree decl;
6255 tree explicit_scope;
6257 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6259 /* Compute the scope in which to place the variable, but remember
6260 whether or not that scope was explicitly specified by the user. */
6261 explicit_scope = scope;
6262 if (!scope)
6264 /* An explicit "extern" specifier indicates a namespace-scope
6265 variable. */
6266 if (declspecs->storage_class == sc_extern)
6267 scope = current_namespace;
6268 else if (!at_function_scope_p ())
6269 scope = current_scope ();
6272 if (scope
6273 && (/* If the variable is a namespace-scope variable declared in a
6274 template, we need DECL_LANG_SPECIFIC. */
6275 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6276 /* Similarly for namespace-scope variables with language linkage
6277 other than C++. */
6278 || (TREE_CODE (scope) == NAMESPACE_DECL
6279 && current_lang_name != lang_name_cplusplus)
6280 /* Similarly for static data members. */
6281 || TYPE_P (scope)))
6282 decl = build_lang_decl (VAR_DECL, name, type);
6283 else
6284 decl = build_decl (VAR_DECL, name, type);
6286 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6287 set_decl_namespace (decl, explicit_scope, 0);
6288 else
6289 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6291 if (declspecs->storage_class == sc_extern)
6293 DECL_THIS_EXTERN (decl) = 1;
6294 DECL_EXTERNAL (decl) = !initialized;
6297 if (DECL_CLASS_SCOPE_P (decl))
6299 set_linkage_for_static_data_member (decl);
6300 /* This function is only called with out-of-class definitions. */
6301 DECL_EXTERNAL (decl) = 0;
6302 check_class_member_definition_namespace (decl);
6304 /* At top level, either `static' or no s.c. makes a definition
6305 (perhaps tentative), and absence of `static' makes it public. */
6306 else if (toplevel_bindings_p ())
6308 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6309 && (DECL_THIS_EXTERN (decl) || ! constp));
6310 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6312 /* Not at top level, only `static' makes a static definition. */
6313 else
6315 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6316 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6319 if (declspecs->specs[(int)ds_thread])
6321 if (targetm.have_tls)
6322 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6323 else
6324 /* A mere warning is sure to result in improper semantics
6325 at runtime. Don't bother to allow this to compile. */
6326 error ("thread-local storage not supported for this target");
6329 if (TREE_PUBLIC (decl))
6331 /* [basic.link]: A name with no linkage (notably, the name of a class
6332 or enumeration declared in a local scope) shall not be used to
6333 declare an entity with linkage.
6335 Only check this for public decls for now. */
6336 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6337 if (t)
6339 if (TYPE_ANONYMOUS_P (t))
6341 if (DECL_EXTERN_C_P (decl))
6342 /* Allow this; it's pretty common in C. */
6344 else
6346 /* DRs 132, 319 and 389 seem to indicate types with
6347 no linkage can only be used to declare extern "C"
6348 entities. Since it's not always an error in the
6349 ISO C++ 90 Standard, we only issue a warning. */
6350 warning (0, "non-local variable %q#D uses anonymous type",
6351 decl);
6352 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6353 warning (0, "%q+#D does not refer to the unqualified "
6354 "type, so it is not used for linkage",
6355 TYPE_NAME (t));
6358 else
6359 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6362 else
6363 DECL_INTERFACE_KNOWN (decl) = 1;
6365 return decl;
6368 /* Create and return a canonical pointer to member function type, for
6369 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
6371 tree
6372 build_ptrmemfunc_type (tree type)
6374 tree field, fields;
6375 tree t;
6376 tree unqualified_variant = NULL_TREE;
6378 if (type == error_mark_node)
6379 return type;
6381 /* If a canonical type already exists for this type, use it. We use
6382 this method instead of type_hash_canon, because it only does a
6383 simple equality check on the list of field members. */
6385 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6386 return t;
6388 /* Make sure that we always have the unqualified pointer-to-member
6389 type first. */
6390 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6391 unqualified_variant
6392 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6394 t = make_aggr_type (RECORD_TYPE);
6395 xref_basetypes (t, NULL_TREE);
6397 /* Let the front-end know this is a pointer to member function... */
6398 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6399 /* ... and not really an aggregate. */
6400 SET_IS_AGGR_TYPE (t, 0);
6402 field = build_decl (FIELD_DECL, pfn_identifier, type);
6403 fields = field;
6405 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6406 TREE_CHAIN (field) = fields;
6407 fields = field;
6409 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6411 /* Zap out the name so that the back-end will give us the debugging
6412 information for this anonymous RECORD_TYPE. */
6413 TYPE_NAME (t) = NULL_TREE;
6415 /* If this is not the unqualified form of this pointer-to-member
6416 type, set the TYPE_MAIN_VARIANT for this type to be the
6417 unqualified type. Since they are actually RECORD_TYPEs that are
6418 not variants of each other, we must do this manually. */
6419 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6421 t = build_qualified_type (t, cp_type_quals (type));
6422 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6423 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6424 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6427 /* Cache this pointer-to-member type so that we can find it again
6428 later. */
6429 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6431 return t;
6434 /* Create and return a pointer to data member type. */
6436 tree
6437 build_ptrmem_type (tree class_type, tree member_type)
6439 if (TREE_CODE (member_type) == METHOD_TYPE)
6441 tree arg_types;
6443 arg_types = TYPE_ARG_TYPES (member_type);
6444 class_type = (cp_build_qualified_type
6445 (class_type,
6446 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6447 member_type
6448 = build_method_type_directly (class_type,
6449 TREE_TYPE (member_type),
6450 TREE_CHAIN (arg_types));
6451 return build_ptrmemfunc_type (build_pointer_type (member_type));
6453 else
6455 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6456 return build_offset_type (class_type, member_type);
6460 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6461 Check to see that the definition is valid. Issue appropriate error
6462 messages. Return 1 if the definition is particularly bad, or 0
6463 otherwise. */
6466 check_static_variable_definition (tree decl, tree type)
6468 /* Motion 10 at San Diego: If a static const integral data member is
6469 initialized with an integral constant expression, the initializer
6470 may appear either in the declaration (within the class), or in
6471 the definition, but not both. If it appears in the class, the
6472 member is a member constant. The file-scope definition is always
6473 required. */
6474 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6476 error ("invalid in-class initialization of static data member "
6477 "of non-integral type %qT",
6478 type);
6479 /* If we just return the declaration, crashes will sometimes
6480 occur. We therefore return void_type_node, as if this were a
6481 friend declaration, to cause callers to completely ignore
6482 this declaration. */
6483 return 1;
6485 else if (!CP_TYPE_CONST_P (type))
6486 error ("ISO C++ forbids in-class initialization of non-const "
6487 "static member %qD",
6488 decl);
6489 else if (pedantic && !INTEGRAL_TYPE_P (type))
6490 pedwarn ("ISO C++ forbids initialization of member constant "
6491 "%qD of non-integral type %qT", decl, type);
6493 return 0;
6496 /* Given the SIZE (i.e., number of elements) in an array, compute an
6497 appropriate index type for the array. If non-NULL, NAME is the
6498 name of the thing being declared. */
6500 tree
6501 compute_array_index_type (tree name, tree size)
6503 tree type;
6504 tree itype;
6506 if (error_operand_p (size))
6507 return error_mark_node;
6509 type = TREE_TYPE (size);
6510 /* The array bound must be an integer type. */
6511 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6513 if (name)
6514 error ("size of array %qD has non-integral type %qT", name, type);
6515 else
6516 error ("size of array has non-integral type %qT", type);
6517 size = integer_one_node;
6518 type = TREE_TYPE (size);
6521 if (abi_version_at_least (2)
6522 /* We should only handle value dependent expressions specially. */
6523 ? value_dependent_expression_p (size)
6524 /* But for abi-1, we handled all instances in templates. This
6525 effects the manglings produced. */
6526 : processing_template_decl)
6527 return build_index_type (build_min (MINUS_EXPR, sizetype,
6528 size, integer_one_node));
6530 /* The size might be the result of a cast. */
6531 STRIP_TYPE_NOPS (size);
6533 /* It might be a const variable or enumeration constant. */
6534 size = integral_constant_value (size);
6536 /* Normally, the array-bound will be a constant. */
6537 if (TREE_CODE (size) == INTEGER_CST)
6539 /* Check to see if the array bound overflowed. Make that an
6540 error, no matter how generous we're being. */
6541 int old_flag_pedantic_errors = flag_pedantic_errors;
6542 int old_pedantic = pedantic;
6543 pedantic = flag_pedantic_errors = 1;
6544 constant_expression_warning (size);
6545 pedantic = old_pedantic;
6546 flag_pedantic_errors = old_flag_pedantic_errors;
6548 /* An array must have a positive number of elements. */
6549 if (INT_CST_LT (size, integer_zero_node))
6551 if (name)
6552 error ("size of array %qD is negative", name);
6553 else
6554 error ("size of array is negative");
6555 size = integer_one_node;
6557 /* As an extension we allow zero-sized arrays. We always allow
6558 them in system headers because glibc uses them. */
6559 else if (integer_zerop (size) && pedantic && !in_system_header)
6561 if (name)
6562 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6563 else
6564 pedwarn ("ISO C++ forbids zero-size array");
6567 else if (TREE_CONSTANT (size))
6569 /* `(int) &fn' is not a valid array bound. */
6570 if (name)
6571 error ("size of array %qD is not an integral constant-expression",
6572 name);
6573 else
6574 error ("size of array is not an integral constant-expression");
6575 size = integer_one_node;
6577 else if (pedantic)
6579 if (name)
6580 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6581 else
6582 pedwarn ("ISO C++ forbids variable-size array");
6585 if (processing_template_decl && !TREE_CONSTANT (size))
6586 /* A variable sized array. */
6587 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6588 else
6590 HOST_WIDE_INT saved_processing_template_decl;
6592 /* Compute the index of the largest element in the array. It is
6593 one less than the number of elements in the array. We save
6594 and restore PROCESSING_TEMPLATE_DECL so that computations in
6595 cp_build_binary_op will be appropriately folded. */
6596 saved_processing_template_decl = processing_template_decl;
6597 processing_template_decl = 0;
6598 itype = cp_build_binary_op (MINUS_EXPR,
6599 cp_convert (ssizetype, size),
6600 cp_convert (ssizetype, integer_one_node));
6601 itype = fold (itype);
6602 processing_template_decl = saved_processing_template_decl;
6604 if (!TREE_CONSTANT (itype))
6605 /* A variable sized array. */
6606 itype = variable_size (itype);
6607 /* Make sure that there was no overflow when creating to a signed
6608 index type. (For example, on a 32-bit machine, an array with
6609 size 2^32 - 1 is too big.) */
6610 else if (TREE_CODE (itype) == INTEGER_CST
6611 && TREE_OVERFLOW (itype))
6613 error ("overflow in array dimension");
6614 TREE_OVERFLOW (itype) = 0;
6618 /* Create and return the appropriate index type. */
6619 return build_index_type (itype);
6622 /* Returns the scope (if any) in which the entity declared by
6623 DECLARATOR will be located. If the entity was declared with an
6624 unqualified name, NULL_TREE is returned. */
6626 tree
6627 get_scope_of_declarator (const cp_declarator *declarator)
6629 while (declarator && declarator->kind != cdk_id)
6630 declarator = declarator->declarator;
6632 /* If the declarator-id is a SCOPE_REF, the scope in which the
6633 declaration occurs is the first operand. */
6634 if (declarator
6635 && declarator->u.id.qualifying_scope)
6636 return declarator->u.id.qualifying_scope;
6638 /* Otherwise, the declarator is not a qualified name; the entity will
6639 be declared in the current scope. */
6640 return NULL_TREE;
6643 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6644 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6645 with this type. */
6647 static tree
6648 create_array_type_for_decl (tree name, tree type, tree size)
6650 tree itype = NULL_TREE;
6651 const char* error_msg;
6653 /* If things have already gone awry, bail now. */
6654 if (type == error_mark_node || size == error_mark_node)
6655 return error_mark_node;
6657 /* Assume that everything will go OK. */
6658 error_msg = NULL;
6660 /* There are some types which cannot be array elements. */
6661 switch (TREE_CODE (type))
6663 case VOID_TYPE:
6664 error_msg = "array of void";
6665 break;
6667 case FUNCTION_TYPE:
6668 error_msg = "array of functions";
6669 break;
6671 case REFERENCE_TYPE:
6672 error_msg = "array of references";
6673 break;
6675 case METHOD_TYPE:
6676 error_msg = "array of function members";
6677 break;
6679 default:
6680 break;
6683 /* If something went wrong, issue an error-message and return. */
6684 if (error_msg)
6686 if (name)
6687 error ("declaration of %qD as %s", name, error_msg);
6688 else
6689 error ("creating %s", error_msg);
6691 return error_mark_node;
6694 /* [dcl.array]
6696 The constant expressions that specify the bounds of the arrays
6697 can be omitted only for the first member of the sequence. */
6698 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6700 if (name)
6701 error ("declaration of %qD as multidimensional array must "
6702 "have bounds for all dimensions except the first",
6703 name);
6704 else
6705 error ("multidimensional array must have bounds for all "
6706 "dimensions except the first");
6708 return error_mark_node;
6711 /* Figure out the index type for the array. */
6712 if (size)
6713 itype = compute_array_index_type (name, size);
6715 /* [dcl.array]
6716 T is called the array element type; this type shall not be [...] an
6717 abstract class type. */
6718 abstract_virtuals_error (name, type);
6720 return build_cplus_array_type (type, itype);
6723 /* Check that it's OK to declare a function with the indicated TYPE.
6724 SFK indicates the kind of special function (if any) that this
6725 function is. OPTYPE is the type given in a conversion operator
6726 declaration, or the class type for a constructor/destructor.
6727 Returns the actual return type of the function; that
6728 may be different than TYPE if an error occurs, or for certain
6729 special functions. */
6731 static tree
6732 check_special_function_return_type (special_function_kind sfk,
6733 tree type,
6734 tree optype)
6736 switch (sfk)
6738 case sfk_constructor:
6739 if (type)
6740 error ("return type specification for constructor invalid");
6742 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6743 type = build_pointer_type (optype);
6744 else
6745 type = void_type_node;
6746 break;
6748 case sfk_destructor:
6749 if (type)
6750 error ("return type specification for destructor invalid");
6751 /* We can't use the proper return type here because we run into
6752 problems with ambiguous bases and covariant returns.
6753 Java classes are left unchanged because (void *) isn't a valid
6754 Java type, and we don't want to change the Java ABI. */
6755 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6756 type = build_pointer_type (void_type_node);
6757 else
6758 type = void_type_node;
6759 break;
6761 case sfk_conversion:
6762 if (type && !same_type_p (type, optype))
6763 error ("operator %qT declared to return %qT", optype, type);
6764 else if (type)
6765 pedwarn ("return type specified for %<operator %T%>", optype);
6766 type = optype;
6767 break;
6769 default:
6770 gcc_unreachable ();
6773 return type;
6776 /* A variable or data member (whose unqualified name is IDENTIFIER)
6777 has been declared with the indicated TYPE. If the TYPE is not
6778 acceptable, issue an error message and return a type to use for
6779 error-recovery purposes. */
6781 tree
6782 check_var_type (tree identifier, tree type)
6784 if (VOID_TYPE_P (type))
6786 if (!identifier)
6787 error ("unnamed variable or field declared void");
6788 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6790 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6791 error ("variable or field %qE declared void", identifier);
6793 else
6794 error ("variable or field declared void");
6795 type = error_mark_node;
6798 return type;
6801 /* Given declspecs and a declarator (abstract or otherwise), determine
6802 the name and type of the object declared and construct a DECL node
6803 for it.
6805 DECLSPECS is a chain of tree_list nodes whose value fields
6806 are the storage classes and type specifiers.
6808 DECL_CONTEXT says which syntactic context this declaration is in:
6809 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6810 FUNCDEF for a function definition. Like NORMAL but a few different
6811 error messages in each case. Return value may be zero meaning
6812 this definition is too screwy to try to parse.
6813 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6814 handle member functions (which have FIELD context).
6815 Return value may be zero meaning this definition is too screwy to
6816 try to parse.
6817 PARM for a parameter declaration (either within a function prototype
6818 or before a function body). Make a PARM_DECL, or return void_type_node.
6819 CATCHPARM for a parameter declaration before a catch clause.
6820 TYPENAME if for a typename (in a cast or sizeof).
6821 Don't make a DECL node; just return the ..._TYPE node.
6822 FIELD for a struct or union field; make a FIELD_DECL.
6823 BITFIELD for a field with specified width.
6824 INITIALIZED is 1 if the decl has an initializer.
6826 ATTRLIST is a pointer to the list of attributes, which may be NULL
6827 if there are none; *ATTRLIST may be modified if attributes from inside
6828 the declarator should be applied to the declaration.
6830 When this function is called, scoping variables (such as
6831 CURRENT_CLASS_TYPE) should reflect the scope in which the
6832 declaration occurs, not the scope in which the new declaration will
6833 be placed. For example, on:
6835 void S::f() { ... }
6837 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6838 should not be `S'.
6840 Returns a DECL (if a declarator is present), a TYPE (if there is no
6841 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
6842 error occurs. */
6844 tree
6845 grokdeclarator (const cp_declarator *declarator,
6846 const cp_decl_specifier_seq *declspecs,
6847 enum decl_context decl_context,
6848 int initialized,
6849 tree* attrlist)
6851 tree type = NULL_TREE;
6852 int longlong = 0;
6853 int virtualp, explicitp, friendp, inlinep, staticp;
6854 int explicit_int = 0;
6855 int explicit_char = 0;
6856 int defaulted_int = 0;
6857 tree dependent_name = NULL_TREE;
6859 tree typedef_decl = NULL_TREE;
6860 const char *name = NULL;
6861 tree typedef_type = NULL_TREE;
6862 /* True if this declarator is a function definition. */
6863 bool funcdef_flag = false;
6864 cp_declarator_kind innermost_code = cdk_error;
6865 int bitfield = 0;
6866 #if 0
6867 /* See the code below that used this. */
6868 tree decl_attr = NULL_TREE;
6869 #endif
6871 /* Keep track of what sort of function is being processed
6872 so that we can warn about default return values, or explicit
6873 return values which do not match prescribed defaults. */
6874 special_function_kind sfk = sfk_none;
6876 tree dname = NULL_TREE;
6877 tree ctor_return_type = NULL_TREE;
6878 enum overload_flags flags = NO_SPECIAL;
6879 /* cv-qualifiers that apply to the declarator, for a declaration of
6880 a member function. */
6881 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
6882 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
6883 int type_quals;
6884 tree raises = NULL_TREE;
6885 int template_count = 0;
6886 tree returned_attrs = NULL_TREE;
6887 tree parms = NULL_TREE;
6888 const cp_declarator *id_declarator;
6889 /* The unqualified name of the declarator; either an
6890 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6891 tree unqualified_id;
6892 /* The class type, if any, in which this entity is located,
6893 or NULL_TREE if none. Note that this value may be different from
6894 the current class type; for example if an attempt is made to declare
6895 "A::f" inside "B", this value will be "A". */
6896 tree ctype = current_class_type;
6897 /* The NAMESPACE_DECL for the namespace in which this entity is
6898 located. If an unqualified name is used to declare the entity,
6899 this value will be NULL_TREE, even if the entity is located at
6900 namespace scope. */
6901 tree in_namespace = NULL_TREE;
6902 cp_storage_class storage_class;
6903 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6904 bool type_was_error_mark_node = false;
6905 bool set_no_warning = false;
6907 signed_p = declspecs->specs[(int)ds_signed];
6908 unsigned_p = declspecs->specs[(int)ds_unsigned];
6909 short_p = declspecs->specs[(int)ds_short];
6910 long_p = declspecs->specs[(int)ds_long];
6911 longlong = declspecs->specs[(int)ds_long] >= 2;
6912 thread_p = declspecs->specs[(int)ds_thread];
6914 if (decl_context == FUNCDEF)
6915 funcdef_flag = true, decl_context = NORMAL;
6916 else if (decl_context == MEMFUNCDEF)
6917 funcdef_flag = true, decl_context = FIELD;
6918 else if (decl_context == BITFIELD)
6919 bitfield = 1, decl_context = FIELD;
6921 /* Look inside a declarator for the name being declared
6922 and get it as a string, for an error message. */
6923 for (id_declarator = declarator;
6924 id_declarator;
6925 id_declarator = id_declarator->declarator)
6927 if (id_declarator->kind != cdk_id)
6928 innermost_code = id_declarator->kind;
6930 switch (id_declarator->kind)
6932 case cdk_function:
6933 if (id_declarator->declarator
6934 && id_declarator->declarator->kind == cdk_id)
6936 sfk = id_declarator->declarator->u.id.sfk;
6937 if (sfk == sfk_destructor)
6938 flags = DTOR_FLAG;
6940 break;
6942 case cdk_id:
6944 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6945 tree decl = id_declarator->u.id.unqualified_name;
6946 if (!decl)
6947 break;
6948 if (qualifying_scope)
6950 if (at_function_scope_p ())
6952 /* [dcl.meaning]
6954 A declarator-id shall not be qualified except
6955 for ...
6957 None of the cases are permitted in block
6958 scope. */
6959 if (qualifying_scope == global_namespace)
6960 error ("invalid use of qualified-name %<::%D%>",
6961 decl);
6962 else if (TYPE_P (qualifying_scope))
6963 error ("invalid use of qualified-name %<%T::%D%>",
6964 qualifying_scope, decl);
6965 else
6966 error ("invalid use of qualified-name %<%D::%D%>",
6967 qualifying_scope, decl);
6968 return error_mark_node;
6970 else if (TYPE_P (qualifying_scope))
6972 ctype = qualifying_scope;
6973 if (innermost_code != cdk_function
6974 && current_class_type
6975 && !UNIQUELY_DERIVED_FROM_P (ctype,
6976 current_class_type))
6978 error ("type %qT is not derived from type %qT",
6979 ctype, current_class_type);
6980 return error_mark_node;
6983 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6984 in_namespace = qualifying_scope;
6986 switch (TREE_CODE (decl))
6988 case BIT_NOT_EXPR:
6990 tree type;
6992 if (innermost_code != cdk_function)
6994 error ("declaration of %qD as non-function", decl);
6995 return error_mark_node;
6997 else if (!qualifying_scope
6998 && !(current_class_type && at_class_scope_p ()))
7000 error ("declaration of %qD as non-member", decl);
7001 return error_mark_node;
7004 type = TREE_OPERAND (decl, 0);
7005 name = IDENTIFIER_POINTER (constructor_name (type));
7006 dname = decl;
7008 break;
7010 case TEMPLATE_ID_EXPR:
7012 tree fns = TREE_OPERAND (decl, 0);
7014 dname = fns;
7015 if (TREE_CODE (dname) != IDENTIFIER_NODE)
7017 gcc_assert (is_overloaded_fn (dname));
7018 dname = DECL_NAME (get_first_fn (dname));
7021 /* Fall through. */
7023 case IDENTIFIER_NODE:
7024 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7025 dname = decl;
7027 if (C_IS_RESERVED_WORD (dname))
7029 error ("declarator-id missing; using reserved word %qD",
7030 dname);
7031 name = IDENTIFIER_POINTER (dname);
7033 else if (!IDENTIFIER_TYPENAME_P (dname))
7034 name = IDENTIFIER_POINTER (dname);
7035 else
7037 gcc_assert (flags == NO_SPECIAL);
7038 flags = TYPENAME_FLAG;
7039 ctor_return_type = TREE_TYPE (dname);
7040 sfk = sfk_conversion;
7041 if (is_typename_at_global_scope (dname))
7042 name = IDENTIFIER_POINTER (dname);
7043 else
7044 name = "<invalid operator>";
7046 break;
7048 default:
7049 gcc_unreachable ();
7051 break;
7053 case cdk_array:
7054 case cdk_pointer:
7055 case cdk_reference:
7056 case cdk_ptrmem:
7057 break;
7059 case cdk_error:
7060 return error_mark_node;
7062 default:
7063 gcc_unreachable ();
7066 if (id_declarator->kind == cdk_id)
7067 break;
7070 /* [dcl.fct.edf]
7072 The declarator in a function-definition shall have the form
7073 D1 ( parameter-declaration-clause) ... */
7074 if (funcdef_flag && innermost_code != cdk_function)
7076 error ("function definition does not declare parameters");
7077 return error_mark_node;
7080 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7081 && innermost_code != cdk_function
7082 && ! (ctype && !declspecs->any_specifiers_p))
7084 error ("declaration of %qD as non-function", dname);
7085 return error_mark_node;
7088 /* Anything declared one level down from the top level
7089 must be one of the parameters of a function
7090 (because the body is at least two levels down). */
7092 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7093 by not allowing C++ class definitions to specify their parameters
7094 with xdecls (must be spec.d in the parmlist).
7096 Since we now wait to push a class scope until we are sure that
7097 we are in a legitimate method context, we must set oldcname
7098 explicitly (since current_class_name is not yet alive).
7100 We also want to avoid calling this a PARM if it is in a namespace. */
7102 if (decl_context == NORMAL && !toplevel_bindings_p ())
7104 struct cp_binding_level *b = current_binding_level;
7105 current_binding_level = b->level_chain;
7106 if (current_binding_level != 0 && toplevel_bindings_p ())
7107 decl_context = PARM;
7108 current_binding_level = b;
7111 if (name == NULL)
7112 name = decl_context == PARM ? "parameter" : "type name";
7114 /* If there were multiple types specified in the decl-specifier-seq,
7115 issue an error message. */
7116 if (declspecs->multiple_types_p)
7118 error ("two or more data types in declaration of %qs", name);
7119 return error_mark_node;
7122 /* Extract the basic type from the decl-specifier-seq. */
7123 type = declspecs->type;
7124 if (type == error_mark_node)
7126 type = NULL_TREE;
7127 type_was_error_mark_node = true;
7129 /* If the entire declaration is itself tagged as deprecated then
7130 suppress reports of deprecated items. */
7131 if (type && TREE_DEPRECATED (type)
7132 && deprecated_state != DEPRECATED_SUPPRESS)
7133 warn_deprecated_use (type);
7134 if (type && TREE_CODE (type) == TYPE_DECL)
7136 typedef_decl = type;
7137 type = TREE_TYPE (typedef_decl);
7139 /* No type at all: default to `int', and set DEFAULTED_INT
7140 because it was not a user-defined typedef. */
7141 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7143 /* These imply 'int'. */
7144 type = integer_type_node;
7145 defaulted_int = 1;
7147 /* Gather flags. */
7148 explicit_int = declspecs->explicit_int_p;
7149 explicit_char = declspecs->explicit_char_p;
7151 #if 0
7152 /* See the code below that used this. */
7153 if (typedef_decl)
7154 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7155 #endif
7156 typedef_type = type;
7159 if (sfk != sfk_conversion)
7160 ctor_return_type = ctype;
7162 if (sfk != sfk_none)
7163 type = check_special_function_return_type (sfk, type,
7164 ctor_return_type);
7165 else if (type == NULL_TREE)
7167 int is_main;
7169 explicit_int = -1;
7171 /* We handle `main' specially here, because 'main () { }' is so
7172 common. With no options, it is allowed. With -Wreturn-type,
7173 it is a warning. It is only an error with -pedantic-errors. */
7174 is_main = (funcdef_flag
7175 && dname && MAIN_NAME_P (dname)
7176 && ctype == NULL_TREE
7177 && in_namespace == NULL_TREE
7178 && current_namespace == global_namespace);
7180 if (type_was_error_mark_node)
7181 /* We've already issued an error, don't complain more. */;
7182 else if (in_system_header || flag_ms_extensions)
7183 /* Allow it, sigh. */;
7184 else if (pedantic || ! is_main)
7185 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7186 else if (warn_return_type)
7187 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7189 type = integer_type_node;
7192 ctype = NULL_TREE;
7194 /* Now process the modifiers that were specified
7195 and check for invalid combinations. */
7197 /* Long double is a special combination. */
7198 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7200 long_p = false;
7201 type = build_qualified_type (long_double_type_node,
7202 cp_type_quals (type));
7205 /* Check all other uses of type modifiers. */
7207 if (unsigned_p || signed_p || long_p || short_p)
7209 int ok = 0;
7211 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7212 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7213 else if (signed_p && unsigned_p)
7214 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7215 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7216 error ("%<long long%> invalid for %qs", name);
7217 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7218 error ("%<long%> invalid for %qs", name);
7219 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7220 error ("%<short%> invalid for %qs", name);
7221 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7222 error ("%<long%> or %<short%> invalid for %qs", name);
7223 else if ((long_p || short_p) && explicit_char)
7224 error ("%<long%> or %<short%> specified with char for %qs", name);
7225 else if (long_p && short_p)
7226 error ("%<long%> and %<short%> specified together for %qs", name);
7227 else
7229 ok = 1;
7230 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7232 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7233 name);
7234 if (flag_pedantic_errors)
7235 ok = 0;
7239 /* Discard the type modifiers if they are invalid. */
7240 if (! ok)
7242 unsigned_p = false;
7243 signed_p = false;
7244 long_p = false;
7245 short_p = false;
7246 longlong = 0;
7250 /* Decide whether an integer type is signed or not.
7251 Optionally treat bitfields as signed by default. */
7252 if (unsigned_p
7253 /* [class.bit]
7255 It is implementation-defined whether a plain (neither
7256 explicitly signed or unsigned) char, short, int, or long
7257 bit-field is signed or unsigned.
7259 Naturally, we extend this to long long as well. Note that
7260 this does not include wchar_t. */
7261 || (bitfield && !flag_signed_bitfields
7262 && !signed_p
7263 /* A typedef for plain `int' without `signed' can be
7264 controlled just like plain `int', but a typedef for
7265 `signed int' cannot be so controlled. */
7266 && !(typedef_decl
7267 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7268 && TREE_CODE (type) == INTEGER_TYPE
7269 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7271 if (longlong)
7272 type = long_long_unsigned_type_node;
7273 else if (long_p)
7274 type = long_unsigned_type_node;
7275 else if (short_p)
7276 type = short_unsigned_type_node;
7277 else if (type == char_type_node)
7278 type = unsigned_char_type_node;
7279 else if (typedef_decl)
7280 type = c_common_unsigned_type (type);
7281 else
7282 type = unsigned_type_node;
7284 else if (signed_p && type == char_type_node)
7285 type = signed_char_type_node;
7286 else if (longlong)
7287 type = long_long_integer_type_node;
7288 else if (long_p)
7289 type = long_integer_type_node;
7290 else if (short_p)
7291 type = short_integer_type_node;
7293 if (declspecs->specs[(int)ds_complex])
7295 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7296 error ("complex invalid for %qs", name);
7297 /* If we just have "complex", it is equivalent to
7298 "complex double", but if any modifiers at all are specified it is
7299 the complex form of TYPE. E.g, "complex short" is
7300 "complex short int". */
7302 else if (defaulted_int && ! longlong
7303 && ! (long_p || short_p || signed_p || unsigned_p))
7304 type = complex_double_type_node;
7305 else if (type == integer_type_node)
7306 type = complex_integer_type_node;
7307 else if (type == float_type_node)
7308 type = complex_float_type_node;
7309 else if (type == double_type_node)
7310 type = complex_double_type_node;
7311 else if (type == long_double_type_node)
7312 type = complex_long_double_type_node;
7313 else
7314 type = build_complex_type (type);
7317 type_quals = TYPE_UNQUALIFIED;
7318 if (declspecs->specs[(int)ds_const])
7319 type_quals |= TYPE_QUAL_CONST;
7320 if (declspecs->specs[(int)ds_volatile])
7321 type_quals |= TYPE_QUAL_VOLATILE;
7322 if (declspecs->specs[(int)ds_restrict])
7323 type_quals |= TYPE_QUAL_RESTRICT;
7324 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7325 error ("qualifiers are not allowed on declaration of %<operator %T%>",
7326 ctor_return_type);
7328 if (TREE_CODE (type) == FUNCTION_TYPE
7329 && type_quals != TYPE_UNQUALIFIED)
7331 /* This was an error in C++98 (cv-qualifiers cannot be added to
7332 a function type), but DR 295 makes the code well-formed by
7333 dropping the extra qualifiers. */
7334 if (pedantic)
7336 tree bad_type = build_qualified_type (type, type_quals);
7337 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7338 bad_type, type);
7340 type_quals = TYPE_UNQUALIFIED;
7342 type_quals |= cp_type_quals (type);
7343 type = cp_build_qualified_type_real
7344 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7345 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7346 /* We might have ignored or rejected some of the qualifiers. */
7347 type_quals = cp_type_quals (type);
7349 staticp = 0;
7350 inlinep = !! declspecs->specs[(int)ds_inline];
7351 virtualp = !! declspecs->specs[(int)ds_virtual];
7352 explicitp = !! declspecs->specs[(int)ds_explicit];
7354 storage_class = declspecs->storage_class;
7355 if (storage_class == sc_static)
7356 staticp = 1 + (decl_context == FIELD);
7358 if (virtualp && staticp == 2)
7360 error ("member %qD cannot be declared both virtual and static", dname);
7361 storage_class = sc_none;
7362 staticp = 0;
7364 friendp = !! declspecs->specs[(int)ds_friend];
7366 if (dependent_name && !friendp)
7368 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
7369 return error_mark_node;
7372 /* Issue errors about use of storage classes for parameters. */
7373 if (decl_context == PARM)
7375 if (declspecs->specs[(int)ds_typedef])
7377 error ("typedef declaration invalid in parameter declaration");
7378 return error_mark_node;
7380 else if (storage_class == sc_static
7381 || storage_class == sc_extern
7382 || thread_p)
7383 error ("storage class specifiers invalid in parameter declarations");
7386 /* Give error if `virtual' is used outside of class declaration. */
7387 if (virtualp
7388 && (current_class_name == NULL_TREE || decl_context != FIELD))
7390 error ("virtual outside class declaration");
7391 virtualp = 0;
7394 /* Static anonymous unions are dealt with here. */
7395 if (staticp && decl_context == TYPENAME
7396 && declspecs->type
7397 && ANON_AGGR_TYPE_P (declspecs->type))
7398 decl_context = FIELD;
7400 /* Warn about storage classes that are invalid for certain
7401 kinds of declarations (parameters, typenames, etc.). */
7402 if (declspecs->conflicting_specifiers_p)
7404 error ("conflicting specifiers in declaration of %qs", name);
7405 storage_class = sc_none;
7407 else if (thread_p
7408 && ((storage_class
7409 && storage_class != sc_extern
7410 && storage_class != sc_static)
7411 || declspecs->specs[(int)ds_typedef]))
7413 error ("multiple storage classes in declaration of %qs", name);
7414 thread_p = false;
7416 else if (decl_context != NORMAL
7417 && ((storage_class != sc_none
7418 && storage_class != sc_mutable)
7419 || thread_p))
7421 if ((decl_context == PARM || decl_context == CATCHPARM)
7422 && (storage_class == sc_register
7423 || storage_class == sc_auto))
7425 else if (declspecs->specs[(int)ds_typedef])
7427 else if (decl_context == FIELD
7428 /* C++ allows static class elements. */
7429 && storage_class == sc_static)
7430 /* C++ also allows inlines and signed and unsigned elements,
7431 but in those cases we don't come in here. */
7433 else
7435 if (decl_context == FIELD)
7436 error ("storage class specified for %qs", name);
7437 else
7439 if (decl_context == PARM || decl_context == CATCHPARM)
7440 error ("storage class specified for parameter %qs", name);
7441 else
7442 error ("storage class specified for typename");
7444 if (storage_class == sc_register
7445 || storage_class == sc_auto
7446 || storage_class == sc_extern
7447 || thread_p)
7448 storage_class = sc_none;
7451 else if (storage_class == sc_extern && initialized
7452 && !funcdef_flag)
7454 if (toplevel_bindings_p ())
7456 /* It's common practice (and completely valid) to have a const
7457 be initialized and declared extern. */
7458 if (!(type_quals & TYPE_QUAL_CONST))
7459 warning (0, "%qs initialized and declared %<extern%>", name);
7461 else
7462 error ("%qs has both %<extern%> and initializer", name);
7464 else if (storage_class == sc_extern && funcdef_flag
7465 && ! toplevel_bindings_p ())
7466 error ("nested function %qs declared %<extern%>", name);
7467 else if (toplevel_bindings_p ())
7469 if (storage_class == sc_auto)
7470 error ("top-level declaration of %qs specifies %<auto%>", name);
7472 else if (thread_p
7473 && storage_class != sc_extern
7474 && storage_class != sc_static)
7476 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7477 name);
7478 thread_p = false;
7481 if (storage_class && friendp)
7482 error ("storage class specifiers invalid in friend function declarations");
7484 if (!id_declarator)
7485 unqualified_id = NULL_TREE;
7486 else
7488 unqualified_id = id_declarator->u.id.unqualified_name;
7489 switch (TREE_CODE (unqualified_id))
7491 case BIT_NOT_EXPR:
7492 unqualified_id
7493 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7494 break;
7496 case IDENTIFIER_NODE:
7497 case TEMPLATE_ID_EXPR:
7498 break;
7500 default:
7501 gcc_unreachable ();
7505 /* Determine the type of the entity declared by recurring on the
7506 declarator. */
7507 for (; declarator; declarator = declarator->declarator)
7509 const cp_declarator *inner_declarator;
7510 tree attrs;
7512 if (type == error_mark_node)
7513 return error_mark_node;
7515 attrs = declarator->attributes;
7516 if (attrs)
7518 int attr_flags;
7520 attr_flags = 0;
7521 if (declarator == NULL || declarator->kind == cdk_id)
7522 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7523 if (declarator->kind == cdk_function)
7524 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7525 if (declarator->kind == cdk_array)
7526 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7527 returned_attrs = decl_attributes (&type,
7528 chainon (returned_attrs, attrs),
7529 attr_flags);
7532 if (declarator->kind == cdk_id)
7533 break;
7535 inner_declarator = declarator->declarator;
7537 switch (declarator->kind)
7539 case cdk_array:
7540 type = create_array_type_for_decl (dname, type,
7541 declarator->u.array.bounds);
7542 break;
7544 case cdk_function:
7546 tree arg_types;
7547 int funcdecl_p;
7549 /* Declaring a function type.
7550 Make sure we have a valid type for the function to return. */
7552 if (type_quals != TYPE_UNQUALIFIED)
7554 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
7555 warning (OPT_Wreturn_type,
7556 "type qualifiers ignored on function return type");
7557 /* We now know that the TYPE_QUALS don't apply to the
7558 decl, but to its return type. */
7559 type_quals = TYPE_UNQUALIFIED;
7560 set_no_warning = true;
7563 /* Warn about some types functions can't return. */
7565 if (TREE_CODE (type) == FUNCTION_TYPE)
7567 error ("%qs declared as function returning a function", name);
7568 type = integer_type_node;
7570 if (TREE_CODE (type) == ARRAY_TYPE)
7572 error ("%qs declared as function returning an array", name);
7573 type = integer_type_node;
7576 /* Pick up type qualifiers which should be applied to `this'. */
7577 memfn_quals = declarator->u.function.qualifiers;
7579 /* Pick up the exception specifications. */
7580 raises = declarator->u.function.exception_specification;
7582 /* Say it's a definition only for the CALL_EXPR
7583 closest to the identifier. */
7584 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7586 if (ctype == NULL_TREE
7587 && decl_context == FIELD
7588 && funcdecl_p
7589 && (friendp == 0 || dname == current_class_name))
7590 ctype = current_class_type;
7592 if (ctype && (sfk == sfk_constructor
7593 || sfk == sfk_destructor))
7595 /* We are within a class's scope. If our declarator name
7596 is the same as the class name, and we are defining
7597 a function, then it is a constructor/destructor, and
7598 therefore returns a void type. */
7600 /* ISO C++ 12.4/2. A destructor may not be declared
7601 const or volatile. A destructor may not be
7602 static.
7604 ISO C++ 12.1. A constructor may not be declared
7605 const or volatile. A constructor may not be
7606 virtual. A constructor may not be static. */
7607 if (staticp == 2)
7608 error ((flags == DTOR_FLAG)
7609 ? "destructor cannot be static member function"
7610 : "constructor cannot be static member function");
7611 if (memfn_quals)
7613 error ((flags == DTOR_FLAG)
7614 ? "destructors may not be cv-qualified"
7615 : "constructors may not be cv-qualified");
7616 memfn_quals = TYPE_UNQUALIFIED;
7619 if (decl_context == FIELD
7620 && !member_function_or_else (ctype,
7621 current_class_type,
7622 flags))
7623 return error_mark_node;
7625 if (flags != DTOR_FLAG)
7627 /* It's a constructor. */
7628 if (explicitp == 1)
7629 explicitp = 2;
7630 if (virtualp)
7632 pedwarn ("constructors cannot be declared virtual");
7633 virtualp = 0;
7635 if (decl_context == FIELD
7636 && sfk != sfk_constructor)
7637 return error_mark_node;
7639 if (decl_context == FIELD)
7640 staticp = 0;
7642 else if (friendp)
7644 if (initialized)
7645 error ("can't initialize friend function %qs", name);
7646 if (virtualp)
7648 /* Cannot be both friend and virtual. */
7649 error ("virtual functions cannot be friends");
7650 friendp = 0;
7652 if (decl_context == NORMAL)
7653 error ("friend declaration not in class definition");
7654 if (current_function_decl && funcdef_flag)
7655 error ("can't define friend function %qs in a local "
7656 "class definition",
7657 name);
7660 arg_types = grokparms (declarator->u.function.parameters,
7661 &parms);
7663 if (inner_declarator
7664 && inner_declarator->kind == cdk_id
7665 && inner_declarator->u.id.sfk == sfk_destructor
7666 && arg_types != void_list_node)
7668 error ("destructors may not have parameters");
7669 arg_types = void_list_node;
7670 parms = NULL_TREE;
7673 type = build_function_type (type, arg_types);
7675 break;
7677 case cdk_pointer:
7678 case cdk_reference:
7679 case cdk_ptrmem:
7680 /* Filter out pointers-to-references and references-to-references.
7681 We can get these if a TYPE_DECL is used. */
7683 if (TREE_CODE (type) == REFERENCE_TYPE)
7685 error (declarator->kind == cdk_reference
7686 ? "cannot declare reference to %q#T"
7687 : "cannot declare pointer to %q#T", type);
7688 type = TREE_TYPE (type);
7690 else if (VOID_TYPE_P (type))
7692 if (declarator->kind == cdk_reference)
7693 error ("cannot declare reference to %q#T", type);
7694 else if (declarator->kind == cdk_ptrmem)
7695 error ("cannot declare pointer to %q#T member", type);
7698 /* We now know that the TYPE_QUALS don't apply to the decl,
7699 but to the target of the pointer. */
7700 type_quals = TYPE_UNQUALIFIED;
7702 if (declarator->kind == cdk_ptrmem
7703 && (TREE_CODE (type) == FUNCTION_TYPE || memfn_quals))
7705 memfn_quals |= cp_type_quals (type);
7706 type = build_memfn_type (type,
7707 declarator->u.pointer.class_type,
7708 memfn_quals);
7709 memfn_quals = TYPE_UNQUALIFIED;
7712 if (declarator->kind == cdk_reference)
7714 if (!VOID_TYPE_P (type))
7715 type = build_reference_type (type);
7717 else if (TREE_CODE (type) == METHOD_TYPE)
7718 type = build_ptrmemfunc_type (build_pointer_type (type));
7719 else if (declarator->kind == cdk_ptrmem)
7721 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7722 != NAMESPACE_DECL);
7723 if (declarator->u.pointer.class_type == error_mark_node)
7724 /* We will already have complained. */
7725 type = error_mark_node;
7726 else
7727 type = build_ptrmem_type (declarator->u.pointer.class_type,
7728 type);
7730 else
7731 type = build_pointer_type (type);
7733 /* Process a list of type modifier keywords (such as
7734 const or volatile) that were given inside the `*' or `&'. */
7736 if (declarator->u.pointer.qualifiers)
7738 type
7739 = cp_build_qualified_type (type,
7740 declarator->u.pointer.qualifiers);
7741 type_quals = cp_type_quals (type);
7743 ctype = NULL_TREE;
7744 break;
7746 case cdk_error:
7747 break;
7749 default:
7750 gcc_unreachable ();
7754 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7755 && TREE_CODE (type) != FUNCTION_TYPE
7756 && TREE_CODE (type) != METHOD_TYPE)
7758 error ("template-id %qD used as a declarator",
7759 unqualified_id);
7760 unqualified_id = dname;
7763 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7764 qualified with a class-name, turn it into a METHOD_TYPE, unless
7765 we know that the function is static. We take advantage of this
7766 opportunity to do other processing that pertains to entities
7767 explicitly declared to be class members. Note that if DECLARATOR
7768 is non-NULL, we know it is a cdk_id declarator; otherwise, we
7769 would not have exited the loop above. */
7770 if (declarator
7771 && declarator->u.id.qualifying_scope
7772 && TYPE_P (declarator->u.id.qualifying_scope))
7774 tree t;
7776 ctype = declarator->u.id.qualifying_scope;
7777 ctype = TYPE_MAIN_VARIANT (ctype);
7778 t = ctype;
7779 while (t != NULL_TREE && CLASS_TYPE_P (t))
7781 /* You're supposed to have one `template <...>' for every
7782 template class, but you don't need one for a full
7783 specialization. For example:
7785 template <class T> struct S{};
7786 template <> struct S<int> { void f(); };
7787 void S<int>::f () {}
7789 is correct; there shouldn't be a `template <>' for the
7790 definition of `S<int>::f'. */
7791 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7792 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7793 /* T is an explicit (not partial) specialization. All
7794 containing classes must therefore also be explicitly
7795 specialized. */
7796 break;
7797 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7798 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7799 template_count += 1;
7801 t = TYPE_MAIN_DECL (t);
7802 t = DECL_CONTEXT (t);
7805 if (ctype == current_class_type)
7807 if (friendp)
7808 pedwarn ("member functions are implicitly friends of their class");
7809 else
7810 pedwarn ("extra qualification %<%T::%> on member %qs",
7811 ctype, name);
7813 else if (/* If the qualifying type is already complete, then we
7814 can skip the following checks. */
7815 !COMPLETE_TYPE_P (ctype)
7816 && (/* If the function is being defined, then
7817 qualifying type must certainly be complete. */
7818 funcdef_flag
7819 /* A friend declaration of "T::f" is OK, even if
7820 "T" is a template parameter. But, if this
7821 function is not a friend, the qualifying type
7822 must be a class. */
7823 || (!friendp && !CLASS_TYPE_P (ctype))
7824 /* For a declaration, the type need not be
7825 complete, if either it is dependent (since there
7826 is no meaningful definition of complete in that
7827 case) or the qualifying class is currently being
7828 defined. */
7829 || !(dependent_type_p (ctype)
7830 || currently_open_class (ctype)))
7831 /* Check that the qualifying type is complete. */
7832 && !complete_type_or_else (ctype, NULL_TREE))
7833 return error_mark_node;
7834 else if (TREE_CODE (type) == FUNCTION_TYPE)
7836 tree sname = declarator->u.id.unqualified_name;
7838 if (current_class_type
7839 && (!friendp || funcdef_flag))
7841 error (funcdef_flag
7842 ? "cannot define member function %<%T::%s%> within %<%T%>"
7843 : "cannot declare member function %<%T::%s%> within %<%T%>",
7844 ctype, name, current_class_type);
7845 return error_mark_node;
7848 if (TREE_CODE (sname) == IDENTIFIER_NODE
7849 && NEW_DELETE_OPNAME_P (sname))
7850 /* Overloaded operator new and operator delete
7851 are always static functions. */
7853 else
7854 type = build_memfn_type (type, ctype, memfn_quals);
7856 else if (declspecs->specs[(int)ds_typedef]
7857 && current_class_type)
7859 error ("cannot declare member %<%T::%s%> within %qT",
7860 ctype, name, current_class_type);
7861 return error_mark_node;
7865 /* Now TYPE has the actual type. */
7867 if (returned_attrs)
7869 if (attrlist)
7870 *attrlist = chainon (returned_attrs, *attrlist);
7871 else
7872 attrlist = &returned_attrs;
7875 /* Did array size calculations overflow? */
7877 if (TREE_CODE (type) == ARRAY_TYPE
7878 && COMPLETE_TYPE_P (type)
7879 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7880 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7882 error ("size of array %qs is too large", name);
7883 /* If we proceed with the array type as it is, we'll eventually
7884 crash in tree_low_cst(). */
7885 type = error_mark_node;
7888 if ((decl_context == FIELD || decl_context == PARM)
7889 && !processing_template_decl
7890 && variably_modified_type_p (type, NULL_TREE))
7892 if (decl_context == FIELD)
7893 error ("data member may not have variably modified type %qT", type);
7894 else
7895 error ("parameter may not have variably modified type %qT", type);
7896 type = error_mark_node;
7899 if (explicitp == 1 || (explicitp && friendp))
7901 /* [dcl.fct.spec] The explicit specifier shall only be used in
7902 declarations of constructors within a class definition. */
7903 error ("only declarations of constructors can be %<explicit%>");
7904 explicitp = 0;
7907 if (storage_class == sc_mutable)
7909 if (decl_context != FIELD || friendp)
7911 error ("non-member %qs cannot be declared %<mutable%>", name);
7912 storage_class = sc_none;
7914 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7916 error ("non-object member %qs cannot be declared %<mutable%>", name);
7917 storage_class = sc_none;
7919 else if (TREE_CODE (type) == FUNCTION_TYPE
7920 || TREE_CODE (type) == METHOD_TYPE)
7922 error ("function %qs cannot be declared %<mutable%>", name);
7923 storage_class = sc_none;
7925 else if (staticp)
7927 error ("static %qs cannot be declared %<mutable%>", name);
7928 storage_class = sc_none;
7930 else if (type_quals & TYPE_QUAL_CONST)
7932 error ("const %qs cannot be declared %<mutable%>", name);
7933 storage_class = sc_none;
7937 /* If this is declaring a typedef name, return a TYPE_DECL. */
7938 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7940 tree decl;
7942 /* Note that the grammar rejects storage classes
7943 in typenames, fields or parameters. */
7944 if (current_lang_name == lang_name_java)
7945 TYPE_FOR_JAVA (type) = 1;
7947 /* This declaration:
7949 typedef void f(int) const;
7951 declares a function type which is not a member of any
7952 particular class, but which is cv-qualified; for
7953 example "f S::*" declares a pointer to a const-qualified
7954 member function of S. We record the cv-qualification in the
7955 function type. */
7956 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
7957 type = cp_build_qualified_type (type, memfn_quals);
7959 if (decl_context == FIELD)
7960 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7961 else
7962 decl = build_decl (TYPE_DECL, unqualified_id, type);
7963 if (id_declarator && declarator->u.id.qualifying_scope)
7964 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7966 if (decl_context != FIELD)
7968 if (!current_function_decl)
7969 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7970 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7971 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7972 (current_function_decl)))
7973 /* The TYPE_DECL is "abstract" because there will be
7974 clones of this constructor/destructor, and there will
7975 be copies of this TYPE_DECL generated in those
7976 clones. */
7977 DECL_ABSTRACT (decl) = 1;
7979 else if (constructor_name_p (unqualified_id, current_class_type))
7980 pedwarn ("ISO C++ forbids nested type %qD with same name "
7981 "as enclosing class",
7982 unqualified_id);
7984 /* If the user declares "typedef struct {...} foo" then the
7985 struct will have an anonymous name. Fill that name in now.
7986 Nothing can refer to it, so nothing needs know about the name
7987 change. */
7988 if (type != error_mark_node
7989 && unqualified_id
7990 && TYPE_NAME (type)
7991 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7992 && TYPE_ANONYMOUS_P (type)
7993 /* Don't do this if there are attributes. */
7994 && (!attrlist || !*attrlist)
7995 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7997 tree oldname = TYPE_NAME (type);
7998 tree t;
8000 /* Replace the anonymous name with the real name everywhere. */
8001 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8002 if (TYPE_NAME (t) == oldname)
8003 TYPE_NAME (t) = decl;
8005 if (TYPE_LANG_SPECIFIC (type))
8006 TYPE_WAS_ANONYMOUS (type) = 1;
8008 /* If this is a typedef within a template class, the nested
8009 type is a (non-primary) template. The name for the
8010 template needs updating as well. */
8011 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8012 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8013 = TYPE_IDENTIFIER (type);
8015 /* FIXME remangle member functions; member functions of a
8016 type with external linkage have external linkage. */
8019 /* Any qualifiers on a function type typedef have already been
8020 dealt with. */
8021 if (memfn_quals && !ctype && TREE_CODE (type) == FUNCTION_TYPE)
8022 memfn_quals = TYPE_UNQUALIFIED;
8024 if (signed_p
8025 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8026 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8028 bad_specifiers (decl, "type", virtualp,
8029 memfn_quals != TYPE_UNQUALIFIED,
8030 inlinep, friendp, raises != NULL_TREE);
8032 return decl;
8035 /* Detect the case of an array type of unspecified size
8036 which came, as such, direct from a typedef name.
8037 We must copy the type, so that the array's domain can be
8038 individually set by the object's initializer. */
8040 if (type && typedef_type
8041 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8042 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8043 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8045 /* Detect where we're using a typedef of function type to declare a
8046 function. PARMS will not be set, so we must create it now. */
8048 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8050 tree decls = NULL_TREE;
8051 tree args;
8053 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8055 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8057 TREE_CHAIN (decl) = decls;
8058 decls = decl;
8061 parms = nreverse (decls);
8063 if (decl_context != TYPENAME)
8065 /* A cv-qualifier-seq shall only be part of the function type
8066 for a non-static member function. [8.3.5/4 dcl.fct] */
8067 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8068 && (current_class_type == NULL_TREE || staticp) )
8070 error (staticp
8071 ? G_("qualified function types cannot be used to "
8072 "declare static member functions")
8073 : G_("qualified function types cannot be used to "
8074 "declare free functions"));
8075 type = TYPE_MAIN_VARIANT (type);
8078 /* The qualifiers on the function type become the qualifiers on
8079 the non-static member function. */
8080 memfn_quals |= cp_type_quals (type);
8084 /* If this is a type name (such as, in a cast or sizeof),
8085 compute the type and return it now. */
8087 if (decl_context == TYPENAME)
8089 /* Note that the grammar rejects storage classes
8090 in typenames, fields or parameters. */
8091 if (type_quals != TYPE_UNQUALIFIED)
8092 type_quals = TYPE_UNQUALIFIED;
8094 /* Special case: "friend class foo" looks like a TYPENAME context. */
8095 if (friendp)
8097 if (type_quals != TYPE_UNQUALIFIED)
8099 error ("type qualifiers specified for friend class declaration");
8100 type_quals = TYPE_UNQUALIFIED;
8102 if (inlinep)
8104 error ("%<inline%> specified for friend class declaration");
8105 inlinep = 0;
8108 if (!current_aggr)
8110 /* Don't allow friend declaration without a class-key. */
8111 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8112 pedwarn ("template parameters cannot be friends");
8113 else if (TREE_CODE (type) == TYPENAME_TYPE)
8114 pedwarn ("friend declaration requires class-key, "
8115 "i.e. %<friend class %T::%D%>",
8116 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8117 else
8118 pedwarn ("friend declaration requires class-key, "
8119 "i.e. %<friend %#T%>",
8120 type);
8123 /* Only try to do this stuff if we didn't already give up. */
8124 if (type != integer_type_node)
8126 /* A friendly class? */
8127 if (current_class_type)
8128 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8129 /*complain=*/true);
8130 else
8131 error ("trying to make class %qT a friend of global scope",
8132 type);
8134 type = void_type_node;
8137 else if (memfn_quals)
8139 if (ctype == NULL_TREE)
8141 if (TREE_CODE (type) != METHOD_TYPE)
8142 error ("invalid qualifiers on non-member function type");
8143 else
8144 ctype = TYPE_METHOD_BASETYPE (type);
8146 if (ctype)
8147 type = build_memfn_type (type, ctype, memfn_quals);
8150 return type;
8152 else if (unqualified_id == NULL_TREE && decl_context != PARM
8153 && decl_context != CATCHPARM
8154 && TREE_CODE (type) != UNION_TYPE
8155 && ! bitfield)
8157 error ("abstract declarator %qT used as declaration", type);
8158 return error_mark_node;
8161 /* Only functions may be declared using an operator-function-id. */
8162 if (unqualified_id
8163 && IDENTIFIER_OPNAME_P (unqualified_id)
8164 && TREE_CODE (type) != FUNCTION_TYPE
8165 && TREE_CODE (type) != METHOD_TYPE)
8167 error ("declaration of %qD as non-function", unqualified_id);
8168 return error_mark_node;
8171 /* We don't check parameter types here because we can emit a better
8172 error message later. */
8173 if (decl_context != PARM)
8175 type = check_var_type (unqualified_id, type);
8176 if (type == error_mark_node)
8177 return error_mark_node;
8180 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8181 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8183 if (decl_context == PARM || decl_context == CATCHPARM)
8185 if (ctype || in_namespace)
8186 error ("cannot use %<::%> in parameter declaration");
8188 /* A parameter declared as an array of T is really a pointer to T.
8189 One declared as a function is really a pointer to a function.
8190 One declared as a member is really a pointer to member. */
8192 if (TREE_CODE (type) == ARRAY_TYPE)
8194 /* Transfer const-ness of array into that of type pointed to. */
8195 type = build_pointer_type (TREE_TYPE (type));
8196 type_quals = TYPE_UNQUALIFIED;
8198 else if (TREE_CODE (type) == FUNCTION_TYPE)
8199 type = build_pointer_type (type);
8203 tree decl;
8205 if (decl_context == PARM)
8207 decl = cp_build_parm_decl (unqualified_id, type);
8209 bad_specifiers (decl, "parameter", virtualp,
8210 memfn_quals != TYPE_UNQUALIFIED,
8211 inlinep, friendp, raises != NULL_TREE);
8213 else if (decl_context == FIELD)
8215 /* The C99 flexible array extension. */
8216 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8217 && TYPE_DOMAIN (type) == NULL_TREE)
8219 tree itype = compute_array_index_type (dname, integer_zero_node);
8220 type = build_cplus_array_type (TREE_TYPE (type), itype);
8223 if (type == error_mark_node)
8225 /* Happens when declaring arrays of sizes which
8226 are error_mark_node, for example. */
8227 decl = NULL_TREE;
8229 else if (in_namespace && !friendp)
8231 /* Something like struct S { int N::j; }; */
8232 error ("invalid use of %<::%>");
8233 return error_mark_node;
8235 else if (TREE_CODE (type) == FUNCTION_TYPE)
8237 int publicp = 0;
8238 tree function_context;
8240 if (friendp == 0)
8242 if (ctype == NULL_TREE)
8243 ctype = current_class_type;
8245 if (ctype == NULL_TREE)
8247 error ("can't make %qD into a method -- not in a class",
8248 unqualified_id);
8249 return error_mark_node;
8252 /* ``A union may [ ... ] not [ have ] virtual functions.''
8253 ARM 9.5 */
8254 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8256 error ("function %qD declared virtual inside a union",
8257 unqualified_id);
8258 return error_mark_node;
8261 if (NEW_DELETE_OPNAME_P (unqualified_id))
8263 if (virtualp)
8265 error ("%qD cannot be declared virtual, since it "
8266 "is always static",
8267 unqualified_id);
8268 virtualp = 0;
8271 else if (staticp < 2)
8272 type = build_memfn_type (type, ctype, memfn_quals);
8275 /* Check that the name used for a destructor makes sense. */
8276 if (sfk == sfk_destructor)
8278 if (!ctype)
8280 gcc_assert (friendp);
8281 error ("expected qualified name in friend declaration "
8282 "for destructor %qD",
8283 id_declarator->u.id.unqualified_name);
8284 return error_mark_node;
8287 if (!same_type_p (TREE_OPERAND
8288 (id_declarator->u.id.unqualified_name, 0),
8289 ctype))
8291 error ("declaration of %qD as member of %qT",
8292 id_declarator->u.id.unqualified_name, ctype);
8293 return error_mark_node;
8297 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8298 function_context = (ctype != NULL_TREE) ?
8299 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8300 publicp = (! friendp || ! staticp)
8301 && function_context == NULL_TREE;
8302 decl = grokfndecl (ctype, type,
8303 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8304 ? unqualified_id : dname,
8305 parms,
8306 unqualified_id,
8307 virtualp, flags, memfn_quals, raises,
8308 friendp ? -1 : 0, friendp, publicp, inlinep,
8309 sfk,
8310 funcdef_flag, template_count, in_namespace, attrlist);
8311 if (decl == NULL_TREE)
8312 return error_mark_node;
8313 #if 0
8314 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8315 /* The decl and setting of decl_attr is also turned off. */
8316 decl = build_decl_attribute_variant (decl, decl_attr);
8317 #endif
8319 /* [class.conv.ctor]
8321 A constructor declared without the function-specifier
8322 explicit that can be called with a single parameter
8323 specifies a conversion from the type of its first
8324 parameter to the type of its class. Such a constructor
8325 is called a converting constructor. */
8326 if (explicitp == 2)
8327 DECL_NONCONVERTING_P (decl) = 1;
8328 else if (DECL_CONSTRUCTOR_P (decl))
8330 /* The constructor can be called with exactly one
8331 parameter if there is at least one parameter, and
8332 any subsequent parameters have default arguments.
8333 Ignore any compiler-added parms. */
8334 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8336 if (arg_types == void_list_node
8337 || (arg_types
8338 && TREE_CHAIN (arg_types)
8339 && TREE_CHAIN (arg_types) != void_list_node
8340 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8341 DECL_NONCONVERTING_P (decl) = 1;
8344 else if (TREE_CODE (type) == METHOD_TYPE)
8346 /* We only get here for friend declarations of
8347 members of other classes. */
8348 /* All method decls are public, so tell grokfndecl to set
8349 TREE_PUBLIC, also. */
8350 decl = grokfndecl (ctype, type,
8351 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8352 ? unqualified_id : dname,
8353 parms,
8354 unqualified_id,
8355 virtualp, flags, memfn_quals, raises,
8356 friendp ? -1 : 0, friendp, 1, 0, sfk,
8357 funcdef_flag, template_count, in_namespace,
8358 attrlist);
8359 if (decl == NULL_TREE)
8360 return error_mark_node;
8362 else if (!staticp && !dependent_type_p (type)
8363 && !COMPLETE_TYPE_P (complete_type (type))
8364 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8366 if (unqualified_id)
8367 error ("field %qD has incomplete type", unqualified_id);
8368 else
8369 error ("name %qT has incomplete type", type);
8371 /* If we're instantiating a template, tell them which
8372 instantiation made the field's type be incomplete. */
8373 if (current_class_type
8374 && TYPE_NAME (current_class_type)
8375 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8376 && declspecs->type
8377 && declspecs->type == type)
8378 error (" in instantiation of template %qT",
8379 current_class_type);
8381 return error_mark_node;
8383 else
8385 if (friendp)
8387 error ("%qE is neither function nor member function; "
8388 "cannot be declared friend", unqualified_id);
8389 friendp = 0;
8391 decl = NULL_TREE;
8394 if (friendp)
8396 /* Friends are treated specially. */
8397 if (ctype == current_class_type)
8398 ; /* We already issued a pedwarn. */
8399 else if (decl && DECL_NAME (decl))
8401 if (template_class_depth (current_class_type) == 0)
8403 decl = check_explicit_specialization
8404 (unqualified_id, decl, template_count,
8405 2 * funcdef_flag + 4);
8406 if (decl == error_mark_node)
8407 return error_mark_node;
8410 decl = do_friend (ctype, unqualified_id, decl,
8411 *attrlist, flags,
8412 funcdef_flag);
8413 return decl;
8415 else
8416 return error_mark_node;
8419 /* Structure field. It may not be a function, except for C++. */
8421 if (decl == NULL_TREE)
8423 if (initialized)
8425 if (!staticp)
8427 /* An attempt is being made to initialize a non-static
8428 member. But, from [class.mem]:
8430 4 A member-declarator can contain a
8431 constant-initializer only if it declares a static
8432 member (_class.static_) of integral or enumeration
8433 type, see _class.static.data_.
8435 This used to be relatively common practice, but
8436 the rest of the compiler does not correctly
8437 handle the initialization unless the member is
8438 static so we make it static below. */
8439 pedwarn ("ISO C++ forbids initialization of member %qD",
8440 unqualified_id);
8441 pedwarn ("making %qD static", unqualified_id);
8442 staticp = 1;
8445 if (uses_template_parms (type))
8446 /* We'll check at instantiation time. */
8448 else if (check_static_variable_definition (unqualified_id,
8449 type))
8450 /* If we just return the declaration, crashes
8451 will sometimes occur. We therefore return
8452 void_type_node, as if this was a friend
8453 declaration, to cause callers to completely
8454 ignore this declaration. */
8455 return error_mark_node;
8458 if (staticp)
8460 /* C++ allows static class members. All other work
8461 for this is done by grokfield. */
8462 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8463 set_linkage_for_static_data_member (decl);
8464 /* Even if there is an in-class initialization, DECL
8465 is considered undefined until an out-of-class
8466 definition is provided. */
8467 DECL_EXTERNAL (decl) = 1;
8469 if (thread_p)
8471 if (targetm.have_tls)
8472 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8473 else
8474 /* A mere warning is sure to result in improper
8475 semantics at runtime. Don't bother to allow this to
8476 compile. */
8477 error ("thread-local storage not supported for this target");
8480 else
8482 decl = build_decl (FIELD_DECL, unqualified_id, type);
8483 DECL_NONADDRESSABLE_P (decl) = bitfield;
8484 if (storage_class == sc_mutable)
8486 DECL_MUTABLE_P (decl) = 1;
8487 storage_class = sc_none;
8491 bad_specifiers (decl, "field", virtualp,
8492 memfn_quals != TYPE_UNQUALIFIED,
8493 inlinep, friendp, raises != NULL_TREE);
8496 else if (TREE_CODE (type) == FUNCTION_TYPE
8497 || TREE_CODE (type) == METHOD_TYPE)
8499 tree original_name;
8500 int publicp = 0;
8502 if (!unqualified_id)
8503 return error_mark_node;
8505 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8506 original_name = dname;
8507 else
8508 original_name = unqualified_id;
8510 if (storage_class == sc_auto)
8511 error ("storage class %<auto%> invalid for function %qs", name);
8512 else if (storage_class == sc_register)
8513 error ("storage class %<register%> invalid for function %qs", name);
8514 else if (thread_p)
8515 error ("storage class %<__thread%> invalid for function %qs", name);
8517 /* Function declaration not at top level.
8518 Storage classes other than `extern' are not allowed
8519 and `extern' makes no difference. */
8520 if (! toplevel_bindings_p ()
8521 && (storage_class == sc_static
8522 || declspecs->specs[(int)ds_inline])
8523 && pedantic)
8525 if (storage_class == sc_static)
8526 pedwarn ("%<static%> specified invalid for function %qs "
8527 "declared out of global scope", name);
8528 else
8529 pedwarn ("%<inline%> specifier invalid for function %qs "
8530 "declared out of global scope", name);
8533 if (ctype == NULL_TREE)
8535 if (virtualp)
8537 error ("virtual non-class function %qs", name);
8538 virtualp = 0;
8541 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8542 && !NEW_DELETE_OPNAME_P (original_name))
8543 type = build_method_type_directly (ctype,
8544 TREE_TYPE (type),
8545 TYPE_ARG_TYPES (type));
8547 /* Record presence of `static'. */
8548 publicp = (ctype != NULL_TREE
8549 || storage_class == sc_extern
8550 || storage_class != sc_static);
8552 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8553 virtualp, flags, memfn_quals, raises,
8554 1, friendp,
8555 publicp, inlinep, sfk, funcdef_flag,
8556 template_count, in_namespace, attrlist);
8557 if (decl == NULL_TREE)
8558 return error_mark_node;
8560 if (staticp == 1)
8562 int invalid_static = 0;
8564 /* Don't allow a static member function in a class, and forbid
8565 declaring main to be static. */
8566 if (TREE_CODE (type) == METHOD_TYPE)
8568 pedwarn ("cannot declare member function %qD to have "
8569 "static linkage", decl);
8570 invalid_static = 1;
8572 else if (current_function_decl)
8574 /* FIXME need arm citation */
8575 error ("cannot declare static function inside another function");
8576 invalid_static = 1;
8579 if (invalid_static)
8581 staticp = 0;
8582 storage_class = sc_none;
8586 else
8588 /* It's a variable. */
8590 /* An uninitialized decl with `extern' is a reference. */
8591 decl = grokvardecl (type, unqualified_id,
8592 declspecs,
8593 initialized,
8594 (type_quals & TYPE_QUAL_CONST) != 0,
8595 ctype ? ctype : in_namespace);
8596 bad_specifiers (decl, "variable", virtualp,
8597 memfn_quals != TYPE_UNQUALIFIED,
8598 inlinep, friendp, raises != NULL_TREE);
8600 if (ctype)
8602 DECL_CONTEXT (decl) = ctype;
8603 if (staticp == 1)
8605 pedwarn ("%<static%> may not be used when defining "
8606 "(as opposed to declaring) a static data member");
8607 staticp = 0;
8608 storage_class = sc_none;
8610 if (storage_class == sc_register && TREE_STATIC (decl))
8612 error ("static member %qD declared %<register%>", decl);
8613 storage_class = sc_none;
8615 if (storage_class == sc_extern && pedantic)
8617 pedwarn ("cannot explicitly declare member %q#D to have "
8618 "extern linkage",
8619 decl);
8620 storage_class = sc_none;
8625 /* Record `register' declaration for warnings on &
8626 and in case doing stupid register allocation. */
8628 if (storage_class == sc_register)
8629 DECL_REGISTER (decl) = 1;
8630 else if (storage_class == sc_extern)
8631 DECL_THIS_EXTERN (decl) = 1;
8632 else if (storage_class == sc_static)
8633 DECL_THIS_STATIC (decl) = 1;
8635 /* Record constancy and volatility. There's no need to do this
8636 when processing a template; we'll do this for the instantiated
8637 declaration based on the type of DECL. */
8638 if (!processing_template_decl)
8639 cp_apply_type_quals_to_decl (type_quals, decl);
8641 if (set_no_warning)
8642 TREE_NO_WARNING (decl) = 1;
8644 return decl;
8648 /* Subroutine of start_function. Ensure that each of the parameter
8649 types (as listed in PARMS) is complete, as is required for a
8650 function definition. */
8652 static void
8653 require_complete_types_for_parms (tree parms)
8655 for (; parms; parms = TREE_CHAIN (parms))
8657 if (dependent_type_p (TREE_TYPE (parms)))
8658 continue;
8659 if (!VOID_TYPE_P (TREE_TYPE (parms))
8660 && complete_type_or_else (TREE_TYPE (parms), parms))
8662 relayout_decl (parms);
8663 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8665 else
8666 /* grokparms or complete_type_or_else will have already issued
8667 an error. */
8668 TREE_TYPE (parms) = error_mark_node;
8672 /* Returns nonzero if T is a local variable. */
8675 local_variable_p (tree t)
8677 if ((TREE_CODE (t) == VAR_DECL
8678 /* A VAR_DECL with a context that is a _TYPE is a static data
8679 member. */
8680 && !TYPE_P (CP_DECL_CONTEXT (t))
8681 /* Any other non-local variable must be at namespace scope. */
8682 && !DECL_NAMESPACE_SCOPE_P (t))
8683 || (TREE_CODE (t) == PARM_DECL))
8684 return 1;
8686 return 0;
8689 /* Returns nonzero if T is an automatic local variable or a label.
8690 (These are the declarations that need to be remapped when the code
8691 containing them is duplicated.) */
8694 nonstatic_local_decl_p (tree t)
8696 return ((local_variable_p (t) && !TREE_STATIC (t))
8697 || TREE_CODE (t) == LABEL_DECL
8698 || TREE_CODE (t) == RESULT_DECL);
8701 /* Like local_variable_p, but suitable for use as a tree-walking
8702 function. */
8704 static tree
8705 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8706 void *data ATTRIBUTE_UNUSED)
8708 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8709 return *tp;
8710 else if (TYPE_P (*tp))
8711 *walk_subtrees = 0;
8713 return NULL_TREE;
8717 /* Check that ARG, which is a default-argument expression for a
8718 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8719 something goes wrong. DECL may also be a _TYPE node, rather than a
8720 DECL, if there is no DECL available. */
8722 tree
8723 check_default_argument (tree decl, tree arg)
8725 tree var;
8726 tree decl_type;
8728 if (TREE_CODE (arg) == DEFAULT_ARG)
8729 /* We get a DEFAULT_ARG when looking at an in-class declaration
8730 with a default argument. Ignore the argument for now; we'll
8731 deal with it after the class is complete. */
8732 return arg;
8734 if (TYPE_P (decl))
8736 decl_type = decl;
8737 decl = NULL_TREE;
8739 else
8740 decl_type = TREE_TYPE (decl);
8742 if (arg == error_mark_node
8743 || decl == error_mark_node
8744 || TREE_TYPE (arg) == error_mark_node
8745 || decl_type == error_mark_node)
8746 /* Something already went wrong. There's no need to check
8747 further. */
8748 return error_mark_node;
8750 /* [dcl.fct.default]
8752 A default argument expression is implicitly converted to the
8753 parameter type. */
8754 if (!TREE_TYPE (arg)
8755 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8757 if (decl)
8758 error ("default argument for %q#D has type %qT",
8759 decl, TREE_TYPE (arg));
8760 else
8761 error ("default argument for parameter of type %qT has type %qT",
8762 decl_type, TREE_TYPE (arg));
8764 return error_mark_node;
8767 /* [dcl.fct.default]
8769 Local variables shall not be used in default argument
8770 expressions.
8772 The keyword `this' shall not be used in a default argument of a
8773 member function. */
8774 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8775 NULL);
8776 if (var)
8778 error ("default argument %qE uses local variable %qD", arg, var);
8779 return error_mark_node;
8782 /* All is well. */
8783 return arg;
8786 /* Decode the list of parameter types for a function type.
8787 Given the list of things declared inside the parens,
8788 return a list of types.
8790 If this parameter does not end with an ellipsis, we append
8791 void_list_node.
8793 *PARMS is set to the chain of PARM_DECLs created. */
8795 static tree
8796 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8798 tree result = NULL_TREE;
8799 tree decls = NULL_TREE;
8800 int ellipsis = !first_parm || first_parm->ellipsis_p;
8801 cp_parameter_declarator *parm;
8802 int any_error = 0;
8804 for (parm = first_parm; parm != NULL; parm = parm->next)
8806 tree type = NULL_TREE;
8807 tree init = parm->default_argument;
8808 tree attrs;
8809 tree decl;
8811 if (parm == no_parameters)
8812 break;
8814 attrs = parm->decl_specifiers.attributes;
8815 parm->decl_specifiers.attributes = NULL_TREE;
8816 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8817 PARM, init != NULL_TREE, &attrs);
8818 if (! decl || TREE_TYPE (decl) == error_mark_node)
8819 continue;
8821 if (attrs)
8822 cplus_decl_attributes (&decl, attrs, 0);
8824 type = TREE_TYPE (decl);
8825 if (VOID_TYPE_P (type))
8827 if (same_type_p (type, void_type_node)
8828 && DECL_SELF_REFERENCE_P (type)
8829 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8830 /* this is a parmlist of `(void)', which is ok. */
8831 break;
8832 cxx_incomplete_type_error (decl, type);
8833 /* It's not a good idea to actually create parameters of
8834 type `void'; other parts of the compiler assume that a
8835 void type terminates the parameter list. */
8836 type = error_mark_node;
8837 TREE_TYPE (decl) = error_mark_node;
8840 if (type != error_mark_node)
8842 /* Top-level qualifiers on the parameters are
8843 ignored for function types. */
8844 type = cp_build_qualified_type (type, 0);
8845 if (TREE_CODE (type) == METHOD_TYPE)
8847 error ("parameter %qD invalidly declared method type", decl);
8848 type = build_pointer_type (type);
8849 TREE_TYPE (decl) = type;
8851 else if (abstract_virtuals_error (decl, type))
8852 any_error = 1; /* Seems like a good idea. */
8853 else if (POINTER_TYPE_P (type))
8855 /* [dcl.fct]/6, parameter types cannot contain pointers
8856 (references) to arrays of unknown bound. */
8857 tree t = TREE_TYPE (type);
8858 int ptr = TYPE_PTR_P (type);
8860 while (1)
8862 if (TYPE_PTR_P (t))
8863 ptr = 1;
8864 else if (TREE_CODE (t) != ARRAY_TYPE)
8865 break;
8866 else if (!TYPE_DOMAIN (t))
8867 break;
8868 t = TREE_TYPE (t);
8870 if (TREE_CODE (t) == ARRAY_TYPE)
8871 error ("parameter %qD includes %s to array of unknown "
8872 "bound %qT",
8873 decl, ptr ? "pointer" : "reference", t);
8876 if (any_error)
8877 init = NULL_TREE;
8878 else if (init && !processing_template_decl)
8879 init = check_default_argument (decl, init);
8882 TREE_CHAIN (decl) = decls;
8883 decls = decl;
8884 result = tree_cons (init, type, result);
8886 decls = nreverse (decls);
8887 result = nreverse (result);
8888 if (!ellipsis)
8889 result = chainon (result, void_list_node);
8890 *parms = decls;
8892 return result;
8896 /* D is a constructor or overloaded `operator='.
8898 Let T be the class in which D is declared. Then, this function
8899 returns:
8901 -1 if D's is an ill-formed constructor or copy assignment operator
8902 whose first parameter is of type `T'.
8903 0 if D is not a copy constructor or copy assignment
8904 operator.
8905 1 if D is a copy constructor or copy assignment operator whose
8906 first parameter is a reference to const qualified T.
8907 2 if D is a copy constructor or copy assignment operator whose
8908 first parameter is a reference to non-const qualified T.
8910 This function can be used as a predicate. Positive values indicate
8911 a copy constructor and nonzero values indicate a copy assignment
8912 operator. */
8915 copy_fn_p (tree d)
8917 tree args;
8918 tree arg_type;
8919 int result = 1;
8921 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8923 if (TREE_CODE (d) == TEMPLATE_DECL
8924 || (DECL_TEMPLATE_INFO (d)
8925 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
8926 /* Instantiations of template member functions are never copy
8927 functions. Note that member functions of templated classes are
8928 represented as template functions internally, and we must
8929 accept those as copy functions. */
8930 return 0;
8932 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8933 if (!args)
8934 return 0;
8936 arg_type = TREE_VALUE (args);
8937 if (arg_type == error_mark_node)
8938 return 0;
8940 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8942 /* Pass by value copy assignment operator. */
8943 result = -1;
8945 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8946 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8948 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8949 result = 2;
8951 else
8952 return 0;
8954 args = TREE_CHAIN (args);
8956 if (args && args != void_list_node && !TREE_PURPOSE (args))
8957 /* There are more non-optional args. */
8958 return 0;
8960 return result;
8963 /* Remember any special properties of member function DECL. */
8965 void grok_special_member_properties (tree decl)
8967 tree class_type;
8969 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8970 return;
8972 class_type = DECL_CONTEXT (decl);
8973 if (DECL_CONSTRUCTOR_P (decl))
8975 int ctor = copy_fn_p (decl);
8977 TYPE_HAS_CONSTRUCTOR (class_type) = 1;
8979 if (ctor > 0)
8981 /* [class.copy]
8983 A non-template constructor for class X is a copy
8984 constructor if its first parameter is of type X&, const
8985 X&, volatile X& or const volatile X&, and either there
8986 are no other parameters or else all other parameters have
8987 default arguments. */
8988 TYPE_HAS_INIT_REF (class_type) = 1;
8989 if (ctor > 1)
8990 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
8992 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8993 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
8995 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8997 /* [class.copy]
8999 A non-template assignment operator for class X is a copy
9000 assignment operator if its parameter is of type X, X&, const
9001 X&, volatile X& or const volatile X&. */
9003 int assop = copy_fn_p (decl);
9005 if (assop)
9007 TYPE_HAS_ASSIGN_REF (class_type) = 1;
9008 if (assop != 1)
9009 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9014 /* Check a constructor DECL has the correct form. Complains
9015 if the class has a constructor of the form X(X). */
9018 grok_ctor_properties (tree ctype, tree decl)
9020 int ctor_parm = copy_fn_p (decl);
9022 if (ctor_parm < 0)
9024 /* [class.copy]
9026 A declaration of a constructor for a class X is ill-formed if
9027 its first parameter is of type (optionally cv-qualified) X
9028 and either there are no other parameters or else all other
9029 parameters have default arguments.
9031 We *don't* complain about member template instantiations that
9032 have this form, though; they can occur as we try to decide
9033 what constructor to use during overload resolution. Since
9034 overload resolution will never prefer such a constructor to
9035 the non-template copy constructor (which is either explicitly
9036 or implicitly defined), there's no need to worry about their
9037 existence. Theoretically, they should never even be
9038 instantiated, but that's hard to forestall. */
9039 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
9040 ctype, ctype);
9041 return 0;
9044 return 1;
9047 /* An operator with this code is unary, but can also be binary. */
9049 static int
9050 ambi_op_p (enum tree_code code)
9052 return (code == INDIRECT_REF
9053 || code == ADDR_EXPR
9054 || code == UNARY_PLUS_EXPR
9055 || code == NEGATE_EXPR
9056 || code == PREINCREMENT_EXPR
9057 || code == PREDECREMENT_EXPR);
9060 /* An operator with this name can only be unary. */
9062 static int
9063 unary_op_p (enum tree_code code)
9065 return (code == TRUTH_NOT_EXPR
9066 || code == BIT_NOT_EXPR
9067 || code == COMPONENT_REF
9068 || code == TYPE_EXPR);
9071 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
9072 errors are issued for invalid declarations. */
9074 bool
9075 grok_op_properties (tree decl, bool complain)
9077 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9078 tree argtype;
9079 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9080 tree name = DECL_NAME (decl);
9081 enum tree_code operator_code;
9082 int arity;
9083 bool ellipsis_p;
9084 tree class_type;
9086 /* Count the number of arguments and check for ellipsis. */
9087 for (argtype = argtypes, arity = 0;
9088 argtype && argtype != void_list_node;
9089 argtype = TREE_CHAIN (argtype))
9090 ++arity;
9091 ellipsis_p = !argtype;
9093 class_type = DECL_CONTEXT (decl);
9094 if (class_type && !CLASS_TYPE_P (class_type))
9095 class_type = NULL_TREE;
9097 if (DECL_CONV_FN_P (decl))
9098 operator_code = TYPE_EXPR;
9099 else
9102 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9103 if (ansi_opname (CODE) == name) \
9105 operator_code = (CODE); \
9106 break; \
9108 else if (ansi_assopname (CODE) == name) \
9110 operator_code = (CODE); \
9111 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9112 break; \
9115 #include "operators.def"
9116 #undef DEF_OPERATOR
9118 gcc_unreachable ();
9120 while (0);
9121 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9122 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9124 if (class_type)
9125 switch (operator_code)
9127 case NEW_EXPR:
9128 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9129 break;
9131 case DELETE_EXPR:
9132 TYPE_GETS_DELETE (class_type) |= 1;
9133 break;
9135 case VEC_NEW_EXPR:
9136 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9137 break;
9139 case VEC_DELETE_EXPR:
9140 TYPE_GETS_DELETE (class_type) |= 2;
9141 break;
9143 default:
9144 break;
9147 /* [basic.std.dynamic.allocation]/1:
9149 A program is ill-formed if an allocation function is declared
9150 in a namespace scope other than global scope or declared static
9151 in global scope.
9153 The same also holds true for deallocation functions. */
9154 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9155 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9157 if (DECL_NAMESPACE_SCOPE_P (decl))
9159 if (CP_DECL_CONTEXT (decl) != global_namespace)
9161 error ("%qD may not be declared within a namespace", decl);
9162 return false;
9164 else if (!TREE_PUBLIC (decl))
9166 error ("%qD may not be declared as static", decl);
9167 return false;
9172 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9173 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9174 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9175 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9176 else
9178 /* An operator function must either be a non-static member function
9179 or have at least one parameter of a class, a reference to a class,
9180 an enumeration, or a reference to an enumeration. 13.4.0.6 */
9181 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9183 if (operator_code == TYPE_EXPR
9184 || operator_code == CALL_EXPR
9185 || operator_code == COMPONENT_REF
9186 || operator_code == ARRAY_REF
9187 || operator_code == NOP_EXPR)
9189 error ("%qD must be a nonstatic member function", decl);
9190 return false;
9192 else
9194 tree p;
9196 if (DECL_STATIC_FUNCTION_P (decl))
9198 error ("%qD must be either a non-static member "
9199 "function or a non-member function", decl);
9200 return false;
9203 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9205 tree arg = non_reference (TREE_VALUE (p));
9206 if (arg == error_mark_node)
9207 return false;
9209 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9210 because these checks are performed even on
9211 template functions. */
9212 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9213 break;
9216 if (!p || p == void_list_node)
9218 if (complain)
9219 error ("%qD must have an argument of class or "
9220 "enumerated type", decl);
9221 return false;
9226 /* There are no restrictions on the arguments to an overloaded
9227 "operator ()". */
9228 if (operator_code == CALL_EXPR)
9229 return true;
9231 /* Warn about conversion operators that will never be used. */
9232 if (IDENTIFIER_TYPENAME_P (name)
9233 && ! DECL_TEMPLATE_INFO (decl)
9234 && warn_conversion
9235 /* Warn only declaring the function; there is no need to
9236 warn again about out-of-class definitions. */
9237 && class_type == current_class_type)
9239 tree t = TREE_TYPE (name);
9240 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9241 const char *what = 0;
9243 if (ref)
9244 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9246 if (TREE_CODE (t) == VOID_TYPE)
9247 what = "void";
9248 else if (class_type)
9250 if (t == class_type)
9251 what = "the same type";
9252 /* Don't force t to be complete here. */
9253 else if (IS_AGGR_TYPE (t)
9254 && COMPLETE_TYPE_P (t)
9255 && DERIVED_FROM_P (t, class_type))
9256 what = "a base class";
9259 if (what)
9260 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9261 "conversion operator",
9262 ref ? "a reference to " : "", what);
9265 if (operator_code == COND_EXPR)
9267 /* 13.4.0.3 */
9268 error ("ISO C++ prohibits overloading operator ?:");
9269 return false;
9271 else if (ellipsis_p)
9273 error ("%qD must not have variable number of arguments", decl);
9274 return false;
9276 else if (ambi_op_p (operator_code))
9278 if (arity == 1)
9279 /* We pick the one-argument operator codes by default, so
9280 we don't have to change anything. */
9282 else if (arity == 2)
9284 /* If we thought this was a unary operator, we now know
9285 it to be a binary operator. */
9286 switch (operator_code)
9288 case INDIRECT_REF:
9289 operator_code = MULT_EXPR;
9290 break;
9292 case ADDR_EXPR:
9293 operator_code = BIT_AND_EXPR;
9294 break;
9296 case UNARY_PLUS_EXPR:
9297 operator_code = PLUS_EXPR;
9298 break;
9300 case NEGATE_EXPR:
9301 operator_code = MINUS_EXPR;
9302 break;
9304 case PREINCREMENT_EXPR:
9305 operator_code = POSTINCREMENT_EXPR;
9306 break;
9308 case PREDECREMENT_EXPR:
9309 operator_code = POSTDECREMENT_EXPR;
9310 break;
9312 default:
9313 gcc_unreachable ();
9316 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9318 if ((operator_code == POSTINCREMENT_EXPR
9319 || operator_code == POSTDECREMENT_EXPR)
9320 && ! processing_template_decl
9321 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9323 if (methodp)
9324 error ("postfix %qD must take %<int%> as its argument",
9325 decl);
9326 else
9327 error ("postfix %qD must take %<int%> as its second "
9328 "argument", decl);
9329 return false;
9332 else
9334 if (methodp)
9335 error ("%qD must take either zero or one argument", decl);
9336 else
9337 error ("%qD must take either one or two arguments", decl);
9338 return false;
9341 /* More Effective C++ rule 6. */
9342 if (warn_ecpp
9343 && (operator_code == POSTINCREMENT_EXPR
9344 || operator_code == POSTDECREMENT_EXPR
9345 || operator_code == PREINCREMENT_EXPR
9346 || operator_code == PREDECREMENT_EXPR))
9348 tree arg = TREE_VALUE (argtypes);
9349 tree ret = TREE_TYPE (TREE_TYPE (decl));
9350 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9351 arg = TREE_TYPE (arg);
9352 arg = TYPE_MAIN_VARIANT (arg);
9353 if (operator_code == PREINCREMENT_EXPR
9354 || operator_code == PREDECREMENT_EXPR)
9356 if (TREE_CODE (ret) != REFERENCE_TYPE
9357 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9358 arg))
9359 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9360 build_reference_type (arg));
9362 else
9364 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9365 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9369 else if (unary_op_p (operator_code))
9371 if (arity != 1)
9373 if (methodp)
9374 error ("%qD must take %<void%>", decl);
9375 else
9376 error ("%qD must take exactly one argument", decl);
9377 return false;
9380 else /* if (binary_op_p (operator_code)) */
9382 if (arity != 2)
9384 if (methodp)
9385 error ("%qD must take exactly one argument", decl);
9386 else
9387 error ("%qD must take exactly two arguments", decl);
9388 return false;
9391 /* More Effective C++ rule 7. */
9392 if (warn_ecpp
9393 && (operator_code == TRUTH_ANDIF_EXPR
9394 || operator_code == TRUTH_ORIF_EXPR
9395 || operator_code == COMPOUND_EXPR))
9396 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9397 decl);
9400 /* Effective C++ rule 23. */
9401 if (warn_ecpp
9402 && arity == 2
9403 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9404 && (operator_code == PLUS_EXPR
9405 || operator_code == MINUS_EXPR
9406 || operator_code == TRUNC_DIV_EXPR
9407 || operator_code == MULT_EXPR
9408 || operator_code == TRUNC_MOD_EXPR)
9409 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9410 warning (OPT_Weffc__, "%qD should return by value", decl);
9412 /* [over.oper]/8 */
9413 for (; argtypes && argtypes != void_list_node;
9414 argtypes = TREE_CHAIN (argtypes))
9415 if (TREE_PURPOSE (argtypes))
9417 TREE_PURPOSE (argtypes) = NULL_TREE;
9418 if (operator_code == POSTINCREMENT_EXPR
9419 || operator_code == POSTDECREMENT_EXPR)
9421 if (pedantic)
9422 pedwarn ("%qD cannot have default arguments", decl);
9424 else
9426 error ("%qD cannot have default arguments", decl);
9427 return false;
9431 return true;
9434 /* Return a string giving the keyword associate with CODE. */
9436 static const char *
9437 tag_name (enum tag_types code)
9439 switch (code)
9441 case record_type:
9442 return "struct";
9443 case class_type:
9444 return "class";
9445 case union_type:
9446 return "union";
9447 case enum_type:
9448 return "enum";
9449 case typename_type:
9450 return "typename";
9451 default:
9452 gcc_unreachable ();
9456 /* Name lookup in an elaborated-type-specifier (after the keyword
9457 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
9458 elaborated-type-specifier is invalid, issue a diagnostic and return
9459 error_mark_node; otherwise, return the *_TYPE to which it referred.
9460 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
9462 tree
9463 check_elaborated_type_specifier (enum tag_types tag_code,
9464 tree decl,
9465 bool allow_template_p)
9467 tree type;
9469 /* In the case of:
9471 struct S { struct S *p; };
9473 name lookup will find the TYPE_DECL for the implicit "S::S"
9474 typedef. Adjust for that here. */
9475 if (DECL_SELF_REFERENCE_P (decl))
9476 decl = TYPE_NAME (TREE_TYPE (decl));
9478 type = TREE_TYPE (decl);
9480 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9481 is false for this case as well. */
9482 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9484 error ("using template type parameter %qT after %qs",
9485 type, tag_name (tag_code));
9486 return error_mark_node;
9488 /* [dcl.type.elab]
9490 If the identifier resolves to a typedef-name or a template
9491 type-parameter, the elaborated-type-specifier is ill-formed.
9493 In other words, the only legitimate declaration to use in the
9494 elaborated type specifier is the implicit typedef created when
9495 the type is declared. */
9496 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9497 && tag_code != typename_type)
9499 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9500 error ("%q+D has a previous declaration here", decl);
9501 return error_mark_node;
9503 else if (TREE_CODE (type) != RECORD_TYPE
9504 && TREE_CODE (type) != UNION_TYPE
9505 && tag_code != enum_type
9506 && tag_code != typename_type)
9508 error ("%qT referred to as %qs", type, tag_name (tag_code));
9509 error ("%q+T has a previous declaration here", type);
9510 return error_mark_node;
9512 else if (TREE_CODE (type) != ENUMERAL_TYPE
9513 && tag_code == enum_type)
9515 error ("%qT referred to as enum", type);
9516 error ("%q+T has a previous declaration here", type);
9517 return error_mark_node;
9519 else if (!allow_template_p
9520 && TREE_CODE (type) == RECORD_TYPE
9521 && CLASSTYPE_IS_TEMPLATE (type))
9523 /* If a class template appears as elaborated type specifier
9524 without a template header such as:
9526 template <class T> class C {};
9527 void f(class C); // No template header here
9529 then the required template argument is missing. */
9530 error ("template argument required for %<%s %T%>",
9531 tag_name (tag_code),
9532 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9533 return error_mark_node;
9536 return type;
9539 /* Lookup NAME in elaborate type specifier in scope according to
9540 SCOPE and issue diagnostics if necessary.
9541 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9542 found, and ERROR_MARK_NODE for type error. */
9544 static tree
9545 lookup_and_check_tag (enum tag_types tag_code, tree name,
9546 tag_scope scope, bool template_header_p)
9548 tree t;
9549 tree decl;
9550 if (scope == ts_global)
9552 /* First try ordinary name lookup, ignoring hidden class name
9553 injected via friend declaration. */
9554 decl = lookup_name_prefer_type (name, 2);
9555 /* If that fails, the name will be placed in the smallest
9556 non-class, non-function-prototype scope according to 3.3.1/5.
9557 We may already have a hidden name declared as friend in this
9558 scope. So lookup again but not ignoring hidden names.
9559 If we find one, that name will be made visible rather than
9560 creating a new tag. */
9561 if (!decl)
9562 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9564 else
9565 decl = lookup_type_scope (name, scope);
9567 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9568 decl = DECL_TEMPLATE_RESULT (decl);
9570 if (decl && TREE_CODE (decl) == TYPE_DECL)
9572 /* Look for invalid nested type:
9573 class C {
9574 class C {};
9575 }; */
9576 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9578 error ("%qD has the same name as the class in which it is "
9579 "declared",
9580 decl);
9581 return error_mark_node;
9584 /* Two cases we need to consider when deciding if a class
9585 template is allowed as an elaborated type specifier:
9586 1. It is a self reference to its own class.
9587 2. It comes with a template header.
9589 For example:
9591 template <class T> class C {
9592 class C *c1; // DECL_SELF_REFERENCE_P is true
9593 class D;
9595 template <class U> class C; // template_header_p is true
9596 template <class T> class C<T>::D {
9597 class C *c2; // DECL_SELF_REFERENCE_P is true
9598 }; */
9600 t = check_elaborated_type_specifier (tag_code,
9601 decl,
9602 template_header_p
9603 | DECL_SELF_REFERENCE_P (decl));
9604 return t;
9606 else
9607 return NULL_TREE;
9610 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9611 Define the tag as a forward-reference if it is not defined.
9613 If a declaration is given, process it here, and report an error if
9614 multiple declarations are not identical.
9616 SCOPE is TS_CURRENT when this is also a definition. Only look in
9617 the current frame for the name (since C++ allows new names in any
9618 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9619 declaration. Only look beginning from the current scope outward up
9620 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9622 TEMPLATE_HEADER_P is true when this declaration is preceded by
9623 a set of template parameters. */
9625 tree
9626 xref_tag (enum tag_types tag_code, tree name,
9627 tag_scope scope, bool template_header_p)
9629 enum tree_code code;
9630 tree t;
9631 tree context = NULL_TREE;
9633 timevar_push (TV_NAME_LOOKUP);
9635 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9637 switch (tag_code)
9639 case record_type:
9640 case class_type:
9641 code = RECORD_TYPE;
9642 break;
9643 case union_type:
9644 code = UNION_TYPE;
9645 break;
9646 case enum_type:
9647 code = ENUMERAL_TYPE;
9648 break;
9649 default:
9650 gcc_unreachable ();
9653 /* In case of anonymous name, xref_tag is only called to
9654 make type node and push name. Name lookup is not required. */
9655 if (ANON_AGGRNAME_P (name))
9656 t = NULL_TREE;
9657 else
9658 t = lookup_and_check_tag (tag_code, name,
9659 scope, template_header_p);
9661 if (t == error_mark_node)
9662 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9664 if (scope != ts_current && t && current_class_type
9665 && template_class_depth (current_class_type)
9666 && template_header_p)
9668 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9669 definition of this tag. Since, in addition, we are currently
9670 processing a (member) template declaration of a template
9671 class, we must be very careful; consider:
9673 template <class X>
9674 struct S1
9676 template <class U>
9677 struct S2
9678 { template <class V>
9679 friend struct S1; };
9681 Here, the S2::S1 declaration should not be confused with the
9682 outer declaration. In particular, the inner version should
9683 have a template parameter of level 2, not level 1. This
9684 would be particularly important if the member declaration
9685 were instead:
9687 template <class V = U> friend struct S1;
9689 say, when we should tsubst into `U' when instantiating
9690 S2. On the other hand, when presented with:
9692 template <class T>
9693 struct S1 {
9694 template <class U>
9695 struct S2 {};
9696 template <class U>
9697 friend struct S2;
9700 we must find the inner binding eventually. We
9701 accomplish this by making sure that the new type we
9702 create to represent this declaration has the right
9703 TYPE_CONTEXT. */
9704 context = TYPE_CONTEXT (t);
9705 t = NULL_TREE;
9708 if (! t)
9710 /* If no such tag is yet defined, create a forward-reference node
9711 and record it as the "definition".
9712 When a real declaration of this type is found,
9713 the forward-reference will be altered into a real type. */
9714 if (code == ENUMERAL_TYPE)
9716 error ("use of enum %q#D without previous declaration", name);
9717 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9719 else
9721 t = make_aggr_type (code);
9722 TYPE_CONTEXT (t) = context;
9723 t = pushtag (name, t, scope);
9726 else
9728 if (template_header_p && IS_AGGR_TYPE (t))
9730 if (!redeclare_class_template (t, current_template_parms))
9731 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9733 else if (!processing_template_decl
9734 && CLASS_TYPE_P (t)
9735 && CLASSTYPE_IS_TEMPLATE (t))
9737 error ("redeclaration of %qT as a non-template", t);
9738 error ("previous declaration %q+D", t);
9739 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9742 /* Make injected friend class visible. */
9743 if (scope != ts_within_enclosing_non_class
9744 && hidden_name_p (TYPE_NAME (t)))
9746 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9747 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9749 if (TYPE_TEMPLATE_INFO (t))
9751 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9752 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9757 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9760 tree
9761 xref_tag_from_type (tree old, tree id, tag_scope scope)
9763 enum tag_types tag_kind;
9765 if (TREE_CODE (old) == RECORD_TYPE)
9766 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9767 else
9768 tag_kind = union_type;
9770 if (id == NULL_TREE)
9771 id = TYPE_IDENTIFIER (old);
9773 return xref_tag (tag_kind, id, scope, false);
9776 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9777 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9778 access_* node, and the TREE_VALUE is the type of the base-class.
9779 Non-NULL TREE_TYPE indicates virtual inheritance.
9781 Returns true if the binfo hierarchy was successfully created,
9782 false if an error was detected. */
9784 bool
9785 xref_basetypes (tree ref, tree base_list)
9787 tree *basep;
9788 tree binfo, base_binfo;
9789 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9790 unsigned max_bases = 0; /* Maximum direct bases. */
9791 int i;
9792 tree default_access;
9793 tree igo_prev; /* Track Inheritance Graph Order. */
9795 if (ref == error_mark_node)
9796 return false;
9798 /* The base of a derived class is private by default, all others are
9799 public. */
9800 default_access = (TREE_CODE (ref) == RECORD_TYPE
9801 && CLASSTYPE_DECLARED_CLASS (ref)
9802 ? access_private_node : access_public_node);
9804 /* First, make sure that any templates in base-classes are
9805 instantiated. This ensures that if we call ourselves recursively
9806 we do not get confused about which classes are marked and which
9807 are not. */
9808 basep = &base_list;
9809 while (*basep)
9811 tree basetype = TREE_VALUE (*basep);
9813 if (!(processing_template_decl && uses_template_parms (basetype))
9814 && !complete_type_or_else (basetype, NULL))
9815 /* An incomplete type. Remove it from the list. */
9816 *basep = TREE_CHAIN (*basep);
9817 else
9819 max_bases++;
9820 if (TREE_TYPE (*basep))
9821 max_vbases++;
9822 if (CLASS_TYPE_P (basetype))
9823 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9824 basep = &TREE_CHAIN (*basep);
9828 TYPE_MARKED_P (ref) = 1;
9830 /* The binfo slot should be empty, unless this is an (ill-formed)
9831 redefinition. */
9832 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9833 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9835 binfo = make_tree_binfo (max_bases);
9837 TYPE_BINFO (ref) = binfo;
9838 BINFO_OFFSET (binfo) = size_zero_node;
9839 BINFO_TYPE (binfo) = ref;
9841 if (max_bases)
9843 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9844 /* An aggregate cannot have baseclasses. */
9845 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9847 if (TREE_CODE (ref) == UNION_TYPE)
9849 error ("derived union %qT invalid", ref);
9850 return false;
9854 if (max_bases > 1)
9856 if (TYPE_FOR_JAVA (ref))
9858 error ("Java class %qT cannot have multiple bases", ref);
9859 return false;
9863 if (max_vbases)
9865 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9867 if (TYPE_FOR_JAVA (ref))
9869 error ("Java class %qT cannot have virtual bases", ref);
9870 return false;
9874 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9876 tree access = TREE_PURPOSE (base_list);
9877 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9878 tree basetype = TREE_VALUE (base_list);
9880 if (access == access_default_node)
9881 access = default_access;
9883 if (TREE_CODE (basetype) == TYPE_DECL)
9884 basetype = TREE_TYPE (basetype);
9885 if (TREE_CODE (basetype) != RECORD_TYPE
9886 && TREE_CODE (basetype) != TYPENAME_TYPE
9887 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9888 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9890 error ("base type %qT fails to be a struct or class type",
9891 basetype);
9892 return false;
9895 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9896 TYPE_FOR_JAVA (ref) = 1;
9898 base_binfo = NULL_TREE;
9899 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9901 base_binfo = TYPE_BINFO (basetype);
9902 /* The original basetype could have been a typedef'd type. */
9903 basetype = BINFO_TYPE (base_binfo);
9905 /* Inherit flags from the base. */
9906 TYPE_HAS_NEW_OPERATOR (ref)
9907 |= TYPE_HAS_NEW_OPERATOR (basetype);
9908 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9909 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9910 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9911 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9912 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9913 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9914 CLASSTYPE_REPEATED_BASE_P (ref)
9915 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9918 /* We must do this test after we've seen through a typedef
9919 type. */
9920 if (TYPE_MARKED_P (basetype))
9922 if (basetype == ref)
9923 error ("recursive type %qT undefined", basetype);
9924 else
9925 error ("duplicate base type %qT invalid", basetype);
9926 return false;
9928 TYPE_MARKED_P (basetype) = 1;
9930 base_binfo = copy_binfo (base_binfo, basetype, ref,
9931 &igo_prev, via_virtual);
9932 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9933 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9935 BINFO_BASE_APPEND (binfo, base_binfo);
9936 BINFO_BASE_ACCESS_APPEND (binfo, access);
9939 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9940 /* If we have space in the vbase vector, we must have shared at
9941 least one of them, and are therefore diamond shaped. */
9942 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9944 /* Unmark all the types. */
9945 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9946 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9947 TYPE_MARKED_P (ref) = 0;
9949 /* Now see if we have a repeated base type. */
9950 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9952 for (base_binfo = binfo; base_binfo;
9953 base_binfo = TREE_CHAIN (base_binfo))
9955 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9957 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9958 break;
9960 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9962 for (base_binfo = binfo; base_binfo;
9963 base_binfo = TREE_CHAIN (base_binfo))
9964 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9965 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9966 else
9967 break;
9970 return true;
9974 /* Begin compiling the definition of an enumeration type.
9975 NAME is its name.
9976 Returns the type object, as yet incomplete.
9977 Also records info about it so that build_enumerator
9978 may be used to declare the individual values as they are read. */
9980 tree
9981 start_enum (tree name)
9983 tree enumtype;
9985 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9987 /* If this is the real definition for a previous forward reference,
9988 fill in the contents in the same object that used to be the
9989 forward reference. */
9991 enumtype = lookup_and_check_tag (enum_type, name,
9992 /*tag_scope=*/ts_current,
9993 /*template_header_p=*/false);
9995 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9997 error ("multiple definition of %q#T", enumtype);
9998 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9999 /* Clear out TYPE_VALUES, and start again. */
10000 TYPE_VALUES (enumtype) = NULL_TREE;
10002 else
10004 /* In case of error, make a dummy enum to allow parsing to
10005 continue. */
10006 if (enumtype == error_mark_node)
10007 name = make_anon_name ();
10009 enumtype = make_node (ENUMERAL_TYPE);
10010 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
10013 return enumtype;
10016 /* After processing and defining all the values of an enumeration type,
10017 install their decls in the enumeration type and finish it off.
10018 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
10020 void
10021 finish_enum (tree enumtype)
10023 tree values;
10024 tree decl;
10025 tree value;
10026 tree minnode;
10027 tree maxnode;
10028 tree t;
10029 bool unsignedp;
10030 bool use_short_enum;
10031 int lowprec;
10032 int highprec;
10033 int precision;
10034 integer_type_kind itk;
10035 tree underlying_type = NULL_TREE;
10037 /* We built up the VALUES in reverse order. */
10038 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10040 /* For an enum defined in a template, just set the type of the values;
10041 all further processing is postponed until the template is
10042 instantiated. We need to set the type so that tsubst of a CONST_DECL
10043 works. */
10044 if (processing_template_decl)
10046 for (values = TYPE_VALUES (enumtype);
10047 values;
10048 values = TREE_CHAIN (values))
10049 TREE_TYPE (TREE_VALUE (values)) = enumtype;
10050 if (at_function_scope_p ())
10051 add_stmt (build_min (TAG_DEFN, enumtype));
10052 return;
10055 /* Determine the minimum and maximum values of the enumerators. */
10056 if (TYPE_VALUES (enumtype))
10058 minnode = maxnode = NULL_TREE;
10060 for (values = TYPE_VALUES (enumtype);
10061 values;
10062 values = TREE_CHAIN (values))
10064 decl = TREE_VALUE (values);
10066 /* [dcl.enum]: Following the closing brace of an enum-specifier,
10067 each enumerator has the type of its enumeration. Prior to the
10068 closing brace, the type of each enumerator is the type of its
10069 initializing value. */
10070 TREE_TYPE (decl) = enumtype;
10072 /* Update the minimum and maximum values, if appropriate. */
10073 value = DECL_INITIAL (decl);
10074 if (value == error_mark_node)
10075 value = integer_zero_node;
10076 /* Figure out what the minimum and maximum values of the
10077 enumerators are. */
10078 if (!minnode)
10079 minnode = maxnode = value;
10080 else if (tree_int_cst_lt (maxnode, value))
10081 maxnode = value;
10082 else if (tree_int_cst_lt (value, minnode))
10083 minnode = value;
10086 else
10087 /* [dcl.enum]
10089 If the enumerator-list is empty, the underlying type is as if
10090 the enumeration had a single enumerator with value 0. */
10091 minnode = maxnode = integer_zero_node;
10093 /* Compute the number of bits require to represent all values of the
10094 enumeration. We must do this before the type of MINNODE and
10095 MAXNODE are transformed, since min_precision relies on the
10096 TREE_TYPE of the value it is passed. */
10097 unsignedp = tree_int_cst_sgn (minnode) >= 0;
10098 lowprec = min_precision (minnode, unsignedp);
10099 highprec = min_precision (maxnode, unsignedp);
10100 precision = MAX (lowprec, highprec);
10102 /* Determine the underlying type of the enumeration.
10104 [dcl.enum]
10106 The underlying type of an enumeration is an integral type that
10107 can represent all the enumerator values defined in the
10108 enumeration. It is implementation-defined which integral type is
10109 used as the underlying type for an enumeration except that the
10110 underlying type shall not be larger than int unless the value of
10111 an enumerator cannot fit in an int or unsigned int.
10113 We use "int" or an "unsigned int" as the underlying type, even if
10114 a smaller integral type would work, unless the user has
10115 explicitly requested that we use the smallest possible type. The
10116 user can request that for all enumerations with a command line
10117 flag, or for just one enumeration with an attribute. */
10119 use_short_enum = flag_short_enums
10120 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
10122 for (itk = (use_short_enum ? itk_char : itk_int);
10123 itk != itk_none;
10124 itk++)
10126 underlying_type = integer_types[itk];
10127 if (TYPE_PRECISION (underlying_type) >= precision
10128 && TYPE_UNSIGNED (underlying_type) == unsignedp)
10129 break;
10131 if (itk == itk_none)
10133 /* DR 377
10135 IF no integral type can represent all the enumerator values, the
10136 enumeration is ill-formed. */
10137 error ("no integral type can represent all of the enumerator values "
10138 "for %qT", enumtype);
10139 precision = TYPE_PRECISION (long_long_integer_type_node);
10140 underlying_type = integer_types[itk_unsigned_long_long];
10143 /* Compute the minium and maximum values for the type.
10145 [dcl.enum]
10147 For an enumeration where emin is the smallest enumerator and emax
10148 is the largest, the values of the enumeration are the values of the
10149 underlying type in the range bmin to bmax, where bmin and bmax are,
10150 respectively, the smallest and largest values of the smallest bit-
10151 field that can store emin and emax. */
10153 /* The middle-end currently assumes that types with TYPE_PRECISION
10154 narrower than their underlying type are suitably zero or sign
10155 extended to fill their mode. g++ doesn't make these guarantees.
10156 Until the middle-end can represent such paradoxical types, we
10157 set the TYPE_PRECISION to the width of the underlying type. */
10158 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10160 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10162 /* [dcl.enum]
10164 The value of sizeof() applied to an enumeration type, an object
10165 of an enumeration type, or an enumerator, is the value of sizeof()
10166 applied to the underlying type. */
10167 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10168 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10169 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10170 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10171 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10172 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10174 /* Convert each of the enumerators to the type of the underlying
10175 type of the enumeration. */
10176 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10178 location_t saved_location;
10180 decl = TREE_VALUE (values);
10181 saved_location = input_location;
10182 input_location = DECL_SOURCE_LOCATION (decl);
10183 value = perform_implicit_conversion (underlying_type,
10184 DECL_INITIAL (decl));
10185 input_location = saved_location;
10187 /* Do not clobber shared ints. */
10188 value = copy_node (value);
10190 TREE_TYPE (value) = enumtype;
10191 DECL_INITIAL (decl) = value;
10192 TREE_VALUE (values) = value;
10195 /* Fix up all variant types of this enum type. */
10196 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10198 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10199 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10200 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10201 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10202 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10203 TYPE_MODE (t) = TYPE_MODE (enumtype);
10204 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10205 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10206 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10207 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10210 /* Finish debugging output for this type. */
10211 rest_of_type_compilation (enumtype, namespace_bindings_p ());
10214 /* Build and install a CONST_DECL for an enumeration constant of the
10215 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10216 Assignment of sequential values by default is handled here. */
10218 void
10219 build_enumerator (tree name, tree value, tree enumtype)
10221 tree decl;
10222 tree context;
10223 tree type;
10225 /* If the VALUE was erroneous, pretend it wasn't there; that will
10226 result in the enum being assigned the next value in sequence. */
10227 if (value == error_mark_node)
10228 value = NULL_TREE;
10230 /* Remove no-op casts from the value. */
10231 if (value)
10232 STRIP_TYPE_NOPS (value);
10234 if (! processing_template_decl)
10236 /* Validate and default VALUE. */
10237 if (value != NULL_TREE)
10239 value = integral_constant_value (value);
10241 if (TREE_CODE (value) == INTEGER_CST)
10243 value = perform_integral_promotions (value);
10244 constant_expression_warning (value);
10246 else
10248 error ("enumerator value for %qD not integer constant", name);
10249 value = NULL_TREE;
10253 /* Default based on previous value. */
10254 if (value == NULL_TREE)
10256 if (TYPE_VALUES (enumtype))
10258 HOST_WIDE_INT hi;
10259 unsigned HOST_WIDE_INT lo;
10260 tree prev_value;
10261 bool overflowed;
10263 /* The next value is the previous value plus one. We can
10264 safely assume that the previous value is an INTEGER_CST.
10265 add_double doesn't know the type of the target expression,
10266 so we must check with int_fits_type_p as well. */
10267 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10268 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10269 TREE_INT_CST_HIGH (prev_value),
10270 1, 0, &lo, &hi);
10271 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10272 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10274 if (overflowed)
10276 error ("overflow in enumeration values at %qD", name);
10277 value = error_mark_node;
10280 else
10281 value = integer_zero_node;
10284 /* Remove no-op casts from the value. */
10285 STRIP_TYPE_NOPS (value);
10288 /* C++ associates enums with global, function, or class declarations. */
10289 context = current_scope ();
10291 /* Build the actual enumeration constant. Note that the enumeration
10292 constants have the type of their initializers until the
10293 enumeration is complete:
10295 [ dcl.enum ]
10297 Following the closing brace of an enum-specifier, each enumer-
10298 ator has the type of its enumeration. Prior to the closing
10299 brace, the type of each enumerator is the type of its
10300 initializing value.
10302 In finish_enum we will reset the type. Of course, if we're
10303 processing a template, there may be no value. */
10304 type = value ? TREE_TYPE (value) : NULL_TREE;
10306 if (context && context == current_class_type)
10307 /* This enum declaration is local to the class. We need the full
10308 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
10309 decl = build_lang_decl (CONST_DECL, name, type);
10310 else
10311 /* It's a global enum, or it's local to a function. (Note local to
10312 a function could mean local to a class method. */
10313 decl = build_decl (CONST_DECL, name, type);
10315 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10316 TREE_CONSTANT (decl) = 1;
10317 TREE_INVARIANT (decl) = 1;
10318 TREE_READONLY (decl) = 1;
10319 DECL_INITIAL (decl) = value;
10321 if (context && context == current_class_type)
10322 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10323 on the TYPE_FIELDS list for `S'. (That's so that you can say
10324 things like `S::i' later.) */
10325 finish_member_declaration (decl);
10326 else
10327 pushdecl (decl);
10329 /* Add this enumeration constant to the list for this type. */
10330 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10334 /* We're defining DECL. Make sure that it's type is OK. */
10336 static void
10337 check_function_type (tree decl, tree current_function_parms)
10339 tree fntype = TREE_TYPE (decl);
10340 tree return_type = complete_type (TREE_TYPE (fntype));
10342 /* In a function definition, arg types must be complete. */
10343 require_complete_types_for_parms (current_function_parms);
10345 if (dependent_type_p (return_type))
10346 return;
10347 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10349 tree args = TYPE_ARG_TYPES (fntype);
10351 error ("return type %q#T is incomplete", return_type);
10353 /* Make it return void instead. */
10354 if (TREE_CODE (fntype) == METHOD_TYPE)
10355 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10356 void_type_node,
10357 TREE_CHAIN (args));
10358 else
10359 fntype = build_function_type (void_type_node, args);
10360 TREE_TYPE (decl)
10361 = build_exception_variant (fntype,
10362 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10364 else
10365 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10368 /* Create the FUNCTION_DECL for a function definition.
10369 DECLSPECS and DECLARATOR are the parts of the declaration;
10370 they describe the function's name and the type it returns,
10371 but twisted together in a fashion that parallels the syntax of C.
10373 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10374 DECLARATOR is really the DECL for the function we are about to
10375 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10376 indicating that the function is an inline defined in-class.
10378 This function creates a binding context for the function body
10379 as well as setting up the FUNCTION_DECL in current_function_decl.
10381 For C++, we must first check whether that datum makes any sense.
10382 For example, "class A local_a(1,2);" means that variable local_a
10383 is an aggregate of type A, which should have a constructor
10384 applied to it with the argument list [1, 2].
10386 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
10387 or may be a BLOCK if the function has been defined previously
10388 in this translation unit. On exit, DECL_INITIAL (decl1) will be
10389 error_mark_node if the function has never been defined, or
10390 a BLOCK if the function has been defined somewhere. */
10392 void
10393 start_preparsed_function (tree decl1, tree attrs, int flags)
10395 tree ctype = NULL_TREE;
10396 tree fntype;
10397 tree restype;
10398 int doing_friend = 0;
10399 struct cp_binding_level *bl;
10400 tree current_function_parms;
10401 struct c_fileinfo *finfo
10402 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
10403 bool honor_interface;
10405 /* Sanity check. */
10406 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10407 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10409 fntype = TREE_TYPE (decl1);
10410 if (TREE_CODE (fntype) == METHOD_TYPE)
10411 ctype = TYPE_METHOD_BASETYPE (fntype);
10413 /* ISO C++ 11.4/5. A friend function defined in a class is in
10414 the (lexical) scope of the class in which it is defined. */
10415 if (!ctype && DECL_FRIEND_P (decl1))
10417 ctype = DECL_FRIEND_CONTEXT (decl1);
10419 /* CTYPE could be null here if we're dealing with a template;
10420 for example, `inline friend float foo()' inside a template
10421 will have no CTYPE set. */
10422 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10423 ctype = NULL_TREE;
10424 else
10425 doing_friend = 1;
10428 if (DECL_DECLARED_INLINE_P (decl1)
10429 && lookup_attribute ("noinline", attrs))
10430 warning (0, "inline function %q+D given attribute noinline", decl1);
10432 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10433 /* This is a constructor, we must ensure that any default args
10434 introduced by this definition are propagated to the clones
10435 now. The clones are used directly in overload resolution. */
10436 adjust_clone_args (decl1);
10438 /* Sometimes we don't notice that a function is a static member, and
10439 build a METHOD_TYPE for it. Fix that up now. */
10440 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10441 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10443 revert_static_member_fn (decl1);
10444 ctype = NULL_TREE;
10447 /* Set up current_class_type, and enter the scope of the class, if
10448 appropriate. */
10449 if (ctype)
10450 push_nested_class (ctype);
10451 else if (DECL_STATIC_FUNCTION_P (decl1))
10452 push_nested_class (DECL_CONTEXT (decl1));
10454 /* Now that we have entered the scope of the class, we must restore
10455 the bindings for any template parameters surrounding DECL1, if it
10456 is an inline member template. (Order is important; consider the
10457 case where a template parameter has the same name as a field of
10458 the class.) It is not until after this point that
10459 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
10460 if (flags & SF_INCLASS_INLINE)
10461 maybe_begin_member_template_processing (decl1);
10463 /* Effective C++ rule 15. */
10464 if (warn_ecpp
10465 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10466 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10467 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
10469 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10470 error_mark_node is replaced below (in poplevel) with the BLOCK. */
10471 if (!DECL_INITIAL (decl1))
10472 DECL_INITIAL (decl1) = error_mark_node;
10474 /* This function exists in static storage.
10475 (This does not mean `static' in the C sense!) */
10476 TREE_STATIC (decl1) = 1;
10478 /* We must call push_template_decl after current_class_type is set
10479 up. (If we are processing inline definitions after exiting a
10480 class scope, current_class_type will be NULL_TREE until set above
10481 by push_nested_class.) */
10482 if (processing_template_decl)
10484 /* FIXME: Handle error_mark_node more gracefully. */
10485 tree newdecl1 = push_template_decl (decl1);
10486 if (newdecl1 != error_mark_node)
10487 decl1 = newdecl1;
10490 /* We are now in the scope of the function being defined. */
10491 current_function_decl = decl1;
10493 /* Save the parm names or decls from this function's declarator
10494 where store_parm_decls will find them. */
10495 current_function_parms = DECL_ARGUMENTS (decl1);
10497 /* Make sure the parameter and return types are reasonable. When
10498 you declare a function, these types can be incomplete, but they
10499 must be complete when you define the function. */
10500 check_function_type (decl1, current_function_parms);
10502 /* Build the return declaration for the function. */
10503 restype = TREE_TYPE (fntype);
10504 /* Promote the value to int before returning it. */
10505 if (c_promoting_integer_type_p (restype))
10506 restype = type_promotes_to (restype);
10507 if (DECL_RESULT (decl1) == NULL_TREE)
10509 tree resdecl;
10511 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10512 DECL_ARTIFICIAL (resdecl) = 1;
10513 DECL_IGNORED_P (resdecl) = 1;
10514 DECL_RESULT (decl1) = resdecl;
10516 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10519 /* Let the user know we're compiling this function. */
10520 announce_function (decl1);
10522 /* Record the decl so that the function name is defined.
10523 If we already have a decl for this name, and it is a FUNCTION_DECL,
10524 use the old decl. */
10525 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10527 /* A specialization is not used to guide overload resolution. */
10528 if (!DECL_FUNCTION_MEMBER_P (decl1)
10529 && !(DECL_USE_TEMPLATE (decl1) &&
10530 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10532 tree olddecl = pushdecl (decl1);
10534 if (olddecl == error_mark_node)
10535 /* If something went wrong when registering the declaration,
10536 use DECL1; we have to have a FUNCTION_DECL to use when
10537 parsing the body of the function. */
10539 else
10540 /* Otherwise, OLDDECL is either a previous declaration of
10541 the same function or DECL1 itself. */
10542 decl1 = olddecl;
10544 else
10546 /* We need to set the DECL_CONTEXT. */
10547 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10548 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10550 fntype = TREE_TYPE (decl1);
10552 /* If #pragma weak applies, mark the decl appropriately now.
10553 The pragma only applies to global functions. Because
10554 determining whether or not the #pragma applies involves
10555 computing the mangled name for the declaration, we cannot
10556 apply the pragma until after we have merged this declaration
10557 with any previous declarations; if the original declaration
10558 has a linkage specification, that specification applies to
10559 the definition as well, and may affect the mangled name. */
10560 if (!DECL_CONTEXT (decl1))
10561 maybe_apply_pragma_weak (decl1);
10564 /* Reset this in case the call to pushdecl changed it. */
10565 current_function_decl = decl1;
10567 gcc_assert (DECL_INITIAL (decl1));
10569 /* This function may already have been parsed, in which case just
10570 return; our caller will skip over the body without parsing. */
10571 if (DECL_INITIAL (decl1) != error_mark_node)
10572 return;
10574 /* Initialize RTL machinery. We cannot do this until
10575 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10576 even when processing a template; this is how we get
10577 CFUN set up, and our per-function variables initialized.
10578 FIXME factor out the non-RTL stuff. */
10579 bl = current_binding_level;
10580 allocate_struct_function (decl1);
10581 current_binding_level = bl;
10583 /* Even though we're inside a function body, we still don't want to
10584 call expand_expr to calculate the size of a variable-sized array.
10585 We haven't necessarily assigned RTL to all variables yet, so it's
10586 not safe to try to expand expressions involving them. */
10587 cfun->x_dont_save_pending_sizes_p = 1;
10589 /* Start the statement-tree, start the tree now. */
10590 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10592 /* If we are (erroneously) defining a function that we have already
10593 defined before, wipe out what we knew before. */
10594 if (!DECL_PENDING_INLINE_P (decl1))
10595 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10597 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10599 /* We know that this was set up by `grokclassfn'. We do not
10600 wait until `store_parm_decls', since evil parse errors may
10601 never get us to that point. Here we keep the consistency
10602 between `current_class_type' and `current_class_ptr'. */
10603 tree t = DECL_ARGUMENTS (decl1);
10605 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10606 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10608 cp_function_chain->x_current_class_ref
10609 = build_indirect_ref (t, NULL);
10610 cp_function_chain->x_current_class_ptr = t;
10612 /* Constructors and destructors need to know whether they're "in
10613 charge" of initializing virtual base classes. */
10614 t = TREE_CHAIN (t);
10615 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10617 current_in_charge_parm = t;
10618 t = TREE_CHAIN (t);
10620 if (DECL_HAS_VTT_PARM_P (decl1))
10622 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10623 current_vtt_parm = t;
10627 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10628 /* Implicitly-defined methods (like the
10629 destructor for a class in which no destructor
10630 is explicitly declared) must not be defined
10631 until their definition is needed. So, we
10632 ignore interface specifications for
10633 compiler-generated functions. */
10634 && !DECL_ARTIFICIAL (decl1));
10636 if (DECL_INTERFACE_KNOWN (decl1))
10638 tree ctx = decl_function_context (decl1);
10640 if (DECL_NOT_REALLY_EXTERN (decl1))
10641 DECL_EXTERNAL (decl1) = 0;
10643 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10644 && TREE_PUBLIC (ctx))
10645 /* This is a function in a local class in an extern inline
10646 function. */
10647 comdat_linkage (decl1);
10649 /* If this function belongs to an interface, it is public.
10650 If it belongs to someone else's interface, it is also external.
10651 This only affects inlines and template instantiations. */
10652 else if (!finfo->interface_unknown && honor_interface)
10654 if (DECL_DECLARED_INLINE_P (decl1)
10655 || DECL_TEMPLATE_INSTANTIATION (decl1)
10656 || processing_template_decl)
10658 DECL_EXTERNAL (decl1)
10659 = (finfo->interface_only
10660 || (DECL_DECLARED_INLINE_P (decl1)
10661 && ! flag_implement_inlines
10662 && !DECL_VINDEX (decl1)));
10664 /* For WIN32 we also want to put these in linkonce sections. */
10665 maybe_make_one_only (decl1);
10667 else
10668 DECL_EXTERNAL (decl1) = 0;
10669 DECL_INTERFACE_KNOWN (decl1) = 1;
10670 /* If this function is in an interface implemented in this file,
10671 make sure that the backend knows to emit this function
10672 here. */
10673 if (!DECL_EXTERNAL (decl1))
10674 mark_needed (decl1);
10676 else if (finfo->interface_unknown && finfo->interface_only
10677 && honor_interface)
10679 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10680 interface, we will have both finfo->interface_unknown and
10681 finfo->interface_only set. In that case, we don't want to
10682 use the normal heuristics because someone will supply a
10683 #pragma implementation elsewhere, and deducing it here would
10684 produce a conflict. */
10685 comdat_linkage (decl1);
10686 DECL_EXTERNAL (decl1) = 0;
10687 DECL_INTERFACE_KNOWN (decl1) = 1;
10688 DECL_DEFER_OUTPUT (decl1) = 1;
10690 else
10692 /* This is a definition, not a reference.
10693 So clear DECL_EXTERNAL. */
10694 DECL_EXTERNAL (decl1) = 0;
10696 if ((DECL_DECLARED_INLINE_P (decl1)
10697 || DECL_TEMPLATE_INSTANTIATION (decl1))
10698 && ! DECL_INTERFACE_KNOWN (decl1)
10699 /* Don't try to defer nested functions for now. */
10700 && ! decl_function_context (decl1))
10701 DECL_DEFER_OUTPUT (decl1) = 1;
10702 else
10703 DECL_INTERFACE_KNOWN (decl1) = 1;
10706 /* Determine the ELF visibility attribute for the function. We must not
10707 do this before calling "pushdecl", as we must allow "duplicate_decls"
10708 to merge any attributes appropriately. We also need to wait until
10709 linkage is set. */
10710 if (!DECL_CLONED_FUNCTION_P (decl1))
10711 determine_visibility (decl1);
10713 begin_scope (sk_function_parms, decl1);
10715 ++function_depth;
10717 if (DECL_DESTRUCTOR_P (decl1)
10718 || (DECL_CONSTRUCTOR_P (decl1)
10719 && targetm.cxx.cdtor_returns_this ()))
10721 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10722 DECL_CONTEXT (cdtor_label) = current_function_decl;
10725 start_fname_decls ();
10727 store_parm_decls (current_function_parms);
10731 /* Like start_preparsed_function, except that instead of a
10732 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10734 Returns 1 on success. If the DECLARATOR is not suitable for a function
10735 (it defines a datum instead), we return 0, which tells
10736 yyparse to report a parse error. */
10739 start_function (cp_decl_specifier_seq *declspecs,
10740 const cp_declarator *declarator,
10741 tree attrs)
10743 tree decl1;
10745 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10746 /* If the declarator is not suitable for a function definition,
10747 cause a syntax error. */
10748 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10749 return 0;
10751 if (DECL_MAIN_P (decl1))
10752 /* main must return int. grokfndecl should have corrected it
10753 (and issued a diagnostic) if the user got it wrong. */
10754 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10755 integer_type_node));
10757 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10759 return 1;
10762 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10763 FN. */
10765 static bool
10766 use_eh_spec_block (tree fn)
10768 return (flag_exceptions && flag_enforce_eh_specs
10769 && !processing_template_decl
10770 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10771 /* We insert the EH_SPEC_BLOCK only in the original
10772 function; then, it is copied automatically to the
10773 clones. */
10774 && !DECL_CLONED_FUNCTION_P (fn)
10775 /* Implicitly-generated constructors and destructors have
10776 exception specifications. However, those specifications
10777 are the union of the possible exceptions specified by the
10778 constructors/destructors for bases and members, so no
10779 unallowed exception will ever reach this function. By
10780 not creating the EH_SPEC_BLOCK we save a little memory,
10781 and we avoid spurious warnings about unreachable
10782 code. */
10783 && !DECL_ARTIFICIAL (fn));
10786 /* Store the parameter declarations into the current function declaration.
10787 This is called after parsing the parameter declarations, before
10788 digesting the body of the function.
10790 Also install to binding contour return value identifier, if any. */
10792 static void
10793 store_parm_decls (tree current_function_parms)
10795 tree fndecl = current_function_decl;
10796 tree parm;
10798 /* This is a chain of any other decls that came in among the parm
10799 declarations. If a parm is declared with enum {foo, bar} x;
10800 then CONST_DECLs for foo and bar are put here. */
10801 tree nonparms = NULL_TREE;
10803 if (current_function_parms)
10805 /* This case is when the function was defined with an ANSI prototype.
10806 The parms already have decls, so we need not do anything here
10807 except record them as in effect
10808 and complain if any redundant old-style parm decls were written. */
10810 tree specparms = current_function_parms;
10811 tree next;
10813 /* Must clear this because it might contain TYPE_DECLs declared
10814 at class level. */
10815 current_binding_level->names = NULL;
10817 /* If we're doing semantic analysis, then we'll call pushdecl
10818 for each of these. We must do them in reverse order so that
10819 they end in the correct forward order. */
10820 specparms = nreverse (specparms);
10822 for (parm = specparms; parm; parm = next)
10824 next = TREE_CHAIN (parm);
10825 if (TREE_CODE (parm) == PARM_DECL)
10827 if (DECL_NAME (parm) == NULL_TREE
10828 || TREE_CODE (parm) != VOID_TYPE)
10829 pushdecl (parm);
10830 else
10831 error ("parameter %qD declared void", parm);
10833 else
10835 /* If we find an enum constant or a type tag,
10836 put it aside for the moment. */
10837 TREE_CHAIN (parm) = NULL_TREE;
10838 nonparms = chainon (nonparms, parm);
10842 /* Get the decls in their original chain order and record in the
10843 function. This is all and only the PARM_DECLs that were
10844 pushed into scope by the loop above. */
10845 DECL_ARGUMENTS (fndecl) = getdecls ();
10847 else
10848 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10850 /* Now store the final chain of decls for the arguments
10851 as the decl-chain of the current lexical scope.
10852 Put the enumerators in as well, at the front so that
10853 DECL_ARGUMENTS is not modified. */
10854 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10856 if (use_eh_spec_block (current_function_decl))
10857 current_eh_spec_block = begin_eh_spec_block ();
10861 /* We have finished doing semantic analysis on DECL, but have not yet
10862 generated RTL for its body. Save away our current state, so that
10863 when we want to generate RTL later we know what to do. */
10865 static void
10866 save_function_data (tree decl)
10868 struct language_function *f;
10870 /* Save the language-specific per-function data so that we can
10871 get it back when we really expand this function. */
10872 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10874 /* Make a copy. */
10875 f = GGC_NEW (struct language_function);
10876 memcpy (f, cp_function_chain, sizeof (struct language_function));
10877 DECL_SAVED_FUNCTION_DATA (decl) = f;
10879 /* Clear out the bits we don't need. */
10880 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10881 f->bindings = NULL;
10882 f->x_local_names = NULL;
10886 /* Set the return value of the constructor (if present). */
10888 static void
10889 finish_constructor_body (void)
10891 tree val;
10892 tree exprstmt;
10894 if (targetm.cxx.cdtor_returns_this ())
10896 /* Any return from a constructor will end up here. */
10897 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10899 val = DECL_ARGUMENTS (current_function_decl);
10900 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10901 DECL_RESULT (current_function_decl), val);
10902 /* Return the address of the object. */
10903 exprstmt = build_stmt (RETURN_EXPR, val);
10904 add_stmt (exprstmt);
10908 /* Do all the processing for the beginning of a destructor; set up the
10909 vtable pointers and cleanups for bases and members. */
10911 static void
10912 begin_destructor_body (void)
10914 tree compound_stmt;
10916 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10917 issued an error message. We still want to try to process the
10918 body of the function, but initialize_vtbl_ptrs will crash if
10919 TYPE_BINFO is NULL. */
10920 if (COMPLETE_TYPE_P (current_class_type))
10922 compound_stmt = begin_compound_stmt (0);
10923 /* Make all virtual function table pointers in non-virtual base
10924 classes point to CURRENT_CLASS_TYPE's virtual function
10925 tables. */
10926 initialize_vtbl_ptrs (current_class_ptr);
10927 finish_compound_stmt (compound_stmt);
10929 /* And insert cleanups for our bases and members so that they
10930 will be properly destroyed if we throw. */
10931 push_base_cleanups ();
10935 /* At the end of every destructor we generate code to delete the object if
10936 necessary. Do that now. */
10938 static void
10939 finish_destructor_body (void)
10941 tree exprstmt;
10943 /* Any return from a destructor will end up here; that way all base
10944 and member cleanups will be run when the function returns. */
10945 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10947 /* In a virtual destructor, we must call delete. */
10948 if (DECL_VIRTUAL_P (current_function_decl))
10950 tree if_stmt;
10951 tree virtual_size = cxx_sizeof (current_class_type);
10953 /* [class.dtor]
10955 At the point of definition of a virtual destructor (including
10956 an implicit definition), non-placement operator delete shall
10957 be looked up in the scope of the destructor's class and if
10958 found shall be accessible and unambiguous. */
10959 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
10960 virtual_size,
10961 /*global_p=*/false,
10962 /*placement=*/NULL_TREE,
10963 /*alloc_fn=*/NULL_TREE);
10965 if_stmt = begin_if_stmt ();
10966 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10967 current_in_charge_parm,
10968 integer_one_node),
10969 if_stmt);
10970 finish_expr_stmt (exprstmt);
10971 finish_then_clause (if_stmt);
10972 finish_if_stmt (if_stmt);
10975 if (targetm.cxx.cdtor_returns_this ())
10977 tree val;
10979 val = DECL_ARGUMENTS (current_function_decl);
10980 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10981 DECL_RESULT (current_function_decl), val);
10982 /* Return the address of the object. */
10983 exprstmt = build_stmt (RETURN_EXPR, val);
10984 add_stmt (exprstmt);
10988 /* Do the necessary processing for the beginning of a function body, which
10989 in this case includes member-initializers, but not the catch clauses of
10990 a function-try-block. Currently, this means opening a binding level
10991 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
10993 tree
10994 begin_function_body (void)
10996 tree stmt;
10998 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10999 return NULL_TREE;
11001 if (processing_template_decl)
11002 /* Do nothing now. */;
11003 else
11004 /* Always keep the BLOCK node associated with the outermost pair of
11005 curly braces of a function. These are needed for correct
11006 operation of dwarfout.c. */
11007 keep_next_level (true);
11009 stmt = begin_compound_stmt (BCS_FN_BODY);
11011 if (processing_template_decl)
11012 /* Do nothing now. */;
11013 else if (DECL_DESTRUCTOR_P (current_function_decl))
11014 begin_destructor_body ();
11016 return stmt;
11019 /* Do the processing for the end of a function body. Currently, this means
11020 closing out the cleanups for fully-constructed bases and members, and in
11021 the case of the destructor, deleting the object if desired. Again, this
11022 is only meaningful for [cd]tors, since they are the only functions where
11023 there is a significant distinction between the main body and any
11024 function catch clauses. Handling, say, main() return semantics here
11025 would be wrong, as flowing off the end of a function catch clause for
11026 main() would also need to return 0. */
11028 void
11029 finish_function_body (tree compstmt)
11031 if (compstmt == NULL_TREE)
11032 return;
11034 /* Close the block. */
11035 finish_compound_stmt (compstmt);
11037 if (processing_template_decl)
11038 /* Do nothing now. */;
11039 else if (DECL_CONSTRUCTOR_P (current_function_decl))
11040 finish_constructor_body ();
11041 else if (DECL_DESTRUCTOR_P (current_function_decl))
11042 finish_destructor_body ();
11045 /* Given a function, returns the BLOCK corresponding to the outermost level
11046 of curly braces, skipping the artificial block created for constructor
11047 initializers. */
11049 static tree
11050 outer_curly_brace_block (tree fndecl)
11052 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11053 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11054 /* Skip the artificial function body block. */
11055 block = BLOCK_SUBBLOCKS (block);
11056 return block;
11059 /* Finish up a function declaration and compile that function
11060 all the way to assembler language output. The free the storage
11061 for the function definition.
11063 FLAGS is a bitwise or of the following values:
11064 2 - INCLASS_INLINE
11065 We just finished processing the body of an in-class inline
11066 function definition. (This processing will have taken place
11067 after the class definition is complete.) */
11069 tree
11070 finish_function (int flags)
11072 tree fndecl = current_function_decl;
11073 tree fntype, ctype = NULL_TREE;
11074 int inclass_inline = (flags & 2) != 0;
11075 int nested;
11077 /* When we get some parse errors, we can end up without a
11078 current_function_decl, so cope. */
11079 if (fndecl == NULL_TREE)
11080 return error_mark_node;
11082 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11083 && DECL_VIRTUAL_P (fndecl)
11084 && !processing_template_decl)
11086 tree fnclass = DECL_CONTEXT (fndecl);
11087 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11088 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11091 nested = function_depth > 1;
11092 fntype = TREE_TYPE (fndecl);
11094 /* TREE_READONLY (fndecl) = 1;
11095 This caused &foo to be of type ptr-to-const-function
11096 which then got a warning when stored in a ptr-to-function variable. */
11098 gcc_assert (building_stmt_tree ());
11099 /* The current function is being defined, so its DECL_INITIAL should
11100 be set, and unless there's a multiple definition, it should be
11101 error_mark_node. */
11102 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
11104 /* For a cloned function, we've already got all the code we need;
11105 there's no need to add any extra bits. */
11106 if (!DECL_CLONED_FUNCTION_P (fndecl))
11108 if (DECL_MAIN_P (current_function_decl))
11110 tree stmt;
11112 /* Make it so that `main' always returns 0 by default (or
11113 1 for VMS). */
11114 #if VMS_TARGET
11115 stmt = finish_return_stmt (integer_one_node);
11116 #else
11117 stmt = finish_return_stmt (integer_zero_node);
11118 #endif
11119 /* Hack. We don't want the middle-end to warn that this
11120 return is unreachable, so put the statement on the
11121 special line 0. */
11122 #ifdef USE_MAPPED_LOCATION
11123 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
11124 #else
11125 annotate_with_file_line (stmt, input_filename, 0);
11126 #endif
11129 if (use_eh_spec_block (current_function_decl))
11130 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11131 (TREE_TYPE (current_function_decl)),
11132 current_eh_spec_block);
11135 /* If we're saving up tree structure, tie off the function now. */
11136 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11138 finish_fname_decls ();
11140 /* If this function can't throw any exceptions, remember that. */
11141 if (!processing_template_decl
11142 && !cp_function_chain->can_throw
11143 && !flag_non_call_exceptions
11144 && targetm.binds_local_p (fndecl))
11145 TREE_NOTHROW (fndecl) = 1;
11147 /* This must come after expand_function_end because cleanups might
11148 have declarations (from inline functions) that need to go into
11149 this function's blocks. */
11151 /* If the current binding level isn't the outermost binding level
11152 for this function, either there is a bug, or we have experienced
11153 syntax errors and the statement tree is malformed. */
11154 if (current_binding_level->kind != sk_function_parms)
11156 /* Make sure we have already experienced errors. */
11157 gcc_assert (errorcount);
11159 /* Throw away the broken statement tree and extra binding
11160 levels. */
11161 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11163 while (current_binding_level->kind != sk_function_parms)
11165 if (current_binding_level->kind == sk_class)
11166 pop_nested_class ();
11167 else
11168 poplevel (0, 0, 0);
11171 poplevel (1, 0, 1);
11173 /* Statements should always be full-expressions at the outermost set
11174 of curly braces for a function. */
11175 gcc_assert (stmts_are_full_exprs_p ());
11177 /* Set up the named return value optimization, if we can. Candidate
11178 variables are selected in check_return_value. */
11179 if (current_function_return_value)
11181 tree r = current_function_return_value;
11182 tree outer;
11184 if (r != error_mark_node
11185 /* This is only worth doing for fns that return in memory--and
11186 simpler, since we don't have to worry about promoted modes. */
11187 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11188 /* Only allow this for variables declared in the outer scope of
11189 the function so we know that their lifetime always ends with a
11190 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11191 we were to do this optimization in tree-ssa. */
11192 && (outer = outer_curly_brace_block (fndecl))
11193 && chain_member (r, BLOCK_VARS (outer)))
11194 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11196 current_function_return_value = NULL_TREE;
11199 /* Remember that we were in class scope. */
11200 if (current_class_name)
11201 ctype = current_class_type;
11203 /* Must mark the RESULT_DECL as being in this function. */
11204 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11206 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11207 to the FUNCTION_DECL node itself. */
11208 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11210 /* Save away current state, if appropriate. */
11211 if (!processing_template_decl)
11212 save_function_data (fndecl);
11214 /* Complain if there's just no return statement. */
11215 if (warn_return_type
11216 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11217 && !dependent_type_p (TREE_TYPE (fntype))
11218 && !current_function_returns_value && !current_function_returns_null
11219 /* Don't complain if we abort or throw. */
11220 && !current_function_returns_abnormally
11221 && !DECL_NAME (DECL_RESULT (fndecl))
11222 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
11223 inline function, as we might never be compiled separately. */
11224 && (DECL_INLINE (fndecl) || processing_template_decl)
11225 /* Structor return values (if any) are set by the compiler. */
11226 && !DECL_CONSTRUCTOR_P (fndecl)
11227 && !DECL_DESTRUCTOR_P (fndecl))
11228 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11230 /* Store the end of the function, so that we get good line number
11231 info for the epilogue. */
11232 cfun->function_end_locus = input_location;
11234 /* Genericize before inlining. */
11235 if (!processing_template_decl)
11237 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11238 cp_genericize (fndecl);
11239 /* Clear out the bits we don't need. */
11240 f->x_current_class_ptr = NULL;
11241 f->x_current_class_ref = NULL;
11242 f->x_eh_spec_block = NULL;
11243 f->x_in_charge_parm = NULL;
11244 f->x_vtt_parm = NULL;
11245 f->x_return_value = NULL;
11246 f->bindings = NULL;
11247 f->extern_decl_map = NULL;
11249 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11250 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11252 /* Clear out the bits we don't need. */
11253 local_names = NULL;
11255 /* We're leaving the context of this function, so zap cfun. It's still in
11256 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
11257 cfun = NULL;
11258 current_function_decl = NULL;
11260 /* If this is an in-class inline definition, we may have to pop the
11261 bindings for the template parameters that we added in
11262 maybe_begin_member_template_processing when start_function was
11263 called. */
11264 if (inclass_inline)
11265 maybe_end_member_template_processing ();
11267 /* Leave the scope of the class. */
11268 if (ctype)
11269 pop_nested_class ();
11271 --function_depth;
11273 /* Clean up. */
11274 if (! nested)
11275 /* Let the error reporting routines know that we're outside a
11276 function. For a nested function, this value is used in
11277 cxx_pop_function_context and then reset via pop_function_context. */
11278 current_function_decl = NULL_TREE;
11280 return fndecl;
11283 /* Create the FUNCTION_DECL for a function definition.
11284 DECLSPECS and DECLARATOR are the parts of the declaration;
11285 they describe the return type and the name of the function,
11286 but twisted together in a fashion that parallels the syntax of C.
11288 This function creates a binding context for the function body
11289 as well as setting up the FUNCTION_DECL in current_function_decl.
11291 Returns a FUNCTION_DECL on success.
11293 If the DECLARATOR is not suitable for a function (it defines a datum
11294 instead), we return 0, which tells yyparse to report a parse error.
11296 May return void_type_node indicating that this method is actually
11297 a friend. See grokfield for more details.
11299 Came here with a `.pushlevel' .
11301 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11302 CHANGES TO CODE IN `grokfield'. */
11304 tree
11305 start_method (cp_decl_specifier_seq *declspecs,
11306 const cp_declarator *declarator, tree attrlist)
11308 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11309 &attrlist);
11311 if (fndecl == error_mark_node)
11312 return error_mark_node;
11314 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11316 error ("invalid member function declaration");
11317 return error_mark_node;
11320 if (attrlist)
11321 cplus_decl_attributes (&fndecl, attrlist, 0);
11323 /* Pass friends other than inline friend functions back. */
11324 if (fndecl == void_type_node)
11325 return fndecl;
11327 if (DECL_IN_AGGR_P (fndecl))
11329 if (DECL_CONTEXT (fndecl)
11330 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11331 error ("%qD is already defined in class %qT", fndecl,
11332 DECL_CONTEXT (fndecl));
11333 return error_mark_node;
11336 check_template_shadow (fndecl);
11338 DECL_DECLARED_INLINE_P (fndecl) = 1;
11339 if (flag_default_inline)
11340 DECL_INLINE (fndecl) = 1;
11342 /* We process method specializations in finish_struct_1. */
11343 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11345 fndecl = push_template_decl (fndecl);
11346 if (fndecl == error_mark_node)
11347 return fndecl;
11350 if (! DECL_FRIEND_P (fndecl))
11352 if (TREE_CHAIN (fndecl))
11354 fndecl = copy_node (fndecl);
11355 TREE_CHAIN (fndecl) = NULL_TREE;
11359 finish_decl (fndecl, NULL_TREE, NULL_TREE);
11361 /* Make a place for the parms. */
11362 begin_scope (sk_function_parms, fndecl);
11364 DECL_IN_AGGR_P (fndecl) = 1;
11365 return fndecl;
11368 /* Go through the motions of finishing a function definition.
11369 We don't compile this method until after the whole class has
11370 been processed.
11372 FINISH_METHOD must return something that looks as though it
11373 came from GROKFIELD (since we are defining a method, after all).
11375 This is called after parsing the body of the function definition.
11376 STMTS is the chain of statements that makes up the function body.
11378 DECL is the ..._DECL that `start_method' provided. */
11380 tree
11381 finish_method (tree decl)
11383 tree fndecl = decl;
11384 tree old_initial;
11386 tree link;
11388 if (decl == void_type_node)
11389 return decl;
11391 old_initial = DECL_INITIAL (fndecl);
11393 /* Undo the level for the parms (from start_method).
11394 This is like poplevel, but it causes nothing to be
11395 saved. Saving information here confuses symbol-table
11396 output routines. Besides, this information will
11397 be correctly output when this method is actually
11398 compiled. */
11400 /* Clear out the meanings of the local variables of this level;
11401 also record in each decl which block it belongs to. */
11403 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11405 if (DECL_NAME (link) != NULL_TREE)
11406 pop_binding (DECL_NAME (link), link);
11407 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11408 DECL_CONTEXT (link) = NULL_TREE;
11411 poplevel (0, 0, 0);
11413 DECL_INITIAL (fndecl) = old_initial;
11415 /* We used to check if the context of FNDECL was different from
11416 current_class_type as another way to get inside here. This didn't work
11417 for String.cc in libg++. */
11418 if (DECL_FRIEND_P (fndecl))
11420 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11421 fndecl);
11422 decl = void_type_node;
11425 return decl;
11429 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11430 we can lay it out later, when and if its type becomes complete. */
11432 void
11433 maybe_register_incomplete_var (tree var)
11435 gcc_assert (TREE_CODE (var) == VAR_DECL);
11437 /* Keep track of variables with incomplete types. */
11438 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11439 && DECL_EXTERNAL (var))
11441 tree inner_type = TREE_TYPE (var);
11443 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11444 inner_type = TREE_TYPE (inner_type);
11445 inner_type = TYPE_MAIN_VARIANT (inner_type);
11447 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11448 /* RTTI TD entries are created while defining the type_info. */
11449 || (TYPE_LANG_SPECIFIC (inner_type)
11450 && TYPE_BEING_DEFINED (inner_type)))
11451 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11455 /* Called when a class type (given by TYPE) is defined. If there are
11456 any existing VAR_DECLs whose type hsa been completed by this
11457 declaration, update them now. */
11459 void
11460 complete_vars (tree type)
11462 tree *list = &incomplete_vars;
11464 gcc_assert (CLASS_TYPE_P (type));
11465 while (*list)
11467 if (same_type_p (type, TREE_PURPOSE (*list)))
11469 tree var = TREE_VALUE (*list);
11470 tree type = TREE_TYPE (var);
11471 /* Complete the type of the variable. The VAR_DECL itself
11472 will be laid out in expand_expr. */
11473 complete_type (type);
11474 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11475 /* Remove this entry from the list. */
11476 *list = TREE_CHAIN (*list);
11478 else
11479 list = &TREE_CHAIN (*list);
11482 /* Check for pending declarations which may have abstract type. */
11483 complete_type_check_abstract (type);
11486 /* If DECL is of a type which needs a cleanup, build that cleanup
11487 here. */
11489 tree
11490 cxx_maybe_build_cleanup (tree decl)
11492 tree type = TREE_TYPE (decl);
11494 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11496 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11497 tree rval;
11498 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11499 && CLASSTYPE_VBASECLASSES (type));
11501 if (TREE_CODE (type) == ARRAY_TYPE)
11502 rval = decl;
11503 else
11505 cxx_mark_addressable (decl);
11506 rval = build_unary_op (ADDR_EXPR, decl, 0);
11509 /* Optimize for space over speed here. */
11510 if (!has_vbases || flag_expensive_optimizations)
11511 flags |= LOOKUP_NONVIRTUAL;
11513 rval = build_delete (TREE_TYPE (rval), rval,
11514 sfk_complete_destructor, flags, 0);
11516 return rval;
11518 return NULL_TREE;
11521 /* When a stmt has been parsed, this function is called. */
11523 void
11524 finish_stmt (void)
11528 /* DECL was originally constructed as a non-static member function,
11529 but turned out to be static. Update it accordingly. */
11531 void
11532 revert_static_member_fn (tree decl)
11534 tree tmp;
11535 tree function = TREE_TYPE (decl);
11536 tree args = TYPE_ARG_TYPES (function);
11538 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11539 != TYPE_UNQUALIFIED)
11540 error ("static member function %q#D declared with type qualifiers", decl);
11542 args = TREE_CHAIN (args);
11543 tmp = build_function_type (TREE_TYPE (function), args);
11544 tmp = build_qualified_type (tmp, cp_type_quals (function));
11545 tmp = build_exception_variant (tmp,
11546 TYPE_RAISES_EXCEPTIONS (function));
11547 TREE_TYPE (decl) = tmp;
11548 if (DECL_ARGUMENTS (decl))
11549 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11550 DECL_STATIC_FUNCTION_P (decl) = 1;
11553 /* Initialize the variables used during compilation of a C++
11554 function. */
11556 void
11557 cxx_push_function_context (struct function * f)
11559 struct language_function *p = GGC_CNEW (struct language_function);
11560 f->language = p;
11562 /* Whenever we start a new function, we destroy temporaries in the
11563 usual way. */
11564 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11566 if (f->decl)
11568 tree fn = f->decl;
11570 if (DECL_SAVED_FUNCTION_DATA (fn))
11572 /* If we already parsed this function, and we're just expanding it
11573 now, restore saved state. */
11574 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11576 /* We don't need the saved data anymore. Unless this is an inline
11577 function; we need the named return value info for
11578 declare_return_variable. */
11579 if (! DECL_INLINE (fn))
11580 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11585 /* Free the language-specific parts of F, now that we've finished
11586 compiling the function. */
11588 void
11589 cxx_pop_function_context (struct function * f)
11591 f->language = 0;
11594 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11595 one of the language-independent trees. */
11597 enum cp_tree_node_structure_enum
11598 cp_tree_node_structure (union lang_tree_node * t)
11600 switch (TREE_CODE (&t->generic))
11602 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11603 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11604 case OVERLOAD: return TS_CP_OVERLOAD;
11605 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11606 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11607 case PTRMEM_CST: return TS_CP_PTRMEM;
11608 case BASELINK: return TS_CP_BASELINK;
11609 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
11610 default: return TS_CP_GENERIC;
11614 /* Build the void_list_node (void_type_node having been created). */
11615 tree
11616 build_void_list_node (void)
11618 tree t = build_tree_list (NULL_TREE, void_type_node);
11619 return t;
11622 bool
11623 cp_missing_noreturn_ok_p (tree decl)
11625 /* A missing noreturn is ok for the `main' function. */
11626 return DECL_MAIN_P (decl);
11629 /* Return the COMDAT group into which DECL should be placed. */
11631 const char *
11632 cxx_comdat_group (tree decl)
11634 tree name;
11636 /* Virtual tables, construction virtual tables, and virtual table
11637 tables all go in a single COMDAT group, named after the primary
11638 virtual table. */
11639 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11640 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11641 /* For all other DECLs, the COMDAT group is the mangled name of the
11642 declaration itself. */
11643 else
11645 while (DECL_THUNK_P (decl))
11647 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11648 into the same section as the target function. In that case
11649 we must return target's name. */
11650 tree target = THUNK_TARGET (decl);
11651 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11652 && DECL_SECTION_NAME (target) != NULL
11653 && DECL_ONE_ONLY (target))
11654 decl = target;
11655 else
11656 break;
11658 name = DECL_ASSEMBLER_NAME (decl);
11661 return IDENTIFIER_POINTER (name);
11664 #include "gt-cp-decl.h"