PR testsuite/35843
[official-gcc.git] / gcc / cp / decl.c
blob221b30040d7ae0d6516a1371863f0c2d00478f3e
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
5 Contributed by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* Process declarations and symbol lookup for C++ front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "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"
55 #include "pointer-set.h"
57 static tree grokparms (cp_parameter_declarator *, tree *);
58 static const char *redeclaration_error_message (tree, tree);
60 static int decl_jump_unsafe (tree);
61 static void require_complete_types_for_parms (tree);
62 static int ambi_op_p (enum tree_code);
63 static int unary_op_p (enum tree_code);
64 static void push_local_name (tree);
65 static tree grok_reference_init (tree, tree, tree, tree *);
66 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
67 int, int, tree);
68 static void record_unknown_type (tree, const char *);
69 static tree builtin_function_1 (tree, tree);
70 static tree build_library_fn_1 (tree, enum tree_code, tree);
71 static int member_function_or_else (tree, tree, enum overload_flags);
72 static void bad_specifiers (tree, const char *, int, int, int, int,
73 int);
74 static void check_for_uninitialized_const_var (tree);
75 static hashval_t typename_hash (const void *);
76 static int typename_compare (const void *, const void *);
77 static tree local_variable_p_walkfn (tree *, int *, void *);
78 static tree record_builtin_java_type (const char *, int);
79 static const char *tag_name (enum tag_types);
80 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
81 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
82 static void maybe_deduce_size_from_array_init (tree, tree);
83 static void layout_var_decl (tree);
84 static void maybe_commonize_var (tree);
85 static tree check_initializer (tree, tree, int, tree *);
86 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87 static void save_function_data (tree);
88 static void check_function_type (tree, tree);
89 static void finish_constructor_body (void);
90 static void begin_destructor_body (void);
91 static void finish_destructor_body (void);
92 static tree create_array_type_for_decl (tree, tree, tree);
93 static tree get_atexit_node (void);
94 static tree get_dso_handle_node (void);
95 static tree start_cleanup_fn (void);
96 static void end_cleanup_fn (void);
97 static tree cp_make_fname_decl (tree, int);
98 static void initialize_predefined_identifiers (void);
99 static tree check_special_function_return_type
100 (special_function_kind, tree, tree);
101 static tree push_cp_library_fn (enum tree_code, tree);
102 static tree build_cp_library_fn (tree, enum tree_code, tree);
103 static void store_parm_decls (tree);
104 static void initialize_local_var (tree, tree);
105 static void expand_static_init (tree, tree);
106 static tree next_initializable_field (tree);
108 /* The following symbols are subsumed in the cp_global_trees array, and
109 listed here individually for documentation purposes.
111 C++ extensions
112 tree wchar_decl_node;
114 tree vtable_entry_type;
115 tree delta_type_node;
116 tree __t_desc_type_node;
118 tree class_type_node;
119 tree unknown_type_node;
121 Array type `vtable_entry_type[]'
123 tree vtbl_type_node;
124 tree vtbl_ptr_type_node;
126 Namespaces,
128 tree std_node;
129 tree abi_node;
131 A FUNCTION_DECL which can call `abort'. Not necessarily the
132 one that the user will declare, but sufficient to be called
133 by routines that want to abort the program.
135 tree abort_fndecl;
137 The FUNCTION_DECL for the default `::operator delete'.
139 tree global_delete_fndecl;
141 Used by RTTI
142 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
143 tree tinfo_var_id; */
145 tree cp_global_trees[CPTI_MAX];
147 /* Indicates that there is a type value in some namespace, although
148 that is not necessarily in scope at the moment. */
150 tree global_type_node;
152 /* The node that holds the "name" of the global scope. */
153 tree global_scope_name;
155 #define local_names cp_function_chain->x_local_names
157 /* A list of objects which have constructors or destructors
158 which reside in the global scope. The decl is stored in
159 the TREE_VALUE slot and the initializer is stored
160 in the TREE_PURPOSE slot. */
161 tree static_aggregates;
163 /* -- end of C++ */
165 /* A node for the integer constants 2, and 3. */
167 tree integer_two_node, integer_three_node;
169 /* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
172 struct named_label_use_entry GTY(())
174 struct named_label_use_entry *next;
175 /* The binding level to which this entry is *currently* attached.
176 This is initially the binding level in which the goto appeared,
177 but is modified as scopes are closed. */
178 struct cp_binding_level *binding_level;
179 /* The head of the names list that was current when the goto appeared,
180 or the inner scope popped. These are the decls that will *not* be
181 skipped when jumping to the label. */
182 tree names_in_scope;
183 /* The location of the goto, for error reporting. */
184 location_t o_goto_locus;
185 /* True if an OpenMP structured block scope has been closed since
186 the goto appeared. This means that the branch from the label will
187 illegally exit an OpenMP scope. */
188 bool in_omp_scope;
191 /* A list of all LABEL_DECLs in the function that have names. Here so
192 we can clear out their names' definitions at the end of the
193 function, and so we can check the validity of jumps to these labels. */
195 struct named_label_entry GTY(())
197 /* The decl itself. */
198 tree label_decl;
200 /* The binding level to which the label is *currently* attached.
201 This is initially set to the binding level in which the label
202 is defined, but is modified as scopes are closed. */
203 struct cp_binding_level *binding_level;
204 /* The head of the names list that was current when the label was
205 defined, or the inner scope popped. These are the decls that will
206 be skipped when jumping to the label. */
207 tree names_in_scope;
208 /* A tree list of all decls from all binding levels that would be
209 crossed by a backward branch to the label. */
210 tree bad_decls;
212 /* A list of uses of the label, before the label is defined. */
213 struct named_label_use_entry *uses;
215 /* The following bits are set after the label is defined, and are
216 updated as scopes are popped. They indicate that a backward jump
217 to the label will illegally enter a scope of the given flavor. */
218 bool in_try_scope;
219 bool in_catch_scope;
220 bool in_omp_scope;
223 #define named_labels cp_function_chain->x_named_labels
225 /* The number of function bodies which we are currently processing.
226 (Zero if we are at namespace scope, one inside the body of a
227 function, two inside the body of a function in a local class, etc.) */
228 int function_depth;
230 /* States indicating how grokdeclarator() should handle declspecs marked
231 with __attribute__((deprecated)). An object declared as
232 __attribute__((deprecated)) suppresses warnings of uses of other
233 deprecated items. */
235 enum deprecated_states {
236 DEPRECATED_NORMAL,
237 DEPRECATED_SUPPRESS
240 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
243 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
244 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
245 time the VAR_DECL was declared, the type was incomplete. */
247 static GTY(()) tree incomplete_vars;
249 /* Returns the kind of template specialization we are currently
250 processing, given that it's declaration contained N_CLASS_SCOPES
251 explicit scope qualifications. */
253 tmpl_spec_kind
254 current_tmpl_spec_kind (int n_class_scopes)
256 int n_template_parm_scopes = 0;
257 int seen_specialization_p = 0;
258 int innermost_specialization_p = 0;
259 struct cp_binding_level *b;
261 /* Scan through the template parameter scopes. */
262 for (b = current_binding_level;
263 b->kind == sk_template_parms;
264 b = b->level_chain)
266 /* If we see a specialization scope inside a parameter scope,
267 then something is wrong. That corresponds to a declaration
268 like:
270 template <class T> template <> ...
272 which is always invalid since [temp.expl.spec] forbids the
273 specialization of a class member template if the enclosing
274 class templates are not explicitly specialized as well. */
275 if (b->explicit_spec_p)
277 if (n_template_parm_scopes == 0)
278 innermost_specialization_p = 1;
279 else
280 seen_specialization_p = 1;
282 else if (seen_specialization_p == 1)
283 return tsk_invalid_member_spec;
285 ++n_template_parm_scopes;
288 /* Handle explicit instantiations. */
289 if (processing_explicit_instantiation)
291 if (n_template_parm_scopes != 0)
292 /* We've seen a template parameter list during an explicit
293 instantiation. For example:
295 template <class T> template void f(int);
297 This is erroneous. */
298 return tsk_invalid_expl_inst;
299 else
300 return tsk_expl_inst;
303 if (n_template_parm_scopes < n_class_scopes)
304 /* We've not seen enough template headers to match all the
305 specialized classes present. For example:
307 template <class T> void R<T>::S<T>::f(int);
309 This is invalid; there needs to be one set of template
310 parameters for each class. */
311 return tsk_insufficient_parms;
312 else if (n_template_parm_scopes == n_class_scopes)
313 /* We're processing a non-template declaration (even though it may
314 be a member of a template class.) For example:
316 template <class T> void S<T>::f(int);
318 The `class T' maches the `S<T>', leaving no template headers
319 corresponding to the `f'. */
320 return tsk_none;
321 else if (n_template_parm_scopes > n_class_scopes + 1)
322 /* We've got too many template headers. For example:
324 template <> template <class T> void f (T);
326 There need to be more enclosing classes. */
327 return tsk_excessive_parms;
328 else
329 /* This must be a template. It's of the form:
331 template <class T> template <class U> void S<T>::f(U);
333 This is a specialization if the innermost level was a
334 specialization; otherwise it's just a definition of the
335 template. */
336 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
339 /* Exit the current scope. */
341 void
342 finish_scope (void)
344 poplevel (0, 0, 0);
347 /* When a label goes out of scope, check to see if that label was used
348 in a valid manner, and issue any appropriate warnings or errors. */
350 static void
351 pop_label (tree label, tree old_value)
353 if (!processing_template_decl)
355 if (DECL_INITIAL (label) == NULL_TREE)
357 location_t location;
359 error ("label %q+D used but not defined", label);
360 location = input_location; /* FIXME want (input_filename, (line)0) */
361 /* Avoid crashing later. */
362 define_label (location, DECL_NAME (label));
364 else
365 warn_for_unused_label (label);
368 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
371 /* At the end of a function, all labels declared within the function
372 go out of scope. BLOCK is the top-level block for the
373 function. */
375 static int
376 pop_labels_1 (void **slot, void *data)
378 struct named_label_entry *ent = (struct named_label_entry *) *slot;
379 tree block = (tree) data;
381 pop_label (ent->label_decl, NULL_TREE);
383 /* Put the labels into the "variables" of the top-level block,
384 so debugger can see them. */
385 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
386 BLOCK_VARS (block) = ent->label_decl;
388 htab_clear_slot (named_labels, slot);
390 return 1;
393 static void
394 pop_labels (tree block)
396 if (named_labels)
398 htab_traverse (named_labels, pop_labels_1, block);
399 named_labels = NULL;
403 /* At the end of a block with local labels, restore the outer definition. */
405 static void
406 pop_local_label (tree label, tree old_value)
408 struct named_label_entry dummy;
409 void **slot;
411 pop_label (label, old_value);
413 dummy.label_decl = label;
414 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
415 htab_clear_slot (named_labels, slot);
418 /* The following two routines are used to interface to Objective-C++.
419 The binding level is purposely treated as an opaque type. */
421 void *
422 objc_get_current_scope (void)
424 return current_binding_level;
427 /* The following routine is used by the NeXT-style SJLJ exceptions;
428 variables get marked 'volatile' so as to not be clobbered by
429 _setjmp()/_longjmp() calls. All variables in the current scope,
430 as well as parent scopes up to (but not including) ENCLOSING_BLK
431 shall be thusly marked. */
433 void
434 objc_mark_locals_volatile (void *enclosing_blk)
436 struct cp_binding_level *scope;
438 for (scope = current_binding_level;
439 scope && scope != enclosing_blk;
440 scope = scope->level_chain)
442 tree decl;
444 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
445 objc_volatilize_decl (decl);
447 /* Do not climb up past the current function. */
448 if (scope->kind == sk_function_parms)
449 break;
453 /* Update data for defined and undefined labels when leaving a scope. */
455 static int
456 poplevel_named_label_1 (void **slot, void *data)
458 struct named_label_entry *ent = (struct named_label_entry *) *slot;
459 struct cp_binding_level *bl = (struct cp_binding_level *) data;
460 struct cp_binding_level *obl = bl->level_chain;
462 if (ent->binding_level == bl)
464 tree decl;
466 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
467 if (decl_jump_unsafe (decl))
468 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
470 ent->binding_level = obl;
471 ent->names_in_scope = obl->names;
472 switch (bl->kind)
474 case sk_try:
475 ent->in_try_scope = true;
476 break;
477 case sk_catch:
478 ent->in_catch_scope = true;
479 break;
480 case sk_omp:
481 ent->in_omp_scope = true;
482 break;
483 default:
484 break;
487 else if (ent->uses)
489 struct named_label_use_entry *use;
491 for (use = ent->uses; use ; use = use->next)
492 if (use->binding_level == bl)
494 use->binding_level = obl;
495 use->names_in_scope = obl->names;
496 if (bl->kind == sk_omp)
497 use->in_omp_scope = true;
501 return 1;
504 /* Exit a binding level.
505 Pop the level off, and restore the state of the identifier-decl mappings
506 that were in effect when this level was entered.
508 If KEEP == 1, this level had explicit declarations, so
509 and create a "block" (a BLOCK node) for the level
510 to record its declarations and subblocks for symbol table output.
512 If FUNCTIONBODY is nonzero, this level is the body of a function,
513 so create a block as if KEEP were set and also clear out all
514 label names.
516 If REVERSE is nonzero, reverse the order of decls before putting
517 them into the BLOCK. */
519 tree
520 poplevel (int keep, int reverse, int functionbody)
522 tree link;
523 /* The chain of decls was accumulated in reverse order.
524 Put it into forward order, just for cleanliness. */
525 tree decls;
526 int tmp = functionbody;
527 int real_functionbody;
528 tree subblocks;
529 tree block;
530 tree decl;
531 int leaving_for_scope;
532 scope_kind kind;
534 timevar_push (TV_NAME_LOOKUP);
535 restart:
537 block = NULL_TREE;
539 gcc_assert (current_binding_level->kind != sk_class);
541 real_functionbody = (current_binding_level->kind == sk_cleanup
542 ? ((functionbody = 0), tmp) : functionbody);
543 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
545 gcc_assert (!VEC_length(cp_class_binding,
546 current_binding_level->class_shadowed));
548 /* We used to use KEEP == 2 to indicate that the new block should go
549 at the beginning of the list of blocks at this binding level,
550 rather than the end. This hack is no longer used. */
551 gcc_assert (keep == 0 || keep == 1);
553 if (current_binding_level->keep)
554 keep = 1;
556 /* Any uses of undefined labels, and any defined labels, now operate
557 under constraints of next binding contour. */
558 if (cfun && !functionbody && named_labels)
559 htab_traverse (named_labels, poplevel_named_label_1,
560 current_binding_level);
562 /* Get the decls in the order they were written.
563 Usually current_binding_level->names is in reverse order.
564 But parameter decls were previously put in forward order. */
566 if (reverse)
567 current_binding_level->names
568 = decls = nreverse (current_binding_level->names);
569 else
570 decls = current_binding_level->names;
572 /* If there were any declarations or structure tags in that level,
573 or if this level is a function body,
574 create a BLOCK to record them for the life of this function. */
575 block = NULL_TREE;
576 if (keep == 1 || functionbody)
577 block = make_node (BLOCK);
578 if (block != NULL_TREE)
580 BLOCK_VARS (block) = decls;
581 BLOCK_SUBBLOCKS (block) = subblocks;
584 /* In each subblock, record that this is its superior. */
585 if (keep >= 0)
586 for (link = subblocks; link; link = BLOCK_CHAIN (link))
587 BLOCK_SUPERCONTEXT (link) = block;
589 /* We still support the old for-scope rules, whereby the variables
590 in a for-init statement were in scope after the for-statement
591 ended. We only use the new rules if flag_new_for_scope is
592 nonzero. */
593 leaving_for_scope
594 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
596 /* Before we remove the declarations first check for unused variables. */
597 if (warn_unused_variable
598 && !processing_template_decl)
599 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
600 if (TREE_CODE (decl) == VAR_DECL
601 && ! TREE_USED (decl)
602 && ! DECL_IN_SYSTEM_HEADER (decl)
603 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
604 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
606 /* Remove declarations for all the DECLs in this level. */
607 for (link = decls; link; link = TREE_CHAIN (link))
609 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
610 && DECL_NAME (link))
612 tree name = DECL_NAME (link);
613 cxx_binding *ob;
614 tree ns_binding;
616 ob = outer_binding (name,
617 IDENTIFIER_BINDING (name),
618 /*class_p=*/true);
619 if (!ob)
620 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
621 else
622 ns_binding = NULL_TREE;
624 if (ob && ob->scope == current_binding_level->level_chain)
625 /* We have something like:
627 int i;
628 for (int i; ;);
630 and we are leaving the `for' scope. There's no reason to
631 keep the binding of the inner `i' in this case. */
632 pop_binding (name, link);
633 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
634 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
635 /* Here, we have something like:
637 typedef int I;
639 void f () {
640 for (int I; ;);
643 We must pop the for-scope binding so we know what's a
644 type and what isn't. */
645 pop_binding (name, link);
646 else
648 /* Mark this VAR_DECL as dead so that we can tell we left it
649 there only for backward compatibility. */
650 DECL_DEAD_FOR_LOCAL (link) = 1;
652 /* Keep track of what should have happened when we
653 popped the binding. */
654 if (ob && ob->value)
656 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
657 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
660 /* Add it to the list of dead variables in the next
661 outermost binding to that we can remove these when we
662 leave that binding. */
663 current_binding_level->level_chain->dead_vars_from_for
664 = tree_cons (NULL_TREE, link,
665 current_binding_level->level_chain->
666 dead_vars_from_for);
668 /* Although we don't pop the cxx_binding, we do clear
669 its SCOPE since the scope is going away now. */
670 IDENTIFIER_BINDING (name)->scope
671 = current_binding_level->level_chain;
674 else
676 tree name;
678 /* Remove the binding. */
679 decl = link;
681 if (TREE_CODE (decl) == TREE_LIST)
682 decl = TREE_VALUE (decl);
683 name = decl;
685 if (TREE_CODE (name) == OVERLOAD)
686 name = OVL_FUNCTION (name);
688 gcc_assert (DECL_P (name));
689 pop_binding (DECL_NAME (name), decl);
693 /* Remove declarations for any `for' variables from inner scopes
694 that we kept around. */
695 for (link = current_binding_level->dead_vars_from_for;
696 link; link = TREE_CHAIN (link))
697 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
699 /* Restore the IDENTIFIER_TYPE_VALUEs. */
700 for (link = current_binding_level->type_shadowed;
701 link; link = TREE_CHAIN (link))
702 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
704 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
705 for (link = current_binding_level->shadowed_labels;
706 link;
707 link = TREE_CHAIN (link))
708 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
710 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
711 list if a `using' declaration put them there. The debugging
712 back ends won't understand OVERLOAD, so we remove them here.
713 Because the BLOCK_VARS are (temporarily) shared with
714 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
715 popped all the bindings. */
716 if (block)
718 tree* d;
720 for (d = &BLOCK_VARS (block); *d; )
722 if (TREE_CODE (*d) == TREE_LIST)
723 *d = TREE_CHAIN (*d);
724 else
725 d = &TREE_CHAIN (*d);
729 /* If the level being exited is the top level of a function,
730 check over all the labels. */
731 if (functionbody)
733 /* Since this is the top level block of a function, the vars are
734 the function's parameters. Don't leave them in the BLOCK
735 because they are found in the FUNCTION_DECL instead. */
736 BLOCK_VARS (block) = 0;
737 pop_labels (block);
740 kind = current_binding_level->kind;
741 if (kind == sk_cleanup)
743 tree stmt;
745 /* If this is a temporary binding created for a cleanup, then we'll
746 have pushed a statement list level. Pop that, create a new
747 BIND_EXPR for the block, and insert it into the stream. */
748 stmt = pop_stmt_list (current_binding_level->statement_list);
749 stmt = c_build_bind_expr (block, stmt);
750 add_stmt (stmt);
753 leave_scope ();
754 if (functionbody)
756 /* The current function is being defined, so its DECL_INITIAL
757 should be error_mark_node. */
758 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
759 DECL_INITIAL (current_function_decl) = block;
761 else if (block)
762 current_binding_level->blocks
763 = chainon (current_binding_level->blocks, block);
765 /* If we did not make a block for the level just exited,
766 any blocks made for inner levels
767 (since they cannot be recorded as subblocks in that level)
768 must be carried forward so they will later become subblocks
769 of something else. */
770 else if (subblocks)
771 current_binding_level->blocks
772 = chainon (current_binding_level->blocks, subblocks);
774 /* Each and every BLOCK node created here in `poplevel' is important
775 (e.g. for proper debugging information) so if we created one
776 earlier, mark it as "used". */
777 if (block)
778 TREE_USED (block) = 1;
780 /* All temporary bindings created for cleanups are popped silently. */
781 if (kind == sk_cleanup)
782 goto restart;
784 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
787 /* Insert BLOCK at the end of the list of subblocks of the
788 current binding level. This is used when a BIND_EXPR is expanded,
789 to handle the BLOCK node inside the BIND_EXPR. */
791 void
792 insert_block (tree block)
794 TREE_USED (block) = 1;
795 current_binding_level->blocks
796 = chainon (current_binding_level->blocks, block);
799 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
800 itself, calling F for each. The DATA is passed to F as well. */
802 static int
803 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
805 int result = 0;
806 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
808 result |= (*f) (namespace, data);
810 for (; current; current = TREE_CHAIN (current))
811 result |= walk_namespaces_r (current, f, data);
813 return result;
816 /* Walk all the namespaces, calling F for each. The DATA is passed to
817 F as well. */
820 walk_namespaces (walk_namespaces_fn f, void* data)
822 return walk_namespaces_r (global_namespace, f, data);
825 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
826 DATA is non-NULL, this is the last time we will call
827 wrapup_global_declarations for this NAMESPACE. */
830 wrapup_globals_for_namespace (tree namespace, void* data)
832 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
833 VEC(tree,gc) *statics = level->static_decls;
834 tree *vec = VEC_address (tree, statics);
835 int len = VEC_length (tree, statics);
836 int last_time = (data != 0);
838 if (last_time)
840 check_global_declarations (vec, len);
841 emit_debug_global_declarations (vec, len);
842 return 0;
845 /* Write out any globals that need to be output. */
846 return wrapup_global_declarations (vec, len);
850 /* In C++, you don't have to write `struct S' to refer to `S'; you
851 can just use `S'. We accomplish this by creating a TYPE_DECL as
852 if the user had written `typedef struct S S'. Create and return
853 the TYPE_DECL for TYPE. */
855 tree
856 create_implicit_typedef (tree name, tree type)
858 tree decl;
860 decl = build_decl (TYPE_DECL, name, type);
861 DECL_ARTIFICIAL (decl) = 1;
862 /* There are other implicit type declarations, like the one *within*
863 a class that allows you to write `S::S'. We must distinguish
864 amongst these. */
865 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
866 TYPE_NAME (type) = decl;
868 return decl;
871 /* Remember a local name for name-mangling purposes. */
873 static void
874 push_local_name (tree decl)
876 size_t i, nelts;
877 tree t, name;
879 timevar_push (TV_NAME_LOOKUP);
881 name = DECL_NAME (decl);
883 nelts = VEC_length (tree, local_names);
884 for (i = 0; i < nelts; i++)
886 t = VEC_index (tree, local_names, i);
887 if (DECL_NAME (t) == name)
889 if (!DECL_LANG_SPECIFIC (decl))
890 retrofit_lang_decl (decl);
891 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
892 if (DECL_LANG_SPECIFIC (t))
893 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
894 else
895 DECL_DISCRIMINATOR (decl) = 1;
897 VEC_replace (tree, local_names, i, decl);
898 timevar_pop (TV_NAME_LOOKUP);
899 return;
903 VEC_safe_push (tree, gc, local_names, decl);
904 timevar_pop (TV_NAME_LOOKUP);
907 /* Subroutine of duplicate_decls: return truthvalue of whether
908 or not types of these decls match.
910 For C++, we must compare the parameter list so that `int' can match
911 `int&' in a parameter position, but `int&' is not confused with
912 `const int&'. */
915 decls_match (tree newdecl, tree olddecl)
917 int types_match;
919 if (newdecl == olddecl)
920 return 1;
922 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
923 /* If the two DECLs are not even the same kind of thing, we're not
924 interested in their types. */
925 return 0;
927 if (TREE_CODE (newdecl) == FUNCTION_DECL)
929 tree f1 = TREE_TYPE (newdecl);
930 tree f2 = TREE_TYPE (olddecl);
931 tree p1 = TYPE_ARG_TYPES (f1);
932 tree p2 = TYPE_ARG_TYPES (f2);
934 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
935 && ! (DECL_EXTERN_C_P (newdecl)
936 && DECL_EXTERN_C_P (olddecl)))
937 return 0;
939 if (TREE_CODE (f1) != TREE_CODE (f2))
940 return 0;
942 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
944 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
945 && (DECL_BUILT_IN (olddecl)
946 #ifndef NO_IMPLICIT_EXTERN_C
947 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
948 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
949 #endif
952 types_match = self_promoting_args_p (p1);
953 if (p1 == void_list_node)
954 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
956 #ifndef NO_IMPLICIT_EXTERN_C
957 else if (p1 == NULL_TREE
958 && (DECL_EXTERN_C_P (olddecl)
959 && DECL_IN_SYSTEM_HEADER (olddecl)
960 && !DECL_CLASS_SCOPE_P (olddecl))
961 && (DECL_EXTERN_C_P (newdecl)
962 && DECL_IN_SYSTEM_HEADER (newdecl)
963 && !DECL_CLASS_SCOPE_P (newdecl)))
965 types_match = self_promoting_args_p (p2);
966 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
968 #endif
969 else
970 types_match = compparms (p1, p2);
972 else
973 types_match = 0;
975 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
977 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
978 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
979 return 0;
981 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
982 DECL_TEMPLATE_PARMS (olddecl)))
983 return 0;
985 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
986 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
987 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
988 else
989 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
990 DECL_TEMPLATE_RESULT (newdecl));
992 else
994 /* Need to check scope for variable declaration (VAR_DECL).
995 For typedef (TYPE_DECL), scope is ignored. */
996 if (TREE_CODE (newdecl) == VAR_DECL
997 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
998 /* [dcl.link]
999 Two declarations for an object with C language linkage
1000 with the same name (ignoring the namespace that qualify
1001 it) that appear in different namespace scopes refer to
1002 the same object. */
1003 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1004 return 0;
1006 if (TREE_TYPE (newdecl) == error_mark_node)
1007 types_match = TREE_TYPE (olddecl) == error_mark_node;
1008 else if (TREE_TYPE (olddecl) == NULL_TREE)
1009 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1010 else if (TREE_TYPE (newdecl) == NULL_TREE)
1011 types_match = 0;
1012 else
1013 types_match = comptypes (TREE_TYPE (newdecl),
1014 TREE_TYPE (olddecl),
1015 COMPARE_REDECLARATION);
1018 return types_match;
1021 /* If NEWDECL is `static' and an `extern' was seen previously,
1022 warn about it. OLDDECL is the previous declaration.
1024 Note that this does not apply to the C++ case of declaring
1025 a variable `extern const' and then later `const'.
1027 Don't complain about built-in functions, since they are beyond
1028 the user's control. */
1030 void
1031 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1033 tree name;
1035 if (TREE_CODE (newdecl) == TYPE_DECL
1036 || TREE_CODE (newdecl) == TEMPLATE_DECL
1037 || TREE_CODE (newdecl) == CONST_DECL
1038 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1039 return;
1041 /* Don't get confused by static member functions; that's a different
1042 use of `static'. */
1043 if (TREE_CODE (newdecl) == FUNCTION_DECL
1044 && DECL_STATIC_FUNCTION_P (newdecl))
1045 return;
1047 /* If the old declaration was `static', or the new one isn't, then
1048 then everything is OK. */
1049 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1050 return;
1052 /* It's OK to declare a builtin function as `static'. */
1053 if (TREE_CODE (olddecl) == FUNCTION_DECL
1054 && DECL_ARTIFICIAL (olddecl))
1055 return;
1057 name = DECL_ASSEMBLER_NAME (newdecl);
1058 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1059 pedwarn ("previous declaration of %q+D", olddecl);
1062 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1063 function templates. If their exception specifications do not
1064 match, issue a diagnostic. */
1066 static void
1067 check_redeclaration_exception_specification (tree new_decl,
1068 tree old_decl)
1070 tree new_type;
1071 tree old_type;
1072 tree new_exceptions;
1073 tree old_exceptions;
1075 new_type = TREE_TYPE (new_decl);
1076 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1077 old_type = TREE_TYPE (old_decl);
1078 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1080 /* [except.spec]
1082 If any declaration of a function has an exception-specification,
1083 all declarations, including the definition and an explicit
1084 specialization, of that function shall have an
1085 exception-specification with the same set of type-ids. */
1086 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1087 && ! DECL_IS_BUILTIN (old_decl)
1088 && flag_exceptions
1089 && !comp_except_specs (new_exceptions, old_exceptions,
1090 /*exact=*/true))
1092 error ("declaration of %qF throws different exceptions", new_decl);
1093 error ("from previous declaration %q+F", old_decl);
1097 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1098 && lookup_attribute ("gnu_inline", \
1099 DECL_ATTRIBUTES (fn)))
1101 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1102 If the redeclaration is invalid, a diagnostic is issued, and the
1103 error_mark_node is returned. Otherwise, OLDDECL is returned.
1105 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1106 returned.
1108 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1110 tree
1111 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1113 unsigned olddecl_uid = DECL_UID (olddecl);
1114 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1115 int new_defines_function = 0;
1116 tree new_template;
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 /* If a function is explicitly declared "throw ()", propagate that to
1280 the corresponding builtin. */
1281 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1282 && DECL_ANTICIPATED (olddecl)
1283 && TREE_NOTHROW (newdecl)
1284 && !TREE_NOTHROW (olddecl)
1285 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1286 && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1287 && types_match)
1288 TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1290 /* Whether or not the builtin can throw exceptions has no
1291 bearing on this declarator. */
1292 TREE_NOTHROW (olddecl) = 0;
1294 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1296 /* If a builtin function is redeclared as `static', merge
1297 the declarations, but make the original one static. */
1298 DECL_THIS_STATIC (olddecl) = 1;
1299 TREE_PUBLIC (olddecl) = 0;
1301 /* Make the old declaration consistent with the new one so
1302 that all remnants of the builtin-ness of this function
1303 will be banished. */
1304 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1305 COPY_DECL_RTL (newdecl, olddecl);
1308 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1310 /* C++ Standard, 3.3, clause 4:
1311 "[Note: a namespace name or a class template name must be unique
1312 in its declarative region (7.3.2, clause 14). ]" */
1313 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1314 && TREE_CODE (newdecl) != NAMESPACE_DECL
1315 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1316 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1317 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1318 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1320 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1321 && TREE_CODE (newdecl) != TYPE_DECL)
1322 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1323 && TREE_CODE (olddecl) != TYPE_DECL))
1325 /* We do nothing special here, because C++ does such nasty
1326 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1327 get shadowed, and know that if we need to find a TYPE_DECL
1328 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1329 slot of the identifier. */
1330 return NULL_TREE;
1333 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1334 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1335 || (TREE_CODE (olddecl) == FUNCTION_DECL
1336 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1337 return NULL_TREE;
1340 error ("%q#D redeclared as different kind of symbol", newdecl);
1341 if (TREE_CODE (olddecl) == TREE_LIST)
1342 olddecl = TREE_VALUE (olddecl);
1343 error ("previous declaration of %q+#D", olddecl);
1345 return error_mark_node;
1347 else if (!types_match)
1349 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1350 /* These are certainly not duplicate declarations; they're
1351 from different scopes. */
1352 return NULL_TREE;
1354 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1356 /* The name of a class template may not be declared to refer to
1357 any other template, class, function, object, namespace, value,
1358 or type in the same scope. */
1359 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1360 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1362 error ("declaration of template %q#D", newdecl);
1363 error ("conflicts with previous declaration %q+#D", olddecl);
1365 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1366 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1367 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1368 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1369 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1370 DECL_TEMPLATE_PARMS (olddecl))
1371 /* Template functions can be disambiguated by
1372 return type. */
1373 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1374 TREE_TYPE (TREE_TYPE (olddecl))))
1376 error ("new declaration %q#D", newdecl);
1377 error ("ambiguates old declaration %q+#D", olddecl);
1379 return NULL_TREE;
1381 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1383 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1385 error ("declaration of C function %q#D conflicts with",
1386 newdecl);
1387 error ("previous declaration %q+#D here", olddecl);
1389 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1390 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1392 error ("new declaration %q#D", newdecl);
1393 error ("ambiguates old declaration %q+#D", olddecl);
1394 return error_mark_node;
1396 else
1397 return NULL_TREE;
1399 else
1401 error ("conflicting declaration %q#D", newdecl);
1402 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1403 return error_mark_node;
1406 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1407 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1408 && (!DECL_TEMPLATE_INFO (newdecl)
1409 || (DECL_TI_TEMPLATE (newdecl)
1410 != DECL_TI_TEMPLATE (olddecl))))
1411 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1412 && (!DECL_TEMPLATE_INFO (olddecl)
1413 || (DECL_TI_TEMPLATE (olddecl)
1414 != DECL_TI_TEMPLATE (newdecl))))))
1415 /* It's OK to have a template specialization and a non-template
1416 with the same type, or to have specializations of two
1417 different templates with the same type. Note that if one is a
1418 specialization, and the other is an instantiation of the same
1419 template, that we do not exit at this point. That situation
1420 can occur if we instantiate a template class, and then
1421 specialize one of its methods. This situation is valid, but
1422 the declarations must be merged in the usual way. */
1423 return NULL_TREE;
1424 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1425 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1426 && !DECL_USE_TEMPLATE (newdecl))
1427 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1428 && !DECL_USE_TEMPLATE (olddecl))))
1429 /* One of the declarations is a template instantiation, and the
1430 other is not a template at all. That's OK. */
1431 return NULL_TREE;
1432 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1434 /* In [namespace.alias] we have:
1436 In a declarative region, a namespace-alias-definition can be
1437 used to redefine a namespace-alias declared in that declarative
1438 region to refer only to the namespace to which it already
1439 refers.
1441 Therefore, if we encounter a second alias directive for the same
1442 alias, we can just ignore the second directive. */
1443 if (DECL_NAMESPACE_ALIAS (newdecl)
1444 && (DECL_NAMESPACE_ALIAS (newdecl)
1445 == DECL_NAMESPACE_ALIAS (olddecl)))
1446 return olddecl;
1447 /* [namespace.alias]
1449 A namespace-name or namespace-alias shall not be declared as
1450 the name of any other entity in the same declarative region.
1451 A namespace-name defined at global scope shall not be
1452 declared as the name of any other entity in any global scope
1453 of the program. */
1454 error ("declaration of namespace %qD conflicts with", newdecl);
1455 error ("previous declaration of namespace %q+D here", olddecl);
1456 return error_mark_node;
1458 else
1460 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1461 if (errmsg)
1463 error (errmsg, newdecl);
1464 if (DECL_NAME (olddecl) != NULL_TREE)
1465 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1466 ? "%q+#D previously defined here"
1467 : "%q+#D previously declared here", olddecl);
1468 return error_mark_node;
1470 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1471 && DECL_INITIAL (olddecl) != NULL_TREE
1472 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1473 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1475 /* Prototype decl follows defn w/o prototype. */
1476 warning (0, "prototype for %q+#D", newdecl);
1477 warning (0, "%Jfollows non-prototype definition here", olddecl);
1479 else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1480 || TREE_CODE (olddecl) == VAR_DECL)
1481 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1483 /* [dcl.link]
1484 If two declarations of the same function or object
1485 specify different linkage-specifications ..., the program
1486 is ill-formed.... Except for functions with C++ linkage,
1487 a function declaration without a linkage specification
1488 shall not precede the first linkage specification for
1489 that function. A function can be declared without a
1490 linkage specification after an explicit linkage
1491 specification has been seen; the linkage explicitly
1492 specified in the earlier declaration is not affected by
1493 such a function declaration.
1495 DR 563 raises the question why the restrictions on
1496 functions should not also apply to objects. Older
1497 versions of G++ silently ignore the linkage-specification
1498 for this example:
1500 namespace N {
1501 extern int i;
1502 extern "C" int i;
1505 which is clearly wrong. Therefore, we now treat objects
1506 like functions. */
1507 if (current_lang_depth () == 0)
1509 /* There is no explicit linkage-specification, so we use
1510 the linkage from the previous declaration. */
1511 if (!DECL_LANG_SPECIFIC (newdecl))
1512 retrofit_lang_decl (newdecl);
1513 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1515 else
1517 error ("previous declaration of %q+#D with %qL linkage",
1518 olddecl, DECL_LANGUAGE (olddecl));
1519 error ("conflicts with new declaration with %qL linkage",
1520 DECL_LANGUAGE (newdecl));
1524 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1526 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1528 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1529 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1530 int i = 1;
1532 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1533 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1535 for (; t1 && t1 != void_list_node;
1536 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1537 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1539 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1540 TREE_PURPOSE (t2)))
1542 pedwarn ("default argument given for parameter %d of %q#D",
1543 i, newdecl);
1544 pedwarn ("after previous specification in %q+#D", olddecl);
1546 else
1548 error ("default argument given for parameter %d of %q#D",
1549 i, newdecl);
1550 error ("after previous specification in %q+#D",
1551 olddecl);
1555 if (DECL_DECLARED_INLINE_P (newdecl)
1556 && ! DECL_DECLARED_INLINE_P (olddecl)
1557 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1559 warning (0, "%q#D was used before it was declared inline", newdecl);
1560 warning (0, "%Jprevious non-inline declaration here", olddecl);
1565 /* Do not merge an implicit typedef with an explicit one. In:
1567 class A;
1569 typedef class A A __attribute__ ((foo));
1571 the attribute should apply only to the typedef. */
1572 if (TREE_CODE (olddecl) == TYPE_DECL
1573 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1574 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1575 return NULL_TREE;
1577 /* If new decl is `static' and an `extern' was seen previously,
1578 warn about it. */
1579 warn_extern_redeclared_static (newdecl, olddecl);
1581 /* We have committed to returning 1 at this point. */
1582 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1584 /* Now that functions must hold information normally held
1585 by field decls, there is extra work to do so that
1586 declaration information does not get destroyed during
1587 definition. */
1588 if (DECL_VINDEX (olddecl))
1589 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1590 if (DECL_CONTEXT (olddecl))
1591 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1592 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1593 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1594 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1595 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1596 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1597 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1598 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1599 SET_OVERLOADED_OPERATOR_CODE
1600 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1601 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1603 /* Optionally warn about more than one declaration for the same
1604 name, but don't warn about a function declaration followed by a
1605 definition. */
1606 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1607 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1608 /* Don't warn about extern decl followed by definition. */
1609 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1610 /* Don't warn about friends, let add_friend take care of it. */
1611 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1613 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1614 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1618 /* Deal with C++: must preserve virtual function table size. */
1619 if (TREE_CODE (olddecl) == TYPE_DECL)
1621 tree newtype = TREE_TYPE (newdecl);
1622 tree oldtype = TREE_TYPE (olddecl);
1624 if (newtype != error_mark_node && oldtype != error_mark_node
1625 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1626 CLASSTYPE_FRIEND_CLASSES (newtype)
1627 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1629 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1632 /* Copy all the DECL_... slots specified in the new decl
1633 except for any that we copy here from the old type. */
1634 DECL_ATTRIBUTES (newdecl)
1635 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1637 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1639 tree old_result;
1640 tree new_result;
1641 old_result = DECL_TEMPLATE_RESULT (olddecl);
1642 new_result = DECL_TEMPLATE_RESULT (newdecl);
1643 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1644 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1645 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1646 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1648 DECL_ATTRIBUTES (old_result)
1649 = (*targetm.merge_decl_attributes) (old_result, new_result);
1651 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1653 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1654 && DECL_INITIAL (new_result))
1656 if (DECL_INITIAL (old_result))
1658 DECL_INLINE (old_result) = 0;
1659 DECL_UNINLINABLE (old_result) = 1;
1661 else
1663 DECL_INLINE (old_result) = DECL_INLINE (new_result);
1664 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1666 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1667 DECL_NOT_REALLY_EXTERN (old_result)
1668 = DECL_NOT_REALLY_EXTERN (new_result);
1669 DECL_INTERFACE_KNOWN (old_result)
1670 = DECL_INTERFACE_KNOWN (new_result);
1671 DECL_DECLARED_INLINE_P (old_result)
1672 = DECL_DECLARED_INLINE_P (new_result);
1673 DECL_DISREGARD_INLINE_LIMITS (old_result)
1674 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1677 else
1679 DECL_INLINE (old_result)
1680 |= DECL_INLINE (new_result);
1681 DECL_DECLARED_INLINE_P (old_result)
1682 |= DECL_DECLARED_INLINE_P (new_result);
1683 DECL_DISREGARD_INLINE_LIMITS (old_result)
1684 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1685 check_redeclaration_exception_specification (newdecl, olddecl);
1689 /* If the new declaration is a definition, update the file and
1690 line information on the declaration, and also make
1691 the old declaration the same definition. */
1692 if (DECL_INITIAL (new_result) != NULL_TREE)
1694 DECL_SOURCE_LOCATION (olddecl)
1695 = DECL_SOURCE_LOCATION (old_result)
1696 = DECL_SOURCE_LOCATION (newdecl);
1697 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1698 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1699 DECL_ARGUMENTS (old_result)
1700 = DECL_ARGUMENTS (new_result);
1703 return olddecl;
1706 if (types_match)
1708 /* Automatically handles default parameters. */
1709 tree oldtype = TREE_TYPE (olddecl);
1710 tree newtype;
1712 /* Merge the data types specified in the two decls. */
1713 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1715 /* If merge_types produces a non-typedef type, just use the old type. */
1716 if (TREE_CODE (newdecl) == TYPE_DECL
1717 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1718 newtype = oldtype;
1720 if (TREE_CODE (newdecl) == VAR_DECL)
1722 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1723 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1724 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1725 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1726 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1727 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1729 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1730 if (DECL_LANG_SPECIFIC (olddecl)
1731 && CP_DECL_THREADPRIVATE_P (olddecl))
1733 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1734 if (!DECL_LANG_SPECIFIC (newdecl))
1735 retrofit_lang_decl (newdecl);
1737 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1738 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1742 /* Do this after calling `merge_types' so that default
1743 parameters don't confuse us. */
1744 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1745 check_redeclaration_exception_specification (newdecl, olddecl);
1746 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1748 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1749 check_default_args (newdecl);
1751 /* Lay the type out, unless already done. */
1752 if (! same_type_p (newtype, oldtype)
1753 && TREE_TYPE (newdecl) != error_mark_node
1754 && !(processing_template_decl && uses_template_parms (newdecl)))
1755 layout_type (TREE_TYPE (newdecl));
1757 if ((TREE_CODE (newdecl) == VAR_DECL
1758 || TREE_CODE (newdecl) == PARM_DECL
1759 || TREE_CODE (newdecl) == RESULT_DECL
1760 || TREE_CODE (newdecl) == FIELD_DECL
1761 || TREE_CODE (newdecl) == TYPE_DECL)
1762 && !(processing_template_decl && uses_template_parms (newdecl)))
1763 layout_decl (newdecl, 0);
1765 /* Merge the type qualifiers. */
1766 if (TREE_READONLY (newdecl))
1767 TREE_READONLY (olddecl) = 1;
1768 if (TREE_THIS_VOLATILE (newdecl))
1769 TREE_THIS_VOLATILE (olddecl) = 1;
1770 if (TREE_NOTHROW (newdecl))
1771 TREE_NOTHROW (olddecl) = 1;
1773 /* Merge deprecatedness. */
1774 if (TREE_DEPRECATED (newdecl))
1775 TREE_DEPRECATED (olddecl) = 1;
1777 /* Merge the initialization information. */
1778 if (DECL_INITIAL (newdecl) == NULL_TREE
1779 && DECL_INITIAL (olddecl) != NULL_TREE)
1781 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1782 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1783 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1784 && DECL_LANG_SPECIFIC (newdecl)
1785 && DECL_LANG_SPECIFIC (olddecl))
1787 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1788 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1792 /* Merge the section attribute.
1793 We want to issue an error if the sections conflict but that must be
1794 done later in decl_attributes since we are called before attributes
1795 are assigned. */
1796 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1797 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1799 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1801 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1802 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1803 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1804 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1805 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1806 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1807 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1808 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1809 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1810 /* Keep the old RTL. */
1811 COPY_DECL_RTL (olddecl, newdecl);
1813 else if (TREE_CODE (newdecl) == VAR_DECL
1814 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1816 /* Keep the old RTL. We cannot keep the old RTL if the old
1817 declaration was for an incomplete object and the new
1818 declaration is not since many attributes of the RTL will
1819 change. */
1820 COPY_DECL_RTL (olddecl, newdecl);
1823 /* If cannot merge, then use the new type and qualifiers,
1824 and don't preserve the old rtl. */
1825 else
1827 /* Clean out any memory we had of the old declaration. */
1828 tree oldstatic = value_member (olddecl, static_aggregates);
1829 if (oldstatic)
1830 TREE_VALUE (oldstatic) = error_mark_node;
1832 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1833 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1834 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1835 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1838 /* Merge the storage class information. */
1839 merge_weak (newdecl, olddecl);
1841 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1842 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1843 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1844 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1845 if (! DECL_EXTERNAL (olddecl))
1846 DECL_EXTERNAL (newdecl) = 0;
1848 new_template = NULL_TREE;
1849 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1851 bool new_redefines_gnu_inline = false;
1853 if (new_defines_function
1854 && ((DECL_INTERFACE_KNOWN (olddecl)
1855 && TREE_CODE (olddecl) == FUNCTION_DECL)
1856 || (TREE_CODE (olddecl) == TEMPLATE_DECL
1857 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1858 == FUNCTION_DECL))))
1860 tree fn = olddecl;
1862 if (TREE_CODE (fn) == TEMPLATE_DECL)
1863 fn = DECL_TEMPLATE_RESULT (olddecl);
1865 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1868 if (!new_redefines_gnu_inline)
1870 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1871 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1872 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1874 DECL_TEMPLATE_INSTANTIATED (newdecl)
1875 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1877 /* If the OLDDECL is an instantiation and/or specialization,
1878 then the NEWDECL must be too. But, it may not yet be marked
1879 as such if the caller has created NEWDECL, but has not yet
1880 figured out that it is a redeclaration. */
1881 if (!DECL_USE_TEMPLATE (newdecl))
1882 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1884 /* Don't really know how much of the language-specific
1885 values we should copy from old to new. */
1886 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1887 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1888 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1889 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1890 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1891 if (DECL_TEMPLATE_INFO (newdecl))
1892 new_template = DECL_TI_TEMPLATE (newdecl);
1893 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1894 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1895 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1896 olddecl_friend = DECL_FRIEND_P (olddecl);
1897 hidden_friend = (DECL_ANTICIPATED (olddecl)
1898 && DECL_HIDDEN_FRIEND_P (olddecl)
1899 && newdecl_is_friend);
1901 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1902 if (TREE_CODE (newdecl) == FUNCTION_DECL
1903 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1905 DECL_BEFRIENDING_CLASSES (newdecl)
1906 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1907 DECL_BEFRIENDING_CLASSES (olddecl));
1908 /* DECL_THUNKS is only valid for virtual functions,
1909 otherwise it is a DECL_FRIEND_CONTEXT. */
1910 if (DECL_VIRTUAL_P (newdecl))
1911 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1915 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1917 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1918 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1920 /* If newdecl is not a specialization, then it is not a
1921 template-related function at all. And that means that we
1922 should have exited above, returning 0. */
1923 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1925 if (TREE_USED (olddecl))
1926 /* From [temp.expl.spec]:
1928 If a template, a member template or the member of a class
1929 template is explicitly specialized then that
1930 specialization shall be declared before the first use of
1931 that specialization that would cause an implicit
1932 instantiation to take place, in every translation unit in
1933 which such a use occurs. */
1934 error ("explicit specialization of %qD after first use",
1935 olddecl);
1937 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1939 /* Don't propagate visibility from the template to the
1940 specialization here. We'll do that in determine_visibility if
1941 appropriate. */
1942 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
1944 /* [temp.expl.spec/14] We don't inline explicit specialization
1945 just because the primary template says so. */
1947 else if (new_defines_function && DECL_INITIAL (olddecl))
1949 /* C++ is always in in unit-at-a-time mode, so we never
1950 inline re-defined extern inline functions. */
1951 DECL_INLINE (newdecl) = 0;
1952 DECL_UNINLINABLE (newdecl) = 1;
1954 else
1956 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1957 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1959 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1961 /* If either decl says `inline', this fn is inline, unless
1962 its definition was passed already. */
1963 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1964 DECL_INLINE (olddecl) = 1;
1965 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1967 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1968 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1970 DECL_DISREGARD_INLINE_LIMITS (newdecl)
1971 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1972 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1973 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
1976 /* Preserve abstractness on cloned [cd]tors. */
1977 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1979 if (! types_match)
1981 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1982 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1983 COPY_DECL_RTL (newdecl, olddecl);
1985 if (! types_match || new_defines_function)
1987 /* These need to be copied so that the names are available.
1988 Note that if the types do match, we'll preserve inline
1989 info and other bits, but if not, we won't. */
1990 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1991 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1993 if (new_defines_function)
1994 /* If defining a function declared with other language
1995 linkage, use the previously declared language linkage. */
1996 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1997 else if (types_match)
1999 /* If redeclaring a builtin function, and not a definition,
2000 it stays built in. */
2001 if (DECL_BUILT_IN (olddecl))
2003 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2004 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2005 /* If we're keeping the built-in definition, keep the rtl,
2006 regardless of declaration matches. */
2007 COPY_DECL_RTL (olddecl, newdecl);
2010 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2011 /* Don't clear out the arguments if we're redefining a function. */
2012 if (DECL_ARGUMENTS (olddecl))
2013 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2016 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2017 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2019 /* Now preserve various other info from the definition. */
2020 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2021 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2022 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2023 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2025 /* Warn about conflicting visibility specifications. */
2026 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2027 && DECL_VISIBILITY_SPECIFIED (newdecl)
2028 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2030 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
2031 "because it", newdecl);
2032 warning (OPT_Wattributes, "%Jconflicts with previous "
2033 "declaration here", olddecl);
2035 /* Choose the declaration which specified visibility. */
2036 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2038 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2039 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2041 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2042 so keep this behavior. */
2043 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2045 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2046 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2049 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2050 with that from NEWDECL below. */
2051 if (DECL_LANG_SPECIFIC (olddecl))
2053 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2054 != DECL_LANG_SPECIFIC (newdecl));
2055 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2058 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2060 int function_size;
2062 function_size = sizeof (struct tree_decl_common);
2064 memcpy ((char *) olddecl + sizeof (struct tree_common),
2065 (char *) newdecl + sizeof (struct tree_common),
2066 function_size - sizeof (struct tree_common));
2068 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2069 (char *) newdecl + sizeof (struct tree_decl_common),
2070 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2071 if (new_template)
2072 /* If newdecl is a template instantiation, it is possible that
2073 the following sequence of events has occurred:
2075 o A friend function was declared in a class template. The
2076 class template was instantiated.
2078 o The instantiation of the friend declaration was
2079 recorded on the instantiation list, and is newdecl.
2081 o Later, however, instantiate_class_template called pushdecl
2082 on the newdecl to perform name injection. But, pushdecl in
2083 turn called duplicate_decls when it discovered that another
2084 declaration of a global function with the same name already
2085 existed.
2087 o Here, in duplicate_decls, we decided to clobber newdecl.
2089 If we're going to do that, we'd better make sure that
2090 olddecl, and not newdecl, is on the list of
2091 instantiations so that if we try to do the instantiation
2092 again we won't get the clobbered declaration. */
2093 reregister_specialization (newdecl,
2094 new_template,
2095 olddecl);
2097 else
2099 size_t size = tree_code_size (TREE_CODE (olddecl));
2100 memcpy ((char *) olddecl + sizeof (struct tree_common),
2101 (char *) newdecl + sizeof (struct tree_common),
2102 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2103 switch (TREE_CODE (olddecl))
2105 case LABEL_DECL:
2106 case VAR_DECL:
2107 case RESULT_DECL:
2108 case PARM_DECL:
2109 case FIELD_DECL:
2110 case TYPE_DECL:
2111 case CONST_DECL:
2113 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2114 (char *) newdecl + sizeof (struct tree_decl_common),
2115 size - sizeof (struct tree_decl_common)
2116 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2118 break;
2119 default:
2120 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2121 (char *) newdecl + sizeof (struct tree_decl_common),
2122 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2123 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2124 break;
2127 DECL_UID (olddecl) = olddecl_uid;
2128 if (olddecl_friend)
2129 DECL_FRIEND_P (olddecl) = 1;
2130 if (hidden_friend)
2132 DECL_ANTICIPATED (olddecl) = 1;
2133 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2136 /* NEWDECL contains the merged attribute lists.
2137 Update OLDDECL to be the same. */
2138 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2140 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2141 so that encode_section_info has a chance to look at the new decl
2142 flags and attributes. */
2143 if (DECL_RTL_SET_P (olddecl)
2144 && (TREE_CODE (olddecl) == FUNCTION_DECL
2145 || (TREE_CODE (olddecl) == VAR_DECL
2146 && TREE_STATIC (olddecl))))
2147 make_decl_rtl (olddecl);
2149 /* The NEWDECL will no longer be needed. Because every out-of-class
2150 declaration of a member results in a call to duplicate_decls,
2151 freeing these nodes represents in a significant savings. */
2152 ggc_free (newdecl);
2154 return olddecl;
2157 /* Return zero if the declaration NEWDECL is valid
2158 when the declaration OLDDECL (assumed to be for the same name)
2159 has already been seen.
2160 Otherwise return an error message format string with a %s
2161 where the identifier should go. */
2163 static const char *
2164 redeclaration_error_message (tree newdecl, tree olddecl)
2166 if (TREE_CODE (newdecl) == TYPE_DECL)
2168 /* Because C++ can put things into name space for free,
2169 constructs like "typedef struct foo { ... } foo"
2170 would look like an erroneous redeclaration. */
2171 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2172 return NULL;
2173 else
2174 return "redefinition of %q#D";
2176 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2178 /* If this is a pure function, its olddecl will actually be
2179 the original initialization to `0' (which we force to call
2180 abort()). Don't complain about redefinition in this case. */
2181 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2182 && DECL_INITIAL (olddecl) == NULL_TREE)
2183 return NULL;
2185 /* If both functions come from different namespaces, this is not
2186 a redeclaration - this is a conflict with a used function. */
2187 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2188 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2189 && ! decls_match (olddecl, newdecl))
2190 return "%qD conflicts with used function";
2192 /* We'll complain about linkage mismatches in
2193 warn_extern_redeclared_static. */
2195 /* Defining the same name twice is no good. */
2196 if (DECL_INITIAL (olddecl) != NULL_TREE
2197 && DECL_INITIAL (newdecl) != NULL_TREE)
2199 if (DECL_NAME (olddecl) == NULL_TREE)
2200 return "%q#D not declared in class";
2201 else if (!GNU_INLINE_P (olddecl)
2202 || GNU_INLINE_P (newdecl))
2203 return "redefinition of %q#D";
2206 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2208 bool olda = GNU_INLINE_P (olddecl);
2209 bool newa = GNU_INLINE_P (newdecl);
2211 if (olda != newa)
2213 if (newa)
2214 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2215 else
2216 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2220 return NULL;
2222 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2224 tree nt, ot;
2226 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2228 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2229 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2230 return "redefinition of %q#D";
2231 return NULL;
2234 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2235 || (DECL_TEMPLATE_RESULT (newdecl)
2236 == DECL_TEMPLATE_RESULT (olddecl)))
2237 return NULL;
2239 nt = DECL_TEMPLATE_RESULT (newdecl);
2240 if (DECL_TEMPLATE_INFO (nt))
2241 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2242 ot = DECL_TEMPLATE_RESULT (olddecl);
2243 if (DECL_TEMPLATE_INFO (ot))
2244 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2245 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2246 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2247 return "redefinition of %q#D";
2249 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2251 bool olda = GNU_INLINE_P (ot);
2252 bool newa = GNU_INLINE_P (nt);
2254 if (olda != newa)
2256 if (newa)
2257 return "%q+D redeclared inline with %<gnu_inline%> attribute";
2258 else
2259 return "%q+D redeclared inline without %<gnu_inline%> attribute";
2263 /* Core issue #226 (C++0x):
2265 If a friend function template declaration specifies a
2266 default template-argument, that declaration shall be a
2267 definition and shall be the only declaration of the
2268 function template in the translation unit. */
2269 if ((cxx_dialect != cxx98)
2270 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2271 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2272 /*is_primary=*/1, /*is_partial=*/0,
2273 /*is_friend_decl=*/2))
2274 return "redeclaration of friend %q#D may not have default template arguments";
2276 return NULL;
2278 else if (TREE_CODE (newdecl) == VAR_DECL
2279 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2280 && (! DECL_LANG_SPECIFIC (olddecl)
2281 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2282 || DECL_THREAD_LOCAL_P (newdecl)))
2284 /* Only variables can be thread-local, and all declarations must
2285 agree on this property. */
2286 if (DECL_THREAD_LOCAL_P (newdecl))
2287 return "thread-local declaration of %q#D follows "
2288 "non-thread-local declaration";
2289 else
2290 return "non-thread-local declaration of %q#D follows "
2291 "thread-local declaration";
2293 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2295 /* The objects have been declared at namespace scope. If either
2296 is a member of an anonymous union, then this is an invalid
2297 redeclaration. For example:
2299 int i;
2300 union { int i; };
2302 is invalid. */
2303 if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2304 || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2305 return "redeclaration of %q#D";
2306 /* If at least one declaration is a reference, there is no
2307 conflict. For example:
2309 int i = 3;
2310 extern int i;
2312 is valid. */
2313 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2314 return NULL;
2315 /* Reject two definitions. */
2316 return "redefinition of %q#D";
2318 else
2320 /* Objects declared with block scope: */
2321 /* Reject two definitions, and reject a definition
2322 together with an external reference. */
2323 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2324 return "redeclaration of %q#D";
2325 return NULL;
2329 /* Hash and equality functions for the named_label table. */
2331 static hashval_t
2332 named_label_entry_hash (const void *data)
2334 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2335 return DECL_UID (ent->label_decl);
2338 static int
2339 named_label_entry_eq (const void *a, const void *b)
2341 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2342 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2343 return ent_a->label_decl == ent_b->label_decl;
2346 /* Create a new label, named ID. */
2348 static tree
2349 make_label_decl (tree id, int local_p)
2351 struct named_label_entry *ent;
2352 void **slot;
2353 tree decl;
2355 decl = build_decl (LABEL_DECL, id, void_type_node);
2357 DECL_CONTEXT (decl) = current_function_decl;
2358 DECL_MODE (decl) = VOIDmode;
2359 C_DECLARED_LABEL_FLAG (decl) = local_p;
2361 /* Say where one reference is to the label, for the sake of the
2362 error if it is not defined. */
2363 DECL_SOURCE_LOCATION (decl) = input_location;
2365 /* Record the fact that this identifier is bound to this label. */
2366 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2368 /* Create the label htab for the function on demand. */
2369 if (!named_labels)
2370 named_labels = htab_create_ggc (13, named_label_entry_hash,
2371 named_label_entry_eq, NULL);
2373 /* Record this label on the list of labels used in this function.
2374 We do this before calling make_label_decl so that we get the
2375 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2376 ent = GGC_CNEW (struct named_label_entry);
2377 ent->label_decl = decl;
2379 slot = htab_find_slot (named_labels, ent, INSERT);
2380 gcc_assert (*slot == NULL);
2381 *slot = ent;
2383 return decl;
2386 /* Look for a label named ID in the current function. If one cannot
2387 be found, create one. (We keep track of used, but undefined,
2388 labels, and complain about them at the end of a function.) */
2390 tree
2391 lookup_label (tree id)
2393 tree decl;
2395 timevar_push (TV_NAME_LOOKUP);
2396 /* You can't use labels at global scope. */
2397 if (current_function_decl == NULL_TREE)
2399 error ("label %qE referenced outside of any function", id);
2400 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2403 /* See if we've already got this label. */
2404 decl = IDENTIFIER_LABEL_VALUE (id);
2405 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2406 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2408 decl = make_label_decl (id, /*local_p=*/0);
2409 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2412 /* Declare a local label named ID. */
2414 tree
2415 declare_local_label (tree id)
2417 tree decl, shadow;
2419 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2420 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2421 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2422 current_binding_level->shadowed_labels);
2423 current_binding_level->shadowed_labels = shadow;
2425 decl = make_label_decl (id, /*local_p=*/1);
2426 TREE_VALUE (shadow) = decl;
2428 return decl;
2431 /* Returns nonzero if it is ill-formed to jump past the declaration of
2432 DECL. Returns 2 if it's also a real problem. */
2434 static int
2435 decl_jump_unsafe (tree decl)
2437 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2438 || TREE_TYPE (decl) == error_mark_node)
2439 return 0;
2441 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2442 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2443 return 2;
2445 if (pod_type_p (TREE_TYPE (decl)))
2446 return 0;
2448 /* The POD stuff is just pedantry; why should it matter if the class
2449 contains a field of pointer to member type? */
2450 return 1;
2453 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2455 static void
2456 identify_goto (tree decl, const location_t *locus)
2458 if (decl)
2459 pedwarn ("jump to label %qD", decl);
2460 else
2461 pedwarn ("jump to case label");
2462 if (locus)
2463 pedwarn ("%H from here", locus);
2466 /* Check that a single previously seen jump to a newly defined label
2467 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2468 the jump context; NAMES are the names in scope in LEVEL at the jump
2469 context; LOCUS is the source position of the jump or 0. Returns
2470 true if all is well. */
2472 static bool
2473 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2474 bool exited_omp, const location_t *locus)
2476 struct cp_binding_level *b;
2477 bool identified = false, saw_eh = false, saw_omp = false;
2479 if (exited_omp)
2481 identify_goto (decl, locus);
2482 error (" exits OpenMP structured block");
2483 identified = saw_omp = true;
2486 for (b = current_binding_level; b ; b = b->level_chain)
2488 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2490 for (new_decls = b->names; new_decls != old_decls;
2491 new_decls = TREE_CHAIN (new_decls))
2493 int problem = decl_jump_unsafe (new_decls);
2494 if (! problem)
2495 continue;
2497 if (!identified)
2499 identify_goto (decl, locus);
2500 identified = true;
2502 if (problem > 1)
2503 error (" crosses initialization of %q+#D", new_decls);
2504 else
2505 pedwarn (" enters scope of non-POD %q+#D", new_decls);
2508 if (b == level)
2509 break;
2510 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2512 if (!identified)
2514 identify_goto (decl, locus);
2515 identified = true;
2517 if (b->kind == sk_try)
2518 error (" enters try block");
2519 else
2520 error (" enters catch block");
2521 saw_eh = true;
2523 if (b->kind == sk_omp && !saw_omp)
2525 if (!identified)
2527 identify_goto (decl, locus);
2528 identified = true;
2530 error (" enters OpenMP structured block");
2531 saw_omp = true;
2535 return !identified;
2538 static void
2539 check_previous_goto (tree decl, struct named_label_use_entry *use)
2541 check_previous_goto_1 (decl, use->binding_level,
2542 use->names_in_scope, use->in_omp_scope,
2543 &use->o_goto_locus);
2546 static bool
2547 check_switch_goto (struct cp_binding_level* level)
2549 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2552 /* Check that a new jump to a label DECL is OK. Called by
2553 finish_goto_stmt. */
2555 void
2556 check_goto (tree decl)
2558 struct named_label_entry *ent, dummy;
2559 bool saw_catch = false, identified = false;
2560 tree bad;
2562 /* We can't know where a computed goto is jumping.
2563 So we assume that it's OK. */
2564 if (TREE_CODE (decl) != LABEL_DECL)
2565 return;
2567 /* We didn't record any information about this label when we created it,
2568 and there's not much point since it's trivial to analyze as a return. */
2569 if (decl == cdtor_label)
2570 return;
2572 dummy.label_decl = decl;
2573 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2574 gcc_assert (ent != NULL);
2576 /* If the label hasn't been defined yet, defer checking. */
2577 if (! DECL_INITIAL (decl))
2579 struct named_label_use_entry *new_use;
2581 /* Don't bother creating another use if the last goto had the
2582 same data, and will therefore create the same set of errors. */
2583 if (ent->uses
2584 && ent->uses->names_in_scope == current_binding_level->names)
2585 return;
2587 new_use = GGC_NEW (struct named_label_use_entry);
2588 new_use->binding_level = current_binding_level;
2589 new_use->names_in_scope = current_binding_level->names;
2590 new_use->o_goto_locus = input_location;
2591 new_use->in_omp_scope = false;
2593 new_use->next = ent->uses;
2594 ent->uses = new_use;
2595 return;
2598 if (ent->in_try_scope || ent->in_catch_scope
2599 || ent->in_omp_scope || ent->bad_decls)
2601 pedwarn ("jump to label %q+D", decl);
2602 pedwarn (" from here");
2603 identified = true;
2606 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2608 tree b = TREE_VALUE (bad);
2609 int u = decl_jump_unsafe (b);
2611 if (u > 1 && DECL_ARTIFICIAL (b))
2613 /* Can't skip init of __exception_info. */
2614 error ("%J enters catch block", b);
2615 saw_catch = true;
2617 else if (u > 1)
2618 error (" skips initialization of %q+#D", b);
2619 else
2620 pedwarn (" enters scope of non-POD %q+#D", b);
2623 if (ent->in_try_scope)
2624 error (" enters try block");
2625 else if (ent->in_catch_scope && !saw_catch)
2626 error (" enters catch block");
2628 if (ent->in_omp_scope)
2629 error (" enters OpenMP structured block");
2630 else if (flag_openmp)
2632 struct cp_binding_level *b;
2633 for (b = current_binding_level; b ; b = b->level_chain)
2635 if (b == ent->binding_level)
2636 break;
2637 if (b->kind == sk_omp)
2639 if (!identified)
2641 pedwarn ("jump to label %q+D", decl);
2642 pedwarn (" from here");
2643 identified = true;
2645 error (" exits OpenMP structured block");
2646 break;
2652 /* Check that a return is ok wrt OpenMP structured blocks.
2653 Called by finish_return_stmt. Returns true if all is well. */
2655 bool
2656 check_omp_return (void)
2658 struct cp_binding_level *b;
2659 for (b = current_binding_level; b ; b = b->level_chain)
2660 if (b->kind == sk_omp)
2662 error ("invalid exit from OpenMP structured block");
2663 return false;
2665 return true;
2668 /* Define a label, specifying the location in the source file.
2669 Return the LABEL_DECL node for the label. */
2671 tree
2672 define_label (location_t location, tree name)
2674 struct named_label_entry *ent, dummy;
2675 struct cp_binding_level *p;
2676 tree decl;
2678 timevar_push (TV_NAME_LOOKUP);
2680 decl = lookup_label (name);
2682 dummy.label_decl = decl;
2683 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2684 gcc_assert (ent != NULL);
2686 /* After labels, make any new cleanups in the function go into their
2687 own new (temporary) binding contour. */
2688 for (p = current_binding_level;
2689 p->kind != sk_function_parms;
2690 p = p->level_chain)
2691 p->more_cleanups_ok = 0;
2693 if (name == get_identifier ("wchar_t"))
2694 pedwarn ("label named wchar_t");
2696 if (DECL_INITIAL (decl) != NULL_TREE)
2698 error ("duplicate label %qD", decl);
2699 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
2701 else
2703 struct named_label_use_entry *use;
2705 /* Mark label as having been defined. */
2706 DECL_INITIAL (decl) = error_mark_node;
2707 /* Say where in the source. */
2708 DECL_SOURCE_LOCATION (decl) = location;
2710 ent->binding_level = current_binding_level;
2711 ent->names_in_scope = current_binding_level->names;
2713 for (use = ent->uses; use ; use = use->next)
2714 check_previous_goto (decl, use);
2715 ent->uses = NULL;
2718 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2721 struct cp_switch
2723 struct cp_binding_level *level;
2724 struct cp_switch *next;
2725 /* The SWITCH_STMT being built. */
2726 tree switch_stmt;
2727 /* A splay-tree mapping the low element of a case range to the high
2728 element, or NULL_TREE if there is no high element. Used to
2729 determine whether or not a new case label duplicates an old case
2730 label. We need a tree, rather than simply a hash table, because
2731 of the GNU case range extension. */
2732 splay_tree cases;
2735 /* A stack of the currently active switch statements. The innermost
2736 switch statement is on the top of the stack. There is no need to
2737 mark the stack for garbage collection because it is only active
2738 during the processing of the body of a function, and we never
2739 collect at that point. */
2741 static struct cp_switch *switch_stack;
2743 /* Called right after a switch-statement condition is parsed.
2744 SWITCH_STMT is the switch statement being parsed. */
2746 void
2747 push_switch (tree switch_stmt)
2749 struct cp_switch *p = XNEW (struct cp_switch);
2750 p->level = current_binding_level;
2751 p->next = switch_stack;
2752 p->switch_stmt = switch_stmt;
2753 p->cases = splay_tree_new (case_compare, NULL, NULL);
2754 switch_stack = p;
2757 void
2758 pop_switch (void)
2760 struct cp_switch *cs = switch_stack;
2761 location_t switch_location;
2763 /* Emit warnings as needed. */
2764 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2765 switch_location = EXPR_LOCATION (cs->switch_stmt);
2766 else
2767 switch_location = input_location;
2768 if (!processing_template_decl)
2769 c_do_switch_warnings (cs->cases, switch_location,
2770 SWITCH_STMT_TYPE (cs->switch_stmt),
2771 SWITCH_STMT_COND (cs->switch_stmt));
2773 splay_tree_delete (cs->cases);
2774 switch_stack = switch_stack->next;
2775 free (cs);
2778 /* Note that we've seen a definition of a case label, and complain if this
2779 is a bad place for one. */
2781 tree
2782 finish_case_label (tree low_value, tree high_value)
2784 tree cond, r;
2785 struct cp_binding_level *p;
2787 if (processing_template_decl)
2789 tree label;
2791 /* For templates, just add the case label; we'll do semantic
2792 analysis at instantiation-time. */
2793 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2794 return add_stmt (build_case_label (low_value, high_value, label));
2797 /* Find the condition on which this switch statement depends. */
2798 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2799 if (cond && TREE_CODE (cond) == TREE_LIST)
2800 cond = TREE_VALUE (cond);
2802 if (!check_switch_goto (switch_stack->level))
2803 return error_mark_node;
2805 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2806 low_value, high_value);
2808 /* After labels, make any new cleanups in the function go into their
2809 own new (temporary) binding contour. */
2810 for (p = current_binding_level;
2811 p->kind != sk_function_parms;
2812 p = p->level_chain)
2813 p->more_cleanups_ok = 0;
2815 return r;
2818 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2820 static hashval_t
2821 typename_hash (const void* k)
2823 hashval_t hash;
2824 const_tree const t = (const_tree) k;
2826 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2827 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2829 return hash;
2832 typedef struct typename_info {
2833 tree scope;
2834 tree name;
2835 tree template_id;
2836 bool enum_p;
2837 bool class_p;
2838 } typename_info;
2840 /* Compare two TYPENAME_TYPEs. K1 is really of type `tree', K2 is
2841 really of type `typename_info*' */
2843 static int
2844 typename_compare (const void * k1, const void * k2)
2846 const_tree const t1 = (const_tree) k1;
2847 const typename_info *const t2 = (const typename_info *) k2;
2849 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2850 && TYPE_CONTEXT (t1) == t2->scope
2851 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2852 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2853 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2856 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2857 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2859 Returns the new TYPENAME_TYPE. */
2861 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2863 static tree
2864 build_typename_type (tree context, tree name, tree fullname,
2865 enum tag_types tag_type)
2867 tree t;
2868 tree d;
2869 typename_info ti;
2870 void **e;
2871 hashval_t hash;
2873 if (typename_htab == NULL)
2874 typename_htab = htab_create_ggc (61, &typename_hash,
2875 &typename_compare, NULL);
2877 ti.scope = FROB_CONTEXT (context);
2878 ti.name = name;
2879 ti.template_id = fullname;
2880 ti.enum_p = tag_type == enum_type;
2881 ti.class_p = (tag_type == class_type
2882 || tag_type == record_type
2883 || tag_type == union_type);
2884 hash = (htab_hash_pointer (ti.scope)
2885 ^ htab_hash_pointer (ti.name));
2887 /* See if we already have this type. */
2888 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2889 if (*e)
2890 t = (tree) *e;
2891 else
2893 /* Build the TYPENAME_TYPE. */
2894 t = cxx_make_type (TYPENAME_TYPE);
2895 TYPE_CONTEXT (t) = ti.scope;
2896 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2897 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2898 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2900 /* Build the corresponding TYPE_DECL. */
2901 d = build_decl (TYPE_DECL, name, t);
2902 TYPE_NAME (TREE_TYPE (d)) = d;
2903 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2904 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2905 DECL_ARTIFICIAL (d) = 1;
2907 /* Store it in the hash table. */
2908 *e = t;
2910 /* TYPENAME_TYPEs must always be compared structurally, because
2911 they may or may not resolve down to another type depending on
2912 the currently open classes. */
2913 SET_TYPE_STRUCTURAL_EQUALITY (t);
2916 return t;
2919 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2920 provided to name the type. Returns an appropriate type, unless an
2921 error occurs, in which case error_mark_node is returned. If we
2922 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2923 return that, rather than the _TYPE it corresponds to, in other
2924 cases we look through the type decl. If TF_ERROR is set, complain
2925 about errors, otherwise be quiet. */
2927 tree
2928 make_typename_type (tree context, tree name, enum tag_types tag_type,
2929 tsubst_flags_t complain)
2931 tree fullname;
2932 tree t;
2933 bool want_template;
2935 if (name == error_mark_node
2936 || context == NULL_TREE
2937 || context == error_mark_node)
2938 return error_mark_node;
2940 if (TYPE_P (name))
2942 if (!(TYPE_LANG_SPECIFIC (name)
2943 && (CLASSTYPE_IS_TEMPLATE (name)
2944 || CLASSTYPE_USE_TEMPLATE (name))))
2945 name = TYPE_IDENTIFIER (name);
2946 else
2947 /* Create a TEMPLATE_ID_EXPR for the type. */
2948 name = build_nt (TEMPLATE_ID_EXPR,
2949 CLASSTYPE_TI_TEMPLATE (name),
2950 CLASSTYPE_TI_ARGS (name));
2952 else if (TREE_CODE (name) == TYPE_DECL)
2953 name = DECL_NAME (name);
2955 fullname = name;
2957 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2959 name = TREE_OPERAND (name, 0);
2960 if (TREE_CODE (name) == TEMPLATE_DECL)
2961 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2962 else if (TREE_CODE (name) == OVERLOAD)
2964 error ("%qD is not a type", name);
2965 return error_mark_node;
2968 if (TREE_CODE (name) == TEMPLATE_DECL)
2970 error ("%qD used without template parameters", name);
2971 return error_mark_node;
2973 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2974 gcc_assert (TYPE_P (context));
2976 /* When the CONTEXT is a dependent type, NAME could refer to a
2977 dependent base class of CONTEXT. So we cannot peek inside it,
2978 even if CONTEXT is a currently open scope. */
2979 if (dependent_type_p (context))
2980 return build_typename_type (context, name, fullname, tag_type);
2982 if (!MAYBE_CLASS_TYPE_P (context))
2984 if (complain & tf_error)
2985 error ("%q#T is not a class", context);
2986 return error_mark_node;
2989 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
2991 /* We should only set WANT_TYPE when we're a nested typename type.
2992 Then we can give better diagnostics if we find a non-type. */
2993 t = lookup_field (context, name, 0, /*want_type=*/true);
2994 if (!t)
2996 if (complain & tf_error)
2997 error (want_template ? "no class template named %q#T in %q#T"
2998 : "no type named %q#T in %q#T", name, context);
2999 return error_mark_node;
3002 if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3004 if (complain & tf_error)
3005 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3006 context, name, t);
3007 return error_mark_node;
3009 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3011 if (complain & tf_error)
3012 error ("%<typename %T::%D%> names %q#T, which is not a type",
3013 context, name, t);
3014 return error_mark_node;
3017 if (complain & tf_error)
3018 perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3020 if (want_template)
3021 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3022 NULL_TREE, context,
3023 /*entering_scope=*/0,
3024 tf_warning_or_error | tf_user);
3026 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3027 t = TREE_TYPE (t);
3029 return t;
3032 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3033 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3034 in which case error_mark_node is returned.
3036 If PARM_LIST is non-NULL, also make sure that the template parameter
3037 list of TEMPLATE_DECL matches.
3039 If COMPLAIN zero, don't complain about any errors that occur. */
3041 tree
3042 make_unbound_class_template (tree context, tree name, tree parm_list,
3043 tsubst_flags_t complain)
3045 tree t;
3046 tree d;
3048 if (TYPE_P (name))
3049 name = TYPE_IDENTIFIER (name);
3050 else if (DECL_P (name))
3051 name = DECL_NAME (name);
3052 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3054 if (!dependent_type_p (context)
3055 || currently_open_class (context))
3057 tree tmpl = NULL_TREE;
3059 if (MAYBE_CLASS_TYPE_P (context))
3060 tmpl = lookup_field (context, name, 0, false);
3062 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3064 if (complain & tf_error)
3065 error ("no class template named %q#T in %q#T", name, context);
3066 return error_mark_node;
3069 if (parm_list
3070 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3072 if (complain & tf_error)
3074 error ("template parameters do not match template");
3075 error ("%q+D declared here", tmpl);
3077 return error_mark_node;
3080 if (complain & tf_error)
3081 perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3083 return tmpl;
3086 /* Build the UNBOUND_CLASS_TEMPLATE. */
3087 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3088 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3089 TREE_TYPE (t) = NULL_TREE;
3090 SET_TYPE_STRUCTURAL_EQUALITY (t);
3092 /* Build the corresponding TEMPLATE_DECL. */
3093 d = build_decl (TEMPLATE_DECL, name, t);
3094 TYPE_NAME (TREE_TYPE (d)) = d;
3095 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3096 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3097 DECL_ARTIFICIAL (d) = 1;
3098 DECL_TEMPLATE_PARMS (d) = parm_list;
3100 return t;
3105 /* Push the declarations of builtin types into the namespace.
3106 RID_INDEX is the index of the builtin type in the array
3107 RID_POINTERS. NAME is the name used when looking up the builtin
3108 type. TYPE is the _TYPE node for the builtin type. */
3110 void
3111 record_builtin_type (enum rid rid_index,
3112 const char* name,
3113 tree type)
3115 tree rname = NULL_TREE, tname = NULL_TREE;
3116 tree tdecl = NULL_TREE;
3118 if ((int) rid_index < (int) RID_MAX)
3119 rname = ridpointers[(int) rid_index];
3120 if (name)
3121 tname = get_identifier (name);
3123 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3124 eliminated. Built-in types should not be looked up name; their
3125 names are keywords that the parser can recognize. However, there
3126 is code in c-common.c that uses identifier_global_value to look
3127 up built-in types by name. */
3128 if (tname)
3130 tdecl = build_decl (TYPE_DECL, tname, type);
3131 DECL_ARTIFICIAL (tdecl) = 1;
3132 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3134 if (rname)
3136 if (!tdecl)
3138 tdecl = build_decl (TYPE_DECL, rname, type);
3139 DECL_ARTIFICIAL (tdecl) = 1;
3141 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3144 if (!TYPE_NAME (type))
3145 TYPE_NAME (type) = tdecl;
3147 if (tdecl)
3148 debug_hooks->type_decl (tdecl, 0);
3151 /* Record one of the standard Java types.
3152 * Declare it as having the given NAME.
3153 * If SIZE > 0, it is the size of one of the integral types;
3154 * otherwise it is the negative of the size of one of the other types. */
3156 static tree
3157 record_builtin_java_type (const char* name, int size)
3159 tree type, decl;
3160 if (size > 0)
3161 type = make_signed_type (size);
3162 else if (size > -32)
3163 { /* "__java_char" or ""__java_boolean". */
3164 type = make_unsigned_type (-size);
3165 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3167 else
3168 { /* "__java_float" or ""__java_double". */
3169 type = make_node (REAL_TYPE);
3170 TYPE_PRECISION (type) = - size;
3171 layout_type (type);
3173 record_builtin_type (RID_MAX, name, type);
3174 decl = TYPE_NAME (type);
3176 /* Suppress generate debug symbol entries for these types,
3177 since for normal C++ they are just clutter.
3178 However, push_lang_context undoes this if extern "Java" is seen. */
3179 DECL_IGNORED_P (decl) = 1;
3181 TYPE_FOR_JAVA (type) = 1;
3182 return type;
3185 /* Push a type into the namespace so that the back ends ignore it. */
3187 static void
3188 record_unknown_type (tree type, const char* name)
3190 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3191 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3192 DECL_IGNORED_P (decl) = 1;
3193 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3194 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3195 TYPE_ALIGN (type) = 1;
3196 TYPE_USER_ALIGN (type) = 0;
3197 TYPE_MODE (type) = TYPE_MODE (void_type_node);
3200 /* A string for which we should create an IDENTIFIER_NODE at
3201 startup. */
3203 typedef struct predefined_identifier
3205 /* The name of the identifier. */
3206 const char *const name;
3207 /* The place where the IDENTIFIER_NODE should be stored. */
3208 tree *const node;
3209 /* Nonzero if this is the name of a constructor or destructor. */
3210 const int ctor_or_dtor_p;
3211 } predefined_identifier;
3213 /* Create all the predefined identifiers. */
3215 static void
3216 initialize_predefined_identifiers (void)
3218 const predefined_identifier *pid;
3220 /* A table of identifiers to create at startup. */
3221 static const predefined_identifier predefined_identifiers[] = {
3222 { "C++", &lang_name_cplusplus, 0 },
3223 { "C", &lang_name_c, 0 },
3224 { "Java", &lang_name_java, 0 },
3225 /* Some of these names have a trailing space so that it is
3226 impossible for them to conflict with names written by users. */
3227 { "__ct ", &ctor_identifier, 1 },
3228 { "__base_ctor ", &base_ctor_identifier, 1 },
3229 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3230 { "__dt ", &dtor_identifier, 1 },
3231 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3232 { "__base_dtor ", &base_dtor_identifier, 1 },
3233 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3234 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3235 { "nelts", &nelts_identifier, 0 },
3236 { THIS_NAME, &this_identifier, 0 },
3237 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3238 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3239 { "_vptr", &vptr_identifier, 0 },
3240 { "__vtt_parm", &vtt_parm_identifier, 0 },
3241 { "::", &global_scope_name, 0 },
3242 { "std", &std_identifier, 0 },
3243 { NULL, NULL, 0 }
3246 for (pid = predefined_identifiers; pid->name; ++pid)
3248 *pid->node = get_identifier (pid->name);
3249 if (pid->ctor_or_dtor_p)
3250 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3254 /* Create the predefined scalar types of C,
3255 and some nodes representing standard constants (0, 1, (void *)0).
3256 Initialize the global binding level.
3257 Make definitions for built-in primitive functions. */
3259 void
3260 cxx_init_decl_processing (void)
3262 tree void_ftype;
3263 tree void_ftype_ptr;
3265 build_common_tree_nodes (flag_signed_char, false);
3267 /* Create all the identifiers we need. */
3268 initialize_predefined_identifiers ();
3270 /* Create the global variables. */
3271 push_to_top_level ();
3273 current_function_decl = NULL_TREE;
3274 current_binding_level = NULL;
3275 /* Enter the global namespace. */
3276 gcc_assert (global_namespace == NULL_TREE);
3277 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3278 void_type_node);
3279 TREE_PUBLIC (global_namespace) = 1;
3280 begin_scope (sk_namespace, global_namespace);
3282 current_lang_name = NULL_TREE;
3284 if (flag_visibility_ms_compat)
3285 default_visibility = VISIBILITY_HIDDEN;
3287 /* Initially, C. */
3288 current_lang_name = lang_name_c;
3290 /* Create the `std' namespace. */
3291 push_namespace (std_identifier);
3292 std_node = current_namespace;
3293 pop_namespace ();
3295 c_common_nodes_and_builtins ();
3297 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3298 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3299 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3300 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3301 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3302 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3303 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3304 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3306 integer_two_node = build_int_cst (NULL_TREE, 2);
3307 integer_three_node = build_int_cst (NULL_TREE, 3);
3309 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3310 truthvalue_type_node = boolean_type_node;
3311 truthvalue_false_node = boolean_false_node;
3312 truthvalue_true_node = boolean_true_node;
3314 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3316 #if 0
3317 record_builtin_type (RID_MAX, NULL, string_type_node);
3318 #endif
3320 delta_type_node = ptrdiff_type_node;
3321 vtable_index_type = ptrdiff_type_node;
3323 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3324 void_ftype = build_function_type (void_type_node, void_list_node);
3325 void_ftype_ptr = build_function_type (void_type_node,
3326 tree_cons (NULL_TREE,
3327 ptr_type_node,
3328 void_list_node));
3329 void_ftype_ptr
3330 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3332 /* C++ extensions */
3334 unknown_type_node = make_node (UNKNOWN_TYPE);
3335 record_unknown_type (unknown_type_node, "unknown type");
3337 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3338 TREE_TYPE (unknown_type_node) = unknown_type_node;
3340 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3341 result. */
3342 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3343 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3346 /* Make sure we get a unique function type, so we can give
3347 its pointer type a name. (This wins for gdb.) */
3348 tree vfunc_type = make_node (FUNCTION_TYPE);
3349 TREE_TYPE (vfunc_type) = integer_type_node;
3350 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3351 layout_type (vfunc_type);
3353 vtable_entry_type = build_pointer_type (vfunc_type);
3355 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3357 vtbl_type_node
3358 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3359 layout_type (vtbl_type_node);
3360 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3361 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3362 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3363 layout_type (vtbl_ptr_type_node);
3364 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3366 push_namespace (get_identifier ("__cxxabiv1"));
3367 abi_node = current_namespace;
3368 pop_namespace ();
3370 global_type_node = make_node (LANG_TYPE);
3371 record_unknown_type (global_type_node, "global type");
3373 /* Now, C++. */
3374 current_lang_name = lang_name_cplusplus;
3377 tree bad_alloc_id;
3378 tree bad_alloc_type_node;
3379 tree bad_alloc_decl;
3380 tree newtype, deltype;
3381 tree ptr_ftype_sizetype;
3383 push_namespace (std_identifier);
3384 bad_alloc_id = get_identifier ("bad_alloc");
3385 bad_alloc_type_node = make_class_type (RECORD_TYPE);
3386 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3387 bad_alloc_decl
3388 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3389 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3390 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3391 pop_namespace ();
3393 ptr_ftype_sizetype
3394 = build_function_type (ptr_type_node,
3395 tree_cons (NULL_TREE,
3396 size_type_node,
3397 void_list_node));
3398 newtype = build_exception_variant
3399 (ptr_ftype_sizetype, add_exception_specifier
3400 (NULL_TREE, bad_alloc_type_node, -1));
3401 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3402 push_cp_library_fn (NEW_EXPR, newtype);
3403 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3404 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3405 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3408 abort_fndecl
3409 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3411 /* Perform other language dependent initializations. */
3412 init_class_processing ();
3413 init_rtti_processing ();
3415 if (flag_exceptions)
3416 init_exception_processing ();
3418 if (! supports_one_only ())
3419 flag_weak = 0;
3421 make_fname_decl = cp_make_fname_decl;
3422 start_fname_decls ();
3424 /* Show we use EH for cleanups. */
3425 if (flag_exceptions)
3426 using_eh_for_cleanups ();
3429 /* Generate an initializer for a function naming variable from
3430 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3431 filled in with the type of the init. */
3433 tree
3434 cp_fname_init (const char* name, tree *type_p)
3436 tree domain = NULL_TREE;
3437 tree type;
3438 tree init = NULL_TREE;
3439 size_t length = 0;
3441 if (name)
3443 length = strlen (name);
3444 domain = build_index_type (size_int (length));
3445 init = build_string (length + 1, name);
3448 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3449 type = build_cplus_array_type (type, domain);
3451 *type_p = type;
3453 if (init)
3454 TREE_TYPE (init) = type;
3455 else
3456 init = error_mark_node;
3458 return init;
3461 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3462 decl, NAME is the initialization string and TYPE_DEP indicates whether
3463 NAME depended on the type of the function. We make use of that to detect
3464 __PRETTY_FUNCTION__ inside a template fn. This is being done
3465 lazily at the point of first use, so we mustn't push the decl now. */
3467 static tree
3468 cp_make_fname_decl (tree id, int type_dep)
3470 const char *const name = (type_dep && processing_template_decl
3471 ? NULL : fname_as_string (type_dep));
3472 tree type;
3473 tree init = cp_fname_init (name, &type);
3474 tree decl = build_decl (VAR_DECL, id, type);
3476 if (name)
3477 free (CONST_CAST (char *, name));
3479 /* As we're using pushdecl_with_scope, we must set the context. */
3480 DECL_CONTEXT (decl) = current_function_decl;
3481 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3483 TREE_STATIC (decl) = 1;
3484 TREE_READONLY (decl) = 1;
3485 DECL_ARTIFICIAL (decl) = 1;
3487 TREE_USED (decl) = 1;
3489 if (current_function_decl)
3491 struct cp_binding_level *b = current_binding_level;
3492 while (b->level_chain->kind != sk_function_parms)
3493 b = b->level_chain;
3494 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3495 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3496 LOOKUP_ONLYCONVERTING);
3498 else
3499 pushdecl_top_level_and_finish (decl, init);
3501 return decl;
3504 static tree
3505 builtin_function_1 (tree decl, tree context)
3507 tree id = DECL_NAME (decl);
3508 const char *name = IDENTIFIER_POINTER (id);
3510 retrofit_lang_decl (decl);
3512 /* All nesting of C++ functions is lexical; there is never a "static
3513 chain" in the sense of GNU C nested functions. */
3514 DECL_NO_STATIC_CHAIN (decl) = 1;
3516 DECL_ARTIFICIAL (decl) = 1;
3517 SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3518 SET_DECL_LANGUAGE (decl, lang_c);
3519 /* Runtime library routines are, by definition, available in an
3520 external shared object. */
3521 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3522 DECL_VISIBILITY_SPECIFIED (decl) = 1;
3524 DECL_CONTEXT (decl) = context;
3526 pushdecl (decl);
3528 /* A function in the user's namespace should have an explicit
3529 declaration before it is used. Mark the built-in function as
3530 anticipated but not actually declared. */
3531 if (name[0] != '_' || name[1] != '_')
3532 DECL_ANTICIPATED (decl) = 1;
3533 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3535 size_t len = strlen (name);
3537 /* Treat __*_chk fortification functions as anticipated as well,
3538 unless they are __builtin_*. */
3539 if (len > strlen ("___chk")
3540 && memcmp (name + len - strlen ("_chk"),
3541 "_chk", strlen ("_chk") + 1) == 0)
3542 DECL_ANTICIPATED (decl) = 1;
3545 return decl;
3548 tree
3549 cxx_builtin_function (tree decl)
3551 tree id = DECL_NAME (decl);
3552 const char *name = IDENTIFIER_POINTER (id);
3553 /* All builtins that don't begin with an '_' should additionally
3554 go in the 'std' namespace. */
3555 if (name[0] != '_')
3557 tree decl2 = copy_node(decl);
3558 push_namespace (std_identifier);
3559 builtin_function_1 (decl2, std_node);
3560 pop_namespace ();
3563 return builtin_function_1 (decl, NULL_TREE);
3566 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3567 function. Not called directly. */
3569 static tree
3570 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3572 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3573 DECL_EXTERNAL (fn) = 1;
3574 TREE_PUBLIC (fn) = 1;
3575 DECL_ARTIFICIAL (fn) = 1;
3576 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3577 SET_DECL_LANGUAGE (fn, lang_c);
3578 /* Runtime library routines are, by definition, available in an
3579 external shared object. */
3580 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3581 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3582 return fn;
3585 /* Returns the _DECL for a library function with C linkage.
3586 We assume that such functions never throw; if this is incorrect,
3587 callers should unset TREE_NOTHROW. */
3589 tree
3590 build_library_fn (tree name, tree type)
3592 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3593 TREE_NOTHROW (fn) = 1;
3594 return fn;
3597 /* Returns the _DECL for a library function with C++ linkage. */
3599 static tree
3600 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3602 tree fn = build_library_fn_1 (name, operator_code, type);
3603 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3604 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3605 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3606 return fn;
3609 /* Like build_library_fn, but takes a C string instead of an
3610 IDENTIFIER_NODE. */
3612 tree
3613 build_library_fn_ptr (const char* name, tree type)
3615 return build_library_fn (get_identifier (name), type);
3618 /* Like build_cp_library_fn, but takes a C string instead of an
3619 IDENTIFIER_NODE. */
3621 tree
3622 build_cp_library_fn_ptr (const char* name, tree type)
3624 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3627 /* Like build_library_fn, but also pushes the function so that we will
3628 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3630 tree
3631 push_library_fn (tree name, tree type)
3633 tree fn = build_library_fn (name, type);
3634 pushdecl_top_level (fn);
3635 return fn;
3638 /* Like build_cp_library_fn, but also pushes the function so that it
3639 will be found by normal lookup. */
3641 static tree
3642 push_cp_library_fn (enum tree_code operator_code, tree type)
3644 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3645 operator_code,
3646 type);
3647 pushdecl (fn);
3648 return fn;
3651 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3652 a FUNCTION_TYPE. */
3654 tree
3655 push_void_library_fn (tree name, tree parmtypes)
3657 tree type = build_function_type (void_type_node, parmtypes);
3658 return push_library_fn (name, type);
3661 /* Like push_library_fn, but also note that this function throws
3662 and does not return. Used for __throw_foo and the like. */
3664 tree
3665 push_throw_library_fn (tree name, tree type)
3667 tree fn = push_library_fn (name, type);
3668 TREE_THIS_VOLATILE (fn) = 1;
3669 TREE_NOTHROW (fn) = 0;
3670 return fn;
3673 /* When we call finish_struct for an anonymous union, we create
3674 default copy constructors and such. But, an anonymous union
3675 shouldn't have such things; this function undoes the damage to the
3676 anonymous union type T.
3678 (The reason that we create the synthesized methods is that we don't
3679 distinguish `union { int i; }' from `typedef union { int i; } U'.
3680 The first is an anonymous union; the second is just an ordinary
3681 union type.) */
3683 void
3684 fixup_anonymous_aggr (tree t)
3686 tree *q;
3688 /* Wipe out memory of synthesized methods. */
3689 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3690 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3691 TYPE_HAS_INIT_REF (t) = 0;
3692 TYPE_HAS_CONST_INIT_REF (t) = 0;
3693 TYPE_HAS_ASSIGN_REF (t) = 0;
3694 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3696 /* Splice the implicitly generated functions out of the TYPE_METHODS
3697 list. */
3698 q = &TYPE_METHODS (t);
3699 while (*q)
3701 if (DECL_ARTIFICIAL (*q))
3702 *q = TREE_CHAIN (*q);
3703 else
3704 q = &TREE_CHAIN (*q);
3707 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3708 if (TYPE_METHODS (t))
3710 tree decl = TYPE_MAIN_DECL (t);
3712 if (TREE_CODE (t) != UNION_TYPE)
3713 error ("%Jan anonymous struct cannot have function members", decl);
3714 else
3715 error ("%Jan anonymous union cannot have function members", decl);
3718 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3719 assignment operators (because they cannot have these methods themselves).
3720 For anonymous unions this is already checked because they are not allowed
3721 in any union, otherwise we have to check it. */
3722 if (TREE_CODE (t) != UNION_TYPE)
3724 tree field, type;
3726 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3727 if (TREE_CODE (field) == FIELD_DECL)
3729 type = TREE_TYPE (field);
3730 if (CLASS_TYPE_P (type))
3732 if (TYPE_NEEDS_CONSTRUCTING (type))
3733 error ("member %q+#D with constructor not allowed "
3734 "in anonymous aggregate", field);
3735 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3736 error ("member %q+#D with destructor not allowed "
3737 "in anonymous aggregate", field);
3738 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3739 error ("member %q+#D with copy assignment operator "
3740 "not allowed in anonymous aggregate", field);
3746 /* Make sure that a declaration with no declarator is well-formed, i.e.
3747 just declares a tagged type or anonymous union.
3749 Returns the type declared; or NULL_TREE if none. */
3751 tree
3752 check_tag_decl (cp_decl_specifier_seq *declspecs)
3754 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3755 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3756 /* If a class, struct, or enum type is declared by the DECLSPECS
3757 (i.e, if a class-specifier, enum-specifier, or non-typename
3758 elaborated-type-specifier appears in the DECLSPECS),
3759 DECLARED_TYPE is set to the corresponding type. */
3760 tree declared_type = NULL_TREE;
3761 bool error_p = false;
3763 if (declspecs->multiple_types_p)
3764 error ("multiple types in one declaration");
3765 else if (declspecs->redefined_builtin_type)
3767 if (!in_system_header)
3768 pedwarn ("redeclaration of C++ built-in type %qT",
3769 declspecs->redefined_builtin_type);
3770 return NULL_TREE;
3773 if (declspecs->type
3774 && TYPE_P (declspecs->type)
3775 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3776 && MAYBE_CLASS_TYPE_P (declspecs->type))
3777 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3778 declared_type = declspecs->type;
3779 else if (declspecs->type == error_mark_node)
3780 error_p = true;
3781 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3782 pedwarn ("declaration does not declare anything");
3783 /* Check for an anonymous union. */
3784 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3785 && TYPE_ANONYMOUS_P (declared_type))
3787 /* 7/3 In a simple-declaration, the optional init-declarator-list
3788 can be omitted only when declaring a class (clause 9) or
3789 enumeration (7.2), that is, when the decl-specifier-seq contains
3790 either a class-specifier, an elaborated-type-specifier with
3791 a class-key (9.1), or an enum-specifier. In these cases and
3792 whenever a class-specifier or enum-specifier is present in the
3793 decl-specifier-seq, the identifiers in these specifiers are among
3794 the names being declared by the declaration (as class-name,
3795 enum-names, or enumerators, depending on the syntax). In such
3796 cases, and except for the declaration of an unnamed bit-field (9.6),
3797 the decl-specifier-seq shall introduce one or more names into the
3798 program, or shall redeclare a name introduced by a previous
3799 declaration. [Example:
3800 enum { }; // ill-formed
3801 typedef class { }; // ill-formed
3802 --end example] */
3803 if (saw_typedef)
3805 error ("missing type-name in typedef-declaration");
3806 return NULL_TREE;
3808 /* Anonymous unions are objects, so they can have specifiers. */;
3809 SET_ANON_AGGR_TYPE_P (declared_type);
3811 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3812 && !in_system_header)
3813 pedwarn ("ISO C++ prohibits anonymous structs");
3816 else
3818 if (declspecs->specs[(int)ds_inline]
3819 || declspecs->specs[(int)ds_virtual])
3820 error ("%qs can only be specified for functions",
3821 declspecs->specs[(int)ds_inline]
3822 ? "inline" : "virtual");
3823 else if (saw_friend
3824 && (!current_class_type
3825 || current_scope () != current_class_type))
3826 error ("%<friend%> can only be specified inside a class");
3827 else if (declspecs->specs[(int)ds_explicit])
3828 error ("%<explicit%> can only be specified for constructors");
3829 else if (declspecs->storage_class)
3830 error ("a storage class can only be specified for objects "
3831 "and functions");
3832 else if (declspecs->specs[(int)ds_const]
3833 || declspecs->specs[(int)ds_volatile]
3834 || declspecs->specs[(int)ds_restrict]
3835 || declspecs->specs[(int)ds_thread])
3836 error ("qualifiers can only be specified for objects "
3837 "and functions");
3838 else if (saw_typedef)
3839 warning (0, "%<typedef%> was ignored in this declaration");
3842 return declared_type;
3845 /* Called when a declaration is seen that contains no names to declare.
3846 If its type is a reference to a structure, union or enum inherited
3847 from a containing scope, shadow that tag name for the current scope
3848 with a forward reference.
3849 If its type defines a new named structure or union
3850 or defines an enum, it is valid but we need not do anything here.
3851 Otherwise, it is an error.
3853 C++: may have to grok the declspecs to learn about static,
3854 complain for anonymous unions.
3856 Returns the TYPE declared -- or NULL_TREE if none. */
3858 tree
3859 shadow_tag (cp_decl_specifier_seq *declspecs)
3861 tree t = check_tag_decl (declspecs);
3863 if (!t)
3864 return NULL_TREE;
3866 if (declspecs->attributes)
3868 warning (0, "attribute ignored in declaration of %q+#T", t);
3869 warning (0, "attribute for %q+#T must follow the %qs keyword",
3870 t, class_key_or_enum_as_string (t));
3874 if (maybe_process_partial_specialization (t) == error_mark_node)
3875 return NULL_TREE;
3877 /* This is where the variables in an anonymous union are
3878 declared. An anonymous union declaration looks like:
3879 union { ... } ;
3880 because there is no declarator after the union, the parser
3881 sends that declaration here. */
3882 if (ANON_AGGR_TYPE_P (t))
3884 fixup_anonymous_aggr (t);
3886 if (TYPE_FIELDS (t))
3888 tree decl = grokdeclarator (/*declarator=*/NULL,
3889 declspecs, NORMAL, 0, NULL);
3890 finish_anon_union (decl);
3894 return t;
3897 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3899 tree
3900 groktypename (cp_decl_specifier_seq *type_specifiers,
3901 const cp_declarator *declarator)
3903 tree attrs;
3904 tree type;
3905 attrs = type_specifiers->attributes;
3906 type_specifiers->attributes = NULL_TREE;
3907 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3908 if (attrs && type != error_mark_node)
3910 if (CLASS_TYPE_P (type))
3911 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3912 "outside of definition", type);
3913 else if (MAYBE_CLASS_TYPE_P (type))
3914 /* A template type parameter or other dependent type. */
3915 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
3916 "type %qT without an associated declaration", type);
3917 else
3918 cplus_decl_attributes (&type, attrs, 0);
3920 return type;
3923 /* Process a DECLARATOR for a function-scope variable declaration,
3924 namespace-scope variable declaration, or function declaration.
3925 (Function definitions go through start_function; class member
3926 declarations appearing in the body of the class go through
3927 grokfield.) The DECL corresponding to the DECLARATOR is returned.
3928 If an error occurs, the error_mark_node is returned instead.
3930 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED
3931 is true if an explicit initializer is present, but false if this is
3932 a variable implicitly initialized via a default constructor.
3933 ATTRIBUTES and PREFIX_ATTRIBUTES are GNU attributes associated with
3934 this declaration. *PUSHED_SCOPE_P is set to the scope entered in
3935 this function, if any; if set, the caller is responsible for
3936 calling pop_scope. */
3938 tree
3939 start_decl (const cp_declarator *declarator,
3940 cp_decl_specifier_seq *declspecs,
3941 int initialized,
3942 tree attributes,
3943 tree prefix_attributes,
3944 tree *pushed_scope_p)
3946 tree decl;
3947 tree type;
3948 tree context;
3949 bool was_public;
3950 int flags;
3952 *pushed_scope_p = NULL_TREE;
3954 /* An object declared as __attribute__((deprecated)) suppresses
3955 warnings of uses of other deprecated items. */
3956 if (lookup_attribute ("deprecated", attributes))
3957 deprecated_state = DEPRECATED_SUPPRESS;
3959 attributes = chainon (attributes, prefix_attributes);
3961 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3962 &attributes);
3964 deprecated_state = DEPRECATED_NORMAL;
3966 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3967 || decl == error_mark_node)
3968 return error_mark_node;
3970 type = TREE_TYPE (decl);
3972 context = DECL_CONTEXT (decl);
3974 if (context)
3976 *pushed_scope_p = push_scope (context);
3978 /* We are only interested in class contexts, later. */
3979 if (TREE_CODE (context) == NAMESPACE_DECL)
3980 context = NULL_TREE;
3983 if (initialized)
3984 /* Is it valid for this decl to have an initializer at all?
3985 If not, set INITIALIZED to zero, which will indirectly
3986 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3987 switch (TREE_CODE (decl))
3989 case TYPE_DECL:
3990 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3991 return error_mark_node;
3993 case FUNCTION_DECL:
3994 error ("function %q#D is initialized like a variable", decl);
3995 return error_mark_node;
3997 default:
3998 break;
4001 if (initialized)
4003 if (! toplevel_bindings_p ()
4004 && DECL_EXTERNAL (decl))
4005 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4006 decl);
4007 DECL_EXTERNAL (decl) = 0;
4008 if (toplevel_bindings_p ())
4009 TREE_STATIC (decl) = 1;
4012 /* If this is a typedef that names the class for linkage purposes
4013 (7.1.3p8), apply any attributes directly to the type. */
4014 if (TREE_CODE (decl) == TYPE_DECL
4015 && TAGGED_TYPE_P (TREE_TYPE (decl))
4016 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4017 flags = ATTR_FLAG_TYPE_IN_PLACE;
4018 else
4019 flags = 0;
4021 /* Set attributes here so if duplicate decl, will have proper attributes. */
4022 cplus_decl_attributes (&decl, attributes, flags);
4024 /* Dllimported symbols cannot be defined. Static data members (which
4025 can be initialized in-class and dllimported) go through grokfield,
4026 not here, so we don't need to exclude those decls when checking for
4027 a definition. */
4028 if (initialized && DECL_DLLIMPORT_P (decl))
4030 error ("definition of %q#D is marked %<dllimport%>", decl);
4031 DECL_DLLIMPORT_P (decl) = 0;
4034 /* If #pragma weak was used, mark the decl weak now. */
4035 maybe_apply_pragma_weak (decl);
4037 if (TREE_CODE (decl) == FUNCTION_DECL
4038 && DECL_DECLARED_INLINE_P (decl)
4039 && DECL_UNINLINABLE (decl)
4040 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4041 warning (0, "inline function %q+D given attribute noinline", decl);
4043 if (context && COMPLETE_TYPE_P (complete_type (context)))
4045 if (TREE_CODE (decl) == VAR_DECL)
4047 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4048 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4049 error ("%q#D is not a static member of %q#T", decl, context);
4050 else
4052 if (DECL_CONTEXT (field) != context)
4054 if (!same_type_p (DECL_CONTEXT (field), context))
4055 pedwarn ("ISO C++ does not permit %<%T::%D%> "
4056 "to be defined as %<%T::%D%>",
4057 DECL_CONTEXT (field), DECL_NAME (decl),
4058 context, DECL_NAME (decl));
4059 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4061 if (processing_specialization
4062 && template_class_depth (context) == 0
4063 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4064 error ("template header not allowed in member definition "
4065 "of explicitly specialized class");
4066 /* Static data member are tricky; an in-class initialization
4067 still doesn't provide a definition, so the in-class
4068 declaration will have DECL_EXTERNAL set, but will have an
4069 initialization. Thus, duplicate_decls won't warn
4070 about this situation, and so we check here. */
4071 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4072 error ("duplicate initialization of %qD", decl);
4073 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4074 decl = field;
4077 else
4079 tree field = check_classfn (context, decl,
4080 (processing_template_decl
4081 > template_class_depth (context))
4082 ? current_template_parms
4083 : NULL_TREE);
4084 if (field && field != error_mark_node
4085 && duplicate_decls (decl, field,
4086 /*newdecl_is_friend=*/false))
4087 decl = field;
4090 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
4091 DECL_IN_AGGR_P (decl) = 0;
4092 /* Do not mark DECL as an explicit specialization if it was not
4093 already marked as an instantiation; a declaration should
4094 never be marked as a specialization unless we know what
4095 template is being specialized. */
4096 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4098 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4100 /* [temp.expl.spec] An explicit specialization of a static data
4101 member of a template is a definition if the declaration
4102 includes an initializer; otherwise, it is a declaration.
4104 We check for processing_specialization so this only applies
4105 to the new specialization syntax. */
4106 if (!initialized && processing_specialization)
4107 DECL_EXTERNAL (decl) = 1;
4110 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
4111 pedwarn ("declaration of %q#D outside of class is not definition",
4112 decl);
4115 was_public = TREE_PUBLIC (decl);
4117 /* Enter this declaration into the symbol table. */
4118 decl = maybe_push_decl (decl);
4120 if (processing_template_decl)
4121 decl = push_template_decl (decl);
4122 if (decl == error_mark_node)
4123 return error_mark_node;
4125 /* Tell the back end to use or not use .common as appropriate. If we say
4126 -fconserve-space, we want this to save .data space, at the expense of
4127 wrong semantics. If we say -fno-conserve-space, we want this to
4128 produce errors about redefs; to do this we force variables into the
4129 data segment. */
4130 if (flag_conserve_space
4131 && TREE_CODE (decl) == VAR_DECL
4132 && TREE_PUBLIC (decl)
4133 && !DECL_THREAD_LOCAL_P (decl)
4134 && !have_global_bss_p ())
4135 DECL_COMMON (decl) = 1;
4137 if (TREE_CODE (decl) == VAR_DECL
4138 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4139 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4141 /* This is a const variable with implicit 'static'. Set
4142 DECL_THIS_STATIC so we can tell it from variables that are
4143 !TREE_PUBLIC because of the anonymous namespace. */
4144 gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4145 DECL_THIS_STATIC (decl) = 1;
4148 if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4149 start_decl_1 (decl, initialized);
4151 return decl;
4154 /* Process the declaration of a variable DECL. INITIALIZED is true
4155 iff DECL is explicitly initialized. (INITIALIZED is false if the
4156 variable is initialized via an implicitly-called constructor.)
4157 This function must be called for ordinary variables (including, for
4158 example, implicit instantiations of templates), but must not be
4159 called for template declarations. */
4161 void
4162 start_decl_1 (tree decl, bool initialized)
4164 tree type;
4165 bool complete_p;
4166 bool aggregate_definition_p;
4168 gcc_assert (!processing_template_decl);
4170 if (error_operand_p (decl))
4171 return;
4173 gcc_assert (TREE_CODE (decl) == VAR_DECL);
4175 type = TREE_TYPE (decl);
4176 complete_p = COMPLETE_TYPE_P (type);
4177 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4179 /* If an explicit initializer is present, or if this is a definition
4180 of an aggregate, then we need a complete type at this point.
4181 (Scalars are always complete types, so there is nothing to
4182 check.) This code just sets COMPLETE_P; errors (if necessary)
4183 are issued below. */
4184 if ((initialized || aggregate_definition_p)
4185 && !complete_p
4186 && COMPLETE_TYPE_P (complete_type (type)))
4188 complete_p = true;
4189 /* We will not yet have set TREE_READONLY on DECL if the type
4190 was "const", but incomplete, before this point. But, now, we
4191 have a complete type, so we can try again. */
4192 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4195 if (initialized)
4196 /* Is it valid for this decl to have an initializer at all? */
4198 /* Don't allow initializations for incomplete types except for
4199 arrays which might be completed by the initialization. */
4200 if (complete_p)
4201 ; /* A complete type is ok. */
4202 else if (TREE_CODE (type) != ARRAY_TYPE)
4204 error ("variable %q#D has initializer but incomplete type", decl);
4205 type = TREE_TYPE (decl) = error_mark_node;
4207 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4209 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4210 error ("elements of array %q#D have incomplete type", decl);
4211 /* else we already gave an error in start_decl. */
4214 else if (aggregate_definition_p && !complete_p)
4216 error ("aggregate %q#D has incomplete type and cannot be defined",
4217 decl);
4218 /* Change the type so that assemble_variable will give
4219 DECL an rtl we can live with: (mem (const_int 0)). */
4220 type = TREE_TYPE (decl) = error_mark_node;
4223 /* Create a new scope to hold this declaration if necessary.
4224 Whether or not a new scope is necessary cannot be determined
4225 until after the type has been completed; if the type is a
4226 specialization of a class template it is not until after
4227 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4228 will be set correctly. */
4229 maybe_push_cleanup_level (type);
4232 /* Handle initialization of references. DECL, TYPE, and INIT have the
4233 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4234 but will be set to a new CLEANUP_STMT if a temporary is created
4235 that must be destroyed subsequently.
4237 Returns an initializer expression to use to initialize DECL, or
4238 NULL if the initialization can be performed statically.
4240 Quotes on semantics can be found in ARM 8.4.3. */
4242 static tree
4243 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4245 tree tmp;
4247 if (init == NULL_TREE)
4249 if ((DECL_LANG_SPECIFIC (decl) == 0
4250 || DECL_IN_AGGR_P (decl) == 0)
4251 && ! DECL_THIS_EXTERN (decl))
4252 error ("%qD declared as reference but not initialized", decl);
4253 return NULL_TREE;
4256 if (TREE_CODE (init) == CONSTRUCTOR)
4258 error ("ISO C++ forbids use of initializer list to "
4259 "initialize reference %qD", decl);
4260 return NULL_TREE;
4263 if (TREE_CODE (init) == TREE_LIST)
4264 init = build_x_compound_expr_from_list (init, "initializer");
4266 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4267 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4268 /* Note: default conversion is only called in very special cases. */
4269 init = decay_conversion (init);
4271 /* Convert INIT to the reference type TYPE. This may involve the
4272 creation of a temporary, whose lifetime must be the same as that
4273 of the reference. If so, a DECL_EXPR for the temporary will be
4274 added just after the DECL_EXPR for DECL. That's why we don't set
4275 DECL_INITIAL for local references (instead assigning to them
4276 explicitly); we need to allow the temporary to be initialized
4277 first. */
4278 tmp = initialize_reference (type, init, decl, cleanup);
4280 if (tmp == error_mark_node)
4281 return NULL_TREE;
4282 else if (tmp == NULL_TREE)
4284 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4285 return NULL_TREE;
4288 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4289 return tmp;
4291 DECL_INITIAL (decl) = tmp;
4293 return NULL_TREE;
4296 /* Designated initializers in arrays are not supported in GNU C++.
4297 The parser cannot detect this error since it does not know whether
4298 a given brace-enclosed initializer is for a class type or for an
4299 array. This function checks that CE does not use a designated
4300 initializer. If it does, an error is issued. Returns true if CE
4301 is valid, i.e., does not have a designated initializer. */
4303 static bool
4304 check_array_designated_initializer (const constructor_elt *ce)
4306 /* Designated initializers for array elements are not supported. */
4307 if (ce->index)
4309 /* The parser only allows identifiers as designated
4310 intializers. */
4311 gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4312 error ("name %qD used in a GNU-style designated "
4313 "initializer for an array", ce->index);
4314 return false;
4317 return true;
4320 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4321 array until we finish parsing the initializer. If that's the
4322 situation we're in, update DECL accordingly. */
4324 static void
4325 maybe_deduce_size_from_array_init (tree decl, tree init)
4327 tree type = TREE_TYPE (decl);
4329 if (TREE_CODE (type) == ARRAY_TYPE
4330 && TYPE_DOMAIN (type) == NULL_TREE
4331 && TREE_CODE (decl) != TYPE_DECL)
4333 /* do_default is really a C-ism to deal with tentative definitions.
4334 But let's leave it here to ease the eventual merge. */
4335 int do_default = !DECL_EXTERNAL (decl);
4336 tree initializer = init ? init : DECL_INITIAL (decl);
4337 int failure = 0;
4339 /* Check that there are no designated initializers in INIT, as
4340 those are not supported in GNU C++, and as the middle-end
4341 will crash if presented with a non-numeric designated
4342 initializer. */
4343 if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4345 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4346 constructor_elt *ce;
4347 HOST_WIDE_INT i;
4348 for (i = 0;
4349 VEC_iterate (constructor_elt, v, i, ce);
4350 ++i)
4351 if (!check_array_designated_initializer (ce))
4352 failure = 1;
4355 if (!failure)
4357 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4358 do_default);
4359 if (failure == 1)
4361 error ("initializer fails to determine size of %qD", decl);
4362 TREE_TYPE (decl) = error_mark_node;
4364 else if (failure == 2)
4366 if (do_default)
4368 error ("array size missing in %qD", decl);
4369 TREE_TYPE (decl) = error_mark_node;
4371 /* If a `static' var's size isn't known, make it extern as
4372 well as static, so it does not get allocated. If it's not
4373 `static', then don't mark it extern; finish_incomplete_decl
4374 will give it a default size and it will get allocated. */
4375 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4376 DECL_EXTERNAL (decl) = 1;
4378 else if (failure == 3)
4380 error ("zero-size array %qD", decl);
4381 TREE_TYPE (decl) = error_mark_node;
4385 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4387 layout_decl (decl, 0);
4391 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4392 any appropriate error messages regarding the layout. */
4394 static void
4395 layout_var_decl (tree decl)
4397 tree type;
4399 type = TREE_TYPE (decl);
4400 if (type == error_mark_node)
4401 return;
4403 /* If we haven't already layed out this declaration, do so now.
4404 Note that we must not call complete type for an external object
4405 because it's type might involve templates that we are not
4406 supposed to instantiate yet. (And it's perfectly valid to say
4407 `extern X x' for some incomplete type `X'.) */
4408 if (!DECL_EXTERNAL (decl))
4409 complete_type (type);
4410 if (!DECL_SIZE (decl)
4411 && TREE_TYPE (decl) != error_mark_node
4412 && (COMPLETE_TYPE_P (type)
4413 || (TREE_CODE (type) == ARRAY_TYPE
4414 && !TYPE_DOMAIN (type)
4415 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4416 layout_decl (decl, 0);
4418 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4420 /* An automatic variable with an incomplete type: that is an error.
4421 Don't talk about array types here, since we took care of that
4422 message in grokdeclarator. */
4423 error ("storage size of %qD isn't known", decl);
4424 TREE_TYPE (decl) = error_mark_node;
4426 #if 0
4427 /* Keep this code around in case we later want to control debug info
4428 based on whether a type is "used". (jason 1999-11-11) */
4430 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4431 /* Let debugger know it should output info for this type. */
4432 note_debug_info_needed (ttype);
4434 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4435 note_debug_info_needed (DECL_CONTEXT (decl));
4436 #endif
4438 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4439 && DECL_SIZE (decl) != NULL_TREE
4440 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4442 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4443 constant_expression_warning (DECL_SIZE (decl));
4444 else
4446 error ("storage size of %qD isn't constant", decl);
4447 TREE_TYPE (decl) = error_mark_node;
4452 /* If a local static variable is declared in an inline function, or if
4453 we have a weak definition, we must endeavor to create only one
4454 instance of the variable at link-time. */
4456 static void
4457 maybe_commonize_var (tree decl)
4459 /* Static data in a function with comdat linkage also has comdat
4460 linkage. */
4461 if (TREE_STATIC (decl)
4462 /* Don't mess with __FUNCTION__. */
4463 && ! DECL_ARTIFICIAL (decl)
4464 && DECL_FUNCTION_SCOPE_P (decl)
4465 /* Unfortunately, import_export_decl has not always been called
4466 before the function is processed, so we cannot simply check
4467 DECL_COMDAT. */
4468 && (DECL_COMDAT (DECL_CONTEXT (decl))
4469 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4470 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4471 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4473 if (flag_weak)
4475 /* With weak symbols, we simply make the variable COMDAT;
4476 that will cause copies in multiple translations units to
4477 be merged. */
4478 comdat_linkage (decl);
4480 else
4482 if (DECL_INITIAL (decl) == NULL_TREE
4483 || DECL_INITIAL (decl) == error_mark_node)
4485 /* Without weak symbols, we can use COMMON to merge
4486 uninitialized variables. */
4487 TREE_PUBLIC (decl) = 1;
4488 DECL_COMMON (decl) = 1;
4490 else
4492 /* While for initialized variables, we must use internal
4493 linkage -- which means that multiple copies will not
4494 be merged. */
4495 TREE_PUBLIC (decl) = 0;
4496 DECL_COMMON (decl) = 0;
4497 warning (0, "sorry: semantics of inline function static "
4498 "data %q+#D are wrong (you'll wind up "
4499 "with multiple copies)", decl);
4500 warning (0, "%J you can work around this by removing "
4501 "the initializer",
4502 decl);
4506 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4507 /* Set it up again; we might have set DECL_INITIAL since the last
4508 time. */
4509 comdat_linkage (decl);
4512 /* Issue an error message if DECL is an uninitialized const variable. */
4514 static void
4515 check_for_uninitialized_const_var (tree decl)
4517 tree type = TREE_TYPE (decl);
4519 /* ``Unless explicitly declared extern, a const object does not have
4520 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4521 7.1.6 */
4522 if (TREE_CODE (decl) == VAR_DECL
4523 && TREE_CODE (type) != REFERENCE_TYPE
4524 && CP_TYPE_CONST_P (type)
4525 && !TYPE_NEEDS_CONSTRUCTING (type)
4526 && !DECL_INITIAL (decl))
4527 error ("uninitialized const %qD", decl);
4531 /* Structure holding the current initializer being processed by reshape_init.
4532 CUR is a pointer to the current element being processed, END is a pointer
4533 after the last element present in the initializer. */
4534 typedef struct reshape_iterator_t
4536 constructor_elt *cur;
4537 constructor_elt *end;
4538 } reshape_iter;
4540 static tree reshape_init_r (tree, reshape_iter *, bool);
4542 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4543 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4544 initialized. If there are no more such fields, the return value
4545 will be NULL. */
4547 static tree
4548 next_initializable_field (tree field)
4550 while (field
4551 && (TREE_CODE (field) != FIELD_DECL
4552 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4553 || DECL_ARTIFICIAL (field)))
4554 field = TREE_CHAIN (field);
4556 return field;
4559 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4560 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4561 INTEGER_CST representing the size of the array minus one (the maximum index),
4562 or NULL_TREE if the array was declared without specifying the size. D is
4563 the iterator within the constructor. */
4565 static tree
4566 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4568 tree new_init;
4569 bool sized_array_p = (max_index != NULL_TREE);
4570 unsigned HOST_WIDE_INT max_index_cst = 0;
4571 unsigned HOST_WIDE_INT index;
4573 /* The initializer for an array is always a CONSTRUCTOR. */
4574 new_init = build_constructor (NULL_TREE, NULL);
4576 if (sized_array_p)
4578 /* Minus 1 is used for zero sized arrays. */
4579 if (integer_all_onesp (max_index))
4580 return new_init;
4582 if (host_integerp (max_index, 1))
4583 max_index_cst = tree_low_cst (max_index, 1);
4584 /* sizetype is sign extended, not zero extended. */
4585 else
4586 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4590 /* Loop until there are no more initializers. */
4591 for (index = 0;
4592 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4593 ++index)
4595 tree elt_init;
4597 check_array_designated_initializer (d->cur);
4598 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4599 if (elt_init == error_mark_node)
4600 return error_mark_node;
4601 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4604 return new_init;
4607 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4608 Parameters are the same of reshape_init_r. */
4610 static tree
4611 reshape_init_array (tree type, reshape_iter *d)
4613 tree max_index = NULL_TREE;
4615 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4617 if (TYPE_DOMAIN (type))
4618 max_index = array_type_nelts (type);
4620 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4623 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4624 Parameters are the same of reshape_init_r. */
4626 static tree
4627 reshape_init_vector (tree type, reshape_iter *d)
4629 tree max_index = NULL_TREE;
4630 tree rtype;
4632 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4634 if (COMPOUND_LITERAL_P (d->cur->value))
4636 tree value = d->cur->value;
4637 if (!same_type_p (TREE_TYPE (value), type))
4639 error ("invalid type %qT as initializer for a vector of type %qT",
4640 TREE_TYPE (d->cur->value), type);
4641 value = error_mark_node;
4643 ++d->cur;
4644 return value;
4647 /* For a vector, the representation type is a struct
4648 containing a single member which is an array of the
4649 appropriate size. */
4650 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4651 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4652 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4654 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4657 /* Subroutine of reshape_init_r, processes the initializers for classes
4658 or union. Parameters are the same of reshape_init_r. */
4660 static tree
4661 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4663 tree field;
4664 tree new_init;
4666 gcc_assert (CLASS_TYPE_P (type));
4668 /* The initializer for a class is always a CONSTRUCTOR. */
4669 new_init = build_constructor (NULL_TREE, NULL);
4670 field = next_initializable_field (TYPE_FIELDS (type));
4672 if (!field)
4674 /* [dcl.init.aggr]
4676 An initializer for an aggregate member that is an
4677 empty class shall have the form of an empty
4678 initializer-list {}. */
4679 if (!first_initializer_p)
4681 error ("initializer for %qT must be brace-enclosed", type);
4682 return error_mark_node;
4684 return new_init;
4687 /* Loop through the initializable fields, gathering initializers. */
4688 while (d->cur != d->end)
4690 tree field_init;
4692 /* Handle designated initializers, as an extension. */
4693 if (d->cur->index)
4695 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4697 if (!field || TREE_CODE (field) != FIELD_DECL)
4699 error ("%qT has no non-static data member named %qD", type,
4700 d->cur->index);
4701 return error_mark_node;
4705 /* If we processed all the member of the class, we are done. */
4706 if (!field)
4707 break;
4709 field_init = reshape_init_r (TREE_TYPE (field), d,
4710 /*first_initializer_p=*/false);
4711 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4713 /* [dcl.init.aggr]
4715 When a union is initialized with a brace-enclosed
4716 initializer, the braces shall only contain an
4717 initializer for the first member of the union. */
4718 if (TREE_CODE (type) == UNION_TYPE)
4719 break;
4721 field = next_initializable_field (TREE_CHAIN (field));
4724 return new_init;
4727 /* Subroutine of reshape_init, which processes a single initializer (part of
4728 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4729 iterator within the CONSTRUCTOR which points to the initializer to process.
4730 FIRST_INITIALIZER_P is true if this is the first initializer of the
4731 CONSTRUCTOR node. */
4733 static tree
4734 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4736 tree init = d->cur->value;
4738 /* A non-aggregate type is always initialized with a single
4739 initializer. */
4740 if (!CP_AGGREGATE_TYPE_P (type))
4742 /* It is invalid to initialize a non-aggregate type with a
4743 brace-enclosed initializer.
4744 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4745 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4746 a CONSTRUCTOR (with a record type). */
4747 if (TREE_CODE (init) == CONSTRUCTOR
4748 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4750 error ("braces around scalar initializer for type %qT", type);
4751 init = error_mark_node;
4754 d->cur++;
4755 return init;
4758 /* [dcl.init.aggr]
4760 All implicit type conversions (clause _conv_) are considered when
4761 initializing the aggregate member with an initializer from an
4762 initializer-list. If the initializer can initialize a member,
4763 the member is initialized. Otherwise, if the member is itself a
4764 non-empty subaggregate, brace elision is assumed and the
4765 initializer is considered for the initialization of the first
4766 member of the subaggregate. */
4767 if (TREE_CODE (init) != CONSTRUCTOR
4768 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4770 d->cur++;
4771 return init;
4774 /* [dcl.init.string]
4776 A char array (whether plain char, signed char, or unsigned char)
4777 can be initialized by a string-literal (optionally enclosed in
4778 braces); a wchar_t array can be initialized by a wide
4779 string-literal (optionally enclosed in braces). */
4780 if (TREE_CODE (type) == ARRAY_TYPE
4781 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4783 tree str_init = init;
4785 /* Strip one level of braces if and only if they enclose a single
4786 element (as allowed by [dcl.init.string]). */
4787 if (!first_initializer_p
4788 && TREE_CODE (str_init) == CONSTRUCTOR
4789 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4791 str_init = VEC_index (constructor_elt,
4792 CONSTRUCTOR_ELTS (str_init), 0)->value;
4795 /* If it's a string literal, then it's the initializer for the array
4796 as a whole. Otherwise, continue with normal initialization for
4797 array types (one value per array element). */
4798 if (TREE_CODE (str_init) == STRING_CST)
4800 d->cur++;
4801 return str_init;
4805 /* The following cases are about aggregates. If we are not within a full
4806 initializer already, and there is not a CONSTRUCTOR, it means that there
4807 is a missing set of braces (that is, we are processing the case for
4808 which reshape_init exists). */
4809 if (!first_initializer_p)
4811 if (TREE_CODE (init) == CONSTRUCTOR)
4813 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4814 /* There is no need to reshape pointer-to-member function
4815 initializers, as they are always constructed correctly
4816 by the front end. */
4818 else if (COMPOUND_LITERAL_P (init))
4819 /* For a nested compound literal, there is no need to reshape since
4820 brace elision is not allowed. Even if we decided to allow it,
4821 we should add a call to reshape_init in finish_compound_literal,
4822 before calling digest_init, so changing this code would still
4823 not be necessary. */
4824 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4825 else
4827 ++d->cur;
4828 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4829 return reshape_init (type, init);
4833 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4834 type);
4837 /* Dispatch to specialized routines. */
4838 if (CLASS_TYPE_P (type))
4839 return reshape_init_class (type, d, first_initializer_p);
4840 else if (TREE_CODE (type) == ARRAY_TYPE)
4841 return reshape_init_array (type, d);
4842 else if (TREE_CODE (type) == VECTOR_TYPE)
4843 return reshape_init_vector (type, d);
4844 else
4845 gcc_unreachable();
4848 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4849 brace-enclosed aggregate initializer.
4851 INIT is the CONSTRUCTOR containing the list of initializers describing
4852 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4853 It may not presently match the shape of the TYPE; for example:
4855 struct S { int a; int b; };
4856 struct S a[] = { 1, 2, 3, 4 };
4858 Here INIT will hold a VEC of four elements, rather than a
4859 VEC of two elements, each itself a VEC of two elements. This
4860 routine transforms INIT from the former form into the latter. The
4861 revised CONSTRUCTOR node is returned. */
4863 tree
4864 reshape_init (tree type, tree init)
4866 VEC(constructor_elt, gc) *v;
4867 reshape_iter d;
4868 tree new_init;
4870 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4872 v = CONSTRUCTOR_ELTS (init);
4874 /* An empty constructor does not need reshaping, and it is always a valid
4875 initializer. */
4876 if (VEC_empty (constructor_elt, v))
4877 return init;
4879 /* Recurse on this CONSTRUCTOR. */
4880 d.cur = VEC_index (constructor_elt, v, 0);
4881 d.end = d.cur + VEC_length (constructor_elt, v);
4883 new_init = reshape_init_r (type, &d, true);
4884 if (new_init == error_mark_node)
4885 return error_mark_node;
4887 /* Make sure all the element of the constructor were used. Otherwise,
4888 issue an error about exceeding initializers. */
4889 if (d.cur != d.end)
4890 error ("too many initializers for %qT", type);
4892 return new_init;
4895 /* Verify INIT (the initializer for DECL), and record the
4896 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4897 grok_reference_init.
4899 If the return value is non-NULL, it is an expression that must be
4900 evaluated dynamically to initialize DECL. */
4902 static tree
4903 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4905 tree type = TREE_TYPE (decl);
4906 tree init_code = NULL;
4908 /* Things that are going to be initialized need to have complete
4909 type. */
4910 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4912 if (type == error_mark_node)
4913 /* We will have already complained. */
4914 return NULL_TREE;
4916 if (TREE_CODE (type) == ARRAY_TYPE)
4918 tree element_type = TREE_TYPE (type);
4920 /* The array type itself need not be complete, because the
4921 initializer may tell us how many elements are in the array.
4922 But, the elements of the array must be complete. */
4923 if (!COMPLETE_TYPE_P (complete_type (element_type)))
4925 error ("elements of array %q#D have incomplete type", decl);
4926 return NULL_TREE;
4928 /* It is not valid to initialize a VLA. */
4929 if (init
4930 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
4931 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
4933 error ("variable-sized object %qD may not be initialized", decl);
4934 return NULL_TREE;
4937 else if (!COMPLETE_TYPE_P (type))
4939 error ("%qD has incomplete type", decl);
4940 TREE_TYPE (decl) = error_mark_node;
4941 return NULL_TREE;
4943 else
4944 /* There is no way to make a variable-sized class type in GNU C++. */
4945 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
4947 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
4949 int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
4950 if (SCALAR_TYPE_P (type))
4952 if (init_len != 1)
4954 error ("scalar object %qD requires one element in initializer",
4955 decl);
4956 TREE_TYPE (decl) = error_mark_node;
4957 return NULL_TREE;
4960 else if ((cxx_dialect == cxx98) && !CP_AGGREGATE_TYPE_P (type))
4962 /* A non-aggregate that is not a scalar cannot be initialized
4963 via an initializer-list in C++98. */
4964 error ("braces around initializer for non-aggregate type %qT",
4965 type);
4966 TREE_TYPE (decl) = error_mark_node;
4967 return NULL_TREE;
4971 if (TREE_CODE (decl) == CONST_DECL)
4973 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
4975 DECL_INITIAL (decl) = init;
4977 gcc_assert (init != NULL_TREE);
4978 init = NULL_TREE;
4980 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4981 init = grok_reference_init (decl, type, init, cleanup);
4982 else if (init)
4984 /* Do not reshape constructors of vectors (they don't need to be
4985 reshaped. */
4986 if (TREE_CODE (init) == CONSTRUCTOR
4987 && !COMPOUND_LITERAL_P (init)
4988 && !TREE_TYPE (init)) /* ptrmemfunc */
4990 init = reshape_init (type, init);
4992 if ((*targetm.vector_opaque_p) (type))
4994 error ("opaque vector types cannot be initialized");
4995 init = error_mark_node;
4999 /* If DECL has an array type without a specific bound, deduce the
5000 array size from the initializer. */
5001 maybe_deduce_size_from_array_init (decl, init);
5002 type = TREE_TYPE (decl);
5003 if (type == error_mark_node)
5004 return NULL_TREE;
5006 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_NEEDS_CONSTRUCTING (type))
5007 goto initialize_aggr;
5008 else if (CLASS_TYPE_P (type))
5010 if (TREE_CODE (init) == CONSTRUCTOR)
5012 if (TYPE_NON_AGGREGATE_CLASS (type))
5014 error ("%qD must be initialized by constructor, "
5015 "not by %<{...}%>",
5016 decl);
5017 init = error_mark_node;
5019 else
5020 goto dont_use_constructor;
5022 else
5024 int saved_stmts_are_full_exprs_p;
5026 initialize_aggr:
5027 saved_stmts_are_full_exprs_p = 0;
5028 if (building_stmt_tree ())
5030 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5031 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5033 init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5034 if (building_stmt_tree ())
5035 current_stmt_tree ()->stmts_are_full_exprs_p =
5036 saved_stmts_are_full_exprs_p;
5037 return init;
5040 else
5042 dont_use_constructor:
5043 if (TREE_CODE (init) != TREE_VEC)
5045 init_code = store_init_value (decl, init);
5046 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5047 && DECL_INITIAL (decl)
5048 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5049 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5050 warning (0, "array %qD initialized by parenthesized string literal %qE",
5051 decl, DECL_INITIAL (decl));
5052 init = NULL;
5056 else if (DECL_EXTERNAL (decl))
5058 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5059 goto initialize_aggr;
5060 else if (MAYBE_CLASS_TYPE_P (type))
5062 tree core_type = strip_array_types (type);
5064 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5065 error ("structure %qD with uninitialized const members", decl);
5066 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5067 error ("structure %qD with uninitialized reference members", decl);
5069 check_for_uninitialized_const_var (decl);
5071 else
5072 check_for_uninitialized_const_var (decl);
5074 if (init && init != error_mark_node)
5075 init_code = build2 (INIT_EXPR, type, decl, init);
5077 return init_code;
5080 /* If DECL is not a local variable, give it RTL. */
5082 static void
5083 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5085 int toplev = toplevel_bindings_p ();
5086 int defer_p;
5087 const char *filename;
5089 /* Set the DECL_ASSEMBLER_NAME for the object. */
5090 if (asmspec)
5092 /* The `register' keyword, when used together with an
5093 asm-specification, indicates that the variable should be
5094 placed in a particular register. */
5095 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5097 set_user_assembler_name (decl, asmspec);
5098 DECL_HARD_REGISTER (decl) = 1;
5100 else
5102 if (TREE_CODE (decl) == FUNCTION_DECL
5103 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5104 set_builtin_user_assembler_name (decl, asmspec);
5105 set_user_assembler_name (decl, asmspec);
5109 /* Handle non-variables up front. */
5110 if (TREE_CODE (decl) != VAR_DECL)
5112 rest_of_decl_compilation (decl, toplev, at_eof);
5113 return;
5116 /* If we see a class member here, it should be a static data
5117 member. */
5118 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5120 gcc_assert (TREE_STATIC (decl));
5121 /* An in-class declaration of a static data member should be
5122 external; it is only a declaration, and not a definition. */
5123 if (init == NULL_TREE)
5124 gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5127 /* We don't create any RTL for local variables. */
5128 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5129 return;
5131 /* We defer emission of local statics until the corresponding
5132 DECL_EXPR is expanded. */
5133 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5135 /* We try to defer namespace-scope static constants so that they are
5136 not emitted into the object file unnecessarily. */
5137 filename = input_filename;
5138 if (!DECL_VIRTUAL_P (decl)
5139 && TREE_READONLY (decl)
5140 && DECL_INITIAL (decl) != NULL_TREE
5141 && DECL_INITIAL (decl) != error_mark_node
5142 && filename != NULL
5143 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5144 && toplev
5145 && !TREE_PUBLIC (decl))
5147 /* Fool with the linkage of static consts according to #pragma
5148 interface. */
5149 struct c_fileinfo *finfo = get_fileinfo (filename);
5150 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5152 TREE_PUBLIC (decl) = 1;
5153 DECL_EXTERNAL (decl) = finfo->interface_only;
5156 defer_p = 1;
5158 /* Likewise for template instantiations. */
5159 else if (DECL_LANG_SPECIFIC (decl)
5160 && DECL_IMPLICIT_INSTANTIATION (decl))
5161 defer_p = 1;
5163 /* If we're not deferring, go ahead and assemble the variable. */
5164 if (!defer_p)
5165 rest_of_decl_compilation (decl, toplev, at_eof);
5168 /* walk_tree helper for wrap_temporary_cleanups, below. */
5170 static tree
5171 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5173 if (TYPE_P (*stmt_p))
5175 *walk_subtrees = 0;
5176 return NULL_TREE;
5179 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5181 tree guard = (tree)data;
5182 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5184 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5185 /* Tell honor_protect_cleanup_actions to handle this as a separate
5186 cleanup. */
5187 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5189 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5192 return NULL_TREE;
5195 /* We're initializing a local variable which has a cleanup GUARD. If there
5196 are any temporaries used in the initializer INIT of this variable, we
5197 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5198 variable will be cleaned up properly if one of them throws.
5200 Unfortunately, there's no way to express this properly in terms of
5201 nesting, as the regions for the temporaries overlap the region for the
5202 variable itself; if there are two temporaries, the variable needs to be
5203 the first thing destroyed if either of them throws. However, we only
5204 want to run the variable's cleanup if it actually got constructed. So
5205 we need to guard the temporary cleanups with the variable's cleanup if
5206 they are run on the normal path, but not if they are run on the
5207 exceptional path. We implement this by telling
5208 honor_protect_cleanup_actions to strip the variable cleanup from the
5209 exceptional path. */
5211 static void
5212 wrap_temporary_cleanups (tree init, tree guard)
5214 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5217 /* Generate code to initialize DECL (a local variable). */
5219 static void
5220 initialize_local_var (tree decl, tree init)
5222 tree type = TREE_TYPE (decl);
5223 tree cleanup;
5224 int already_used;
5226 gcc_assert (TREE_CODE (decl) == VAR_DECL
5227 || TREE_CODE (decl) == RESULT_DECL);
5228 gcc_assert (!TREE_STATIC (decl));
5230 if (DECL_SIZE (decl) == NULL_TREE)
5232 /* If we used it already as memory, it must stay in memory. */
5233 DECL_INITIAL (decl) = NULL_TREE;
5234 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5235 return;
5238 if (type == error_mark_node)
5239 return;
5241 /* Compute and store the initial value. */
5242 already_used = TREE_USED (decl) || TREE_USED (type);
5244 /* Generate a cleanup, if necessary. */
5245 cleanup = cxx_maybe_build_cleanup (decl);
5247 /* Perform the initialization. */
5248 if (init)
5250 int saved_stmts_are_full_exprs_p;
5252 /* If we're only initializing a single object, guard the destructors
5253 of any temporaries used in its initializer with its destructor.
5254 This isn't right for arrays because each element initialization is
5255 a full-expression. */
5256 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5257 wrap_temporary_cleanups (init, cleanup);
5259 gcc_assert (building_stmt_tree ());
5260 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5261 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5262 finish_expr_stmt (init);
5263 current_stmt_tree ()->stmts_are_full_exprs_p =
5264 saved_stmts_are_full_exprs_p;
5267 /* Set this to 0 so we can tell whether an aggregate which was
5268 initialized was ever used. Don't do this if it has a
5269 destructor, so we don't complain about the 'resource
5270 allocation is initialization' idiom. Now set
5271 attribute((unused)) on types so decls of that type will be
5272 marked used. (see TREE_USED, above.) */
5273 if (TYPE_NEEDS_CONSTRUCTING (type)
5274 && ! already_used
5275 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5276 && DECL_NAME (decl))
5277 TREE_USED (decl) = 0;
5278 else if (already_used)
5279 TREE_USED (decl) = 1;
5281 if (cleanup)
5282 finish_decl_cleanup (decl, cleanup);
5285 /* DECL is a VAR_DECL for a compiler-generated variable with static
5286 storage duration (like a virtual table) whose initializer is a
5287 compile-time constant. INIT must be either a TREE_LIST of values,
5288 or a CONSTRUCTOR. Initialize the variable and provide it to the
5289 back end. */
5291 void
5292 initialize_artificial_var (tree decl, tree init)
5294 gcc_assert (DECL_ARTIFICIAL (decl));
5295 if (TREE_CODE (init) == TREE_LIST)
5296 init = build_constructor_from_list (NULL_TREE, init);
5297 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5298 DECL_INITIAL (decl) = init;
5299 DECL_INITIALIZED_P (decl) = 1;
5300 determine_visibility (decl);
5301 layout_var_decl (decl);
5302 maybe_commonize_var (decl);
5303 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5306 /* INIT is the initializer for a variable, as represented by the
5307 parser. Returns true iff INIT is value-dependent. */
5309 static bool
5310 value_dependent_init_p (tree init)
5312 if (TREE_CODE (init) == TREE_LIST)
5313 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5314 return any_value_dependent_elements_p (init);
5315 else if (TREE_CODE (init) == CONSTRUCTOR)
5316 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5318 VEC(constructor_elt, gc) *elts;
5319 size_t nelts;
5320 size_t i;
5322 elts = CONSTRUCTOR_ELTS (init);
5323 nelts = VEC_length (constructor_elt, elts);
5324 for (i = 0; i < nelts; ++i)
5325 if (value_dependent_init_p (VEC_index (constructor_elt,
5326 elts, i)->value))
5327 return true;
5329 else
5330 /* It must be a simple expression, e.g., int i = 3; */
5331 return value_dependent_expression_p (init);
5333 return false;
5336 /* Finish processing of a declaration;
5337 install its line number and initial value.
5338 If the length of an array type is not known before,
5339 it must be determined now, from the initial value, or it is an error.
5341 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
5342 true, then INIT is an integral constant expression.
5344 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5345 if the (init) syntax was used. */
5347 void
5348 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5349 tree asmspec_tree, int flags)
5351 tree type;
5352 tree cleanup;
5353 const char *asmspec = NULL;
5354 int was_readonly = 0;
5355 bool var_definition_p = false;
5356 int saved_processing_template_decl;
5358 if (decl == error_mark_node)
5359 return;
5360 else if (! decl)
5362 if (init)
5363 error ("assignment (not initialization) in declaration");
5364 return;
5367 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5368 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5369 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5371 type = TREE_TYPE (decl);
5372 if (type == error_mark_node)
5373 return;
5375 /* Assume no cleanup is required. */
5376 cleanup = NULL_TREE;
5377 saved_processing_template_decl = processing_template_decl;
5379 /* If a name was specified, get the string. */
5380 if (global_scope_p (current_binding_level))
5381 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5382 if (asmspec_tree && asmspec_tree != error_mark_node)
5383 asmspec = TREE_STRING_POINTER (asmspec_tree);
5385 if (current_class_type
5386 && CP_DECL_CONTEXT (decl) == current_class_type
5387 && TYPE_BEING_DEFINED (current_class_type)
5388 && (DECL_INITIAL (decl) || init))
5389 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5391 if (processing_template_decl)
5393 bool type_dependent_p;
5395 /* Add this declaration to the statement-tree. */
5396 if (at_function_scope_p ())
5397 add_decl_expr (decl);
5399 type_dependent_p = dependent_type_p (type);
5401 if (check_for_bare_parameter_packs (init))
5403 init = NULL_TREE;
5404 DECL_INITIAL (decl) = NULL_TREE;
5407 if (init && init_const_expr_p)
5409 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5410 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5411 TREE_CONSTANT (decl) = 1;
5414 /* Generally, initializers in templates are expanded when the
5415 template is instantiated. But, if DECL is an integral
5416 constant static data member, then it can be used in future
5417 integral constant expressions, and its value must be
5418 available. */
5419 if (!(init
5420 && DECL_CLASS_SCOPE_P (decl)
5421 && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5422 && !type_dependent_p
5423 && !value_dependent_init_p (init)))
5425 if (init)
5426 DECL_INITIAL (decl) = init;
5427 if (TREE_CODE (decl) == VAR_DECL
5428 && !DECL_PRETTY_FUNCTION_P (decl)
5429 && !type_dependent_p)
5430 maybe_deduce_size_from_array_init (decl, init);
5431 goto finish_end;
5434 if (TREE_CODE (init) == TREE_LIST)
5436 /* If the parenthesized-initializer form was used (e.g.,
5437 "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5438 arguments. (There is generally only one.) We convert them
5439 individually. */
5440 tree list = init;
5441 for (; list; list = TREE_CHAIN (list))
5443 tree elt = TREE_VALUE (list);
5444 TREE_VALUE (list) = fold_non_dependent_expr (elt);
5447 else
5448 init = fold_non_dependent_expr (init);
5449 processing_template_decl = 0;
5452 /* Take care of TYPE_DECLs up front. */
5453 if (TREE_CODE (decl) == TYPE_DECL)
5455 if (type != error_mark_node
5456 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5458 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5459 warning (0, "shadowing previous type declaration of %q#D", decl);
5460 set_identifier_type_value (DECL_NAME (decl), decl);
5463 /* If we have installed this as the canonical typedef for this
5464 type, and that type has not been defined yet, delay emitting
5465 the debug information for it, as we will emit it later. */
5466 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5467 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5468 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5470 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5471 at_eof);
5472 goto finish_end;
5475 /* A reference will be modified here, as it is initialized. */
5476 if (! DECL_EXTERNAL (decl)
5477 && TREE_READONLY (decl)
5478 && TREE_CODE (type) == REFERENCE_TYPE)
5480 was_readonly = 1;
5481 TREE_READONLY (decl) = 0;
5484 if (TREE_CODE (decl) == VAR_DECL)
5486 /* Only PODs can have thread-local storage. Other types may require
5487 various kinds of non-trivial initialization. */
5488 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5489 error ("%qD cannot be thread-local because it has non-POD type %qT",
5490 decl, TREE_TYPE (decl));
5491 /* If this is a local variable that will need a mangled name,
5492 register it now. We must do this before processing the
5493 initializer for the variable, since the initialization might
5494 require a guard variable, and since the mangled name of the
5495 guard variable will depend on the mangled name of this
5496 variable. */
5497 if (DECL_FUNCTION_SCOPE_P (decl)
5498 && TREE_STATIC (decl)
5499 && !DECL_ARTIFICIAL (decl))
5500 push_local_name (decl);
5501 /* Convert the initializer to the type of DECL, if we have not
5502 already initialized DECL. */
5503 if (!DECL_INITIALIZED_P (decl)
5504 /* If !DECL_EXTERNAL then DECL is being defined. In the
5505 case of a static data member initialized inside the
5506 class-specifier, there can be an initializer even if DECL
5507 is *not* defined. */
5508 && (!DECL_EXTERNAL (decl) || init))
5510 if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5512 tree jclass
5513 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5514 /* Allow libjava/prims.cc define primitive classes. */
5515 if (init != NULL_TREE
5516 || jclass == NULL_TREE
5517 || TREE_CODE (jclass) != TYPE_DECL
5518 || !POINTER_TYPE_P (TREE_TYPE (jclass))
5519 || !same_type_ignoring_top_level_qualifiers_p
5520 (type, TREE_TYPE (TREE_TYPE (jclass))))
5521 error ("Java object %qD not allocated with %<new%>", decl);
5522 init = NULL_TREE;
5524 if (init)
5526 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5527 if (init_const_expr_p)
5529 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5530 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5531 TREE_CONSTANT (decl) = 1;
5534 init = check_initializer (decl, init, flags, &cleanup);
5535 /* Thread-local storage cannot be dynamically initialized. */
5536 if (DECL_THREAD_LOCAL_P (decl) && init)
5538 error ("%qD is thread-local and so cannot be dynamically "
5539 "initialized", decl);
5540 init = NULL_TREE;
5543 /* Check that the initializer for a static data member was a
5544 constant. Although we check in the parser that the
5545 initializer is an integral constant expression, we do not
5546 simplify division-by-zero at the point at which it
5547 occurs. Therefore, in:
5549 struct S { static const int i = 7 / 0; };
5551 we issue an error at this point. It would
5552 probably be better to forbid division by zero in
5553 integral constant expressions. */
5554 if (DECL_EXTERNAL (decl) && init)
5556 error ("%qD cannot be initialized by a non-constant expression"
5557 " when being declared", decl);
5558 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5559 init = NULL_TREE;
5562 /* Handle:
5564 [dcl.init]
5566 The memory occupied by any object of static storage
5567 duration is zero-initialized at program startup before
5568 any other initialization takes place.
5570 We cannot create an appropriate initializer until after
5571 the type of DECL is finalized. If DECL_INITIAL is set,
5572 then the DECL is statically initialized, and any
5573 necessary zero-initialization has already been performed. */
5574 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5575 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5576 /*nelts=*/NULL_TREE,
5577 /*static_storage_p=*/true);
5578 /* Remember that the initialization for this variable has
5579 taken place. */
5580 DECL_INITIALIZED_P (decl) = 1;
5581 /* This declaration is the definition of this variable,
5582 unless we are initializing a static data member within
5583 the class specifier. */
5584 if (!DECL_EXTERNAL (decl))
5585 var_definition_p = true;
5587 /* If the variable has an array type, lay out the type, even if
5588 there is no initializer. It is valid to index through the
5589 array, and we must get TYPE_ALIGN set correctly on the array
5590 type. */
5591 else if (TREE_CODE (type) == ARRAY_TYPE)
5592 layout_type (type);
5594 else if (TREE_CODE (decl) == FIELD_DECL
5595 && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5596 error ("non-static data member %qD has Java class type", decl);
5598 /* Add this declaration to the statement-tree. This needs to happen
5599 after the call to check_initializer so that the DECL_EXPR for a
5600 reference temp is added before the DECL_EXPR for the reference itself. */
5601 if (at_function_scope_p ())
5602 add_decl_expr (decl);
5604 /* Let the middle end know about variables and functions -- but not
5605 static data members in uninstantiated class templates. */
5606 if (!saved_processing_template_decl
5607 && (TREE_CODE (decl) == VAR_DECL
5608 || TREE_CODE (decl) == FUNCTION_DECL))
5610 if (TREE_CODE (decl) == VAR_DECL)
5612 layout_var_decl (decl);
5613 maybe_commonize_var (decl);
5616 /* This needs to happen after the linkage is set. */
5617 determine_visibility (decl);
5619 if (var_definition_p && TREE_STATIC (decl))
5621 /* If a TREE_READONLY variable needs initialization
5622 at runtime, it is no longer readonly and we need to
5623 avoid MEM_READONLY_P being set on RTL created for it. */
5624 if (init)
5626 if (TREE_READONLY (decl))
5627 TREE_READONLY (decl) = 0;
5628 was_readonly = 0;
5630 else if (was_readonly)
5631 TREE_READONLY (decl) = 1;
5634 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5636 /* Check for abstractness of the type. Notice that there is no
5637 need to strip array types here since the check for those types
5638 is already done within create_array_type_for_decl. */
5639 if (TREE_CODE (type) == FUNCTION_TYPE
5640 || TREE_CODE (type) == METHOD_TYPE)
5641 abstract_virtuals_error (decl, TREE_TYPE (type));
5642 else
5643 abstract_virtuals_error (decl, type);
5645 if (TREE_CODE (decl) == FUNCTION_DECL
5646 || TREE_TYPE (decl) == error_mark_node)
5647 /* No initialization required. */
5649 else if (DECL_EXTERNAL (decl)
5650 && ! (DECL_LANG_SPECIFIC (decl)
5651 && DECL_NOT_REALLY_EXTERN (decl)))
5653 if (init)
5654 DECL_INITIAL (decl) = init;
5656 /* A variable definition. */
5657 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5658 /* Initialize the local variable. */
5659 initialize_local_var (decl, init);
5661 /* If a variable is defined, and then a subsequent
5662 definition with external linkage is encountered, we will
5663 get here twice for the same variable. We want to avoid
5664 calling expand_static_init more than once. For variables
5665 that are not static data members, we can call
5666 expand_static_init only when we actually process the
5667 initializer. It is not legal to redeclare a static data
5668 member, so this issue does not arise in that case. */
5669 else if (var_definition_p && TREE_STATIC (decl))
5670 expand_static_init (decl, init);
5673 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5674 reference, insert it in the statement-tree now. */
5675 if (cleanup)
5676 push_cleanup (decl, cleanup, false);
5678 finish_end:
5679 processing_template_decl = saved_processing_template_decl;
5681 if (was_readonly)
5682 TREE_READONLY (decl) = 1;
5684 /* If this was marked 'used', be sure it will be output. */
5685 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5686 mark_decl_referenced (decl);
5689 /* This is here for a midend callback from c-common.c. */
5691 void
5692 finish_decl (tree decl, tree init, tree asmspec_tree)
5694 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5697 /* Returns a declaration for a VAR_DECL as if:
5699 extern "C" TYPE NAME;
5701 had been seen. Used to create compiler-generated global
5702 variables. */
5704 static tree
5705 declare_global_var (tree name, tree type)
5707 tree decl;
5709 push_to_top_level ();
5710 decl = build_decl (VAR_DECL, name, type);
5711 TREE_PUBLIC (decl) = 1;
5712 DECL_EXTERNAL (decl) = 1;
5713 DECL_ARTIFICIAL (decl) = 1;
5714 /* If the user has explicitly declared this variable (perhaps
5715 because the code we are compiling is part of a low-level runtime
5716 library), then it is possible that our declaration will be merged
5717 with theirs by pushdecl. */
5718 decl = pushdecl (decl);
5719 finish_decl (decl, NULL_TREE, NULL_TREE);
5720 pop_from_top_level ();
5722 return decl;
5725 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5726 if "__cxa_atexit" is not being used) corresponding to the function
5727 to be called when the program exits. */
5729 static tree
5730 get_atexit_fn_ptr_type (void)
5732 tree arg_types;
5733 tree fn_type;
5735 if (!atexit_fn_ptr_type_node)
5737 if (flag_use_cxa_atexit
5738 && !targetm.cxx.use_atexit_for_cxa_atexit ())
5739 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
5740 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5741 else
5742 /* The parameter to "atexit" is "void (*)(void)". */
5743 arg_types = void_list_node;
5745 fn_type = build_function_type (void_type_node, arg_types);
5746 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5749 return atexit_fn_ptr_type_node;
5752 /* Returns a pointer to the `atexit' function. Note that if
5753 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5754 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5756 static tree
5757 get_atexit_node (void)
5759 tree atexit_fndecl;
5760 tree arg_types;
5761 tree fn_type;
5762 tree fn_ptr_type;
5763 const char *name;
5764 bool use_aeabi_atexit;
5766 if (atexit_node)
5767 return atexit_node;
5769 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5771 /* The declaration for `__cxa_atexit' is:
5773 int __cxa_atexit (void (*)(void *), void *, void *)
5775 We build up the argument types and then then function type
5776 itself. */
5778 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5779 /* First, build the pointer-to-function type for the first
5780 argument. */
5781 fn_ptr_type = get_atexit_fn_ptr_type ();
5782 /* Then, build the rest of the argument types. */
5783 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5784 if (use_aeabi_atexit)
5786 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5787 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5789 else
5791 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5792 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5794 /* And the final __cxa_atexit type. */
5795 fn_type = build_function_type (integer_type_node, arg_types);
5796 fn_ptr_type = build_pointer_type (fn_type);
5797 if (use_aeabi_atexit)
5798 name = "__aeabi_atexit";
5799 else
5800 name = "__cxa_atexit";
5802 else
5804 /* The declaration for `atexit' is:
5806 int atexit (void (*)());
5808 We build up the argument types and then then function type
5809 itself. */
5810 fn_ptr_type = get_atexit_fn_ptr_type ();
5811 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5812 /* Build the final atexit type. */
5813 fn_type = build_function_type (integer_type_node, arg_types);
5814 name = "atexit";
5817 /* Now, build the function declaration. */
5818 push_lang_context (lang_name_c);
5819 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5820 mark_used (atexit_fndecl);
5821 pop_lang_context ();
5822 atexit_node = decay_conversion (atexit_fndecl);
5824 return atexit_node;
5827 /* Returns the __dso_handle VAR_DECL. */
5829 static tree
5830 get_dso_handle_node (void)
5832 if (dso_handle_node)
5833 return dso_handle_node;
5835 /* Declare the variable. */
5836 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5837 ptr_type_node);
5839 return dso_handle_node;
5842 /* Begin a new function with internal linkage whose job will be simply
5843 to destroy some particular variable. */
5845 static GTY(()) int start_cleanup_cnt;
5847 static tree
5848 start_cleanup_fn (void)
5850 char name[32];
5851 tree fntype;
5852 tree fndecl;
5853 bool use_cxa_atexit = flag_use_cxa_atexit
5854 && !targetm.cxx.use_atexit_for_cxa_atexit ();
5856 push_to_top_level ();
5858 /* No need to mangle this. */
5859 push_lang_context (lang_name_c);
5861 /* Build the name of the function. */
5862 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5863 /* Build the function declaration. */
5864 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
5865 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5866 /* It's a function with internal linkage, generated by the
5867 compiler. */
5868 TREE_PUBLIC (fndecl) = 0;
5869 DECL_ARTIFICIAL (fndecl) = 1;
5870 /* Make the function `inline' so that it is only emitted if it is
5871 actually needed. It is unlikely that it will be inlined, since
5872 it is only called via a function pointer, but we avoid unnecessary
5873 emissions this way. */
5874 DECL_INLINE (fndecl) = 1;
5875 DECL_DECLARED_INLINE_P (fndecl) = 1;
5876 DECL_INTERFACE_KNOWN (fndecl) = 1;
5877 /* Build the parameter. */
5878 if (use_cxa_atexit)
5880 tree parmdecl;
5882 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5883 DECL_CONTEXT (parmdecl) = fndecl;
5884 TREE_USED (parmdecl) = 1;
5885 DECL_ARGUMENTS (fndecl) = parmdecl;
5888 pushdecl (fndecl);
5889 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5891 pop_lang_context ();
5893 return current_function_decl;
5896 /* Finish the cleanup function begun by start_cleanup_fn. */
5898 static void
5899 end_cleanup_fn (void)
5901 expand_or_defer_fn (finish_function (0));
5903 pop_from_top_level ();
5906 /* Generate code to handle the destruction of DECL, an object with
5907 static storage duration. */
5909 tree
5910 register_dtor_fn (tree decl)
5912 tree cleanup;
5913 tree compound_stmt;
5914 tree args;
5915 tree fcall;
5916 tree type;
5917 bool use_dtor;
5919 type = TREE_TYPE (decl);
5920 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
5921 return void_zero_node;
5923 /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
5924 a class object, we can just pass the destructor to
5925 "__cxa_atexit"; we don't have to build a temporary function to do
5926 the cleanup. */
5927 use_dtor = (flag_use_cxa_atexit
5928 && !targetm.cxx.use_atexit_for_cxa_atexit ()
5929 && CLASS_TYPE_P (type));
5930 if (use_dtor)
5932 int idx;
5934 /* Find the destructor. */
5935 idx = lookup_fnfields_1 (type, complete_dtor_identifier);
5936 gcc_assert (idx >= 0);
5937 cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
5938 /* Make sure it is accessible. */
5939 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
5941 else
5943 /* Call build_cleanup before we enter the anonymous function so
5944 that any access checks will be done relative to the current
5945 scope, rather than the scope of the anonymous function. */
5946 build_cleanup (decl);
5948 /* Now start the function. */
5949 cleanup = start_cleanup_fn ();
5951 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5952 to the original function, rather than the anonymous one. That
5953 will make the back end think that nested functions are in use,
5954 which causes confusion. */
5955 push_deferring_access_checks (dk_no_check);
5956 fcall = build_cleanup (decl);
5957 pop_deferring_access_checks ();
5959 /* Create the body of the anonymous function. */
5960 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5961 finish_expr_stmt (fcall);
5962 finish_compound_stmt (compound_stmt);
5963 end_cleanup_fn ();
5966 /* Call atexit with the cleanup function. */
5967 mark_used (cleanup);
5968 cleanup = build_address (cleanup);
5969 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5971 tree addr;
5973 if (use_dtor)
5975 /* We must convert CLEANUP to the type that "__cxa_atexit"
5976 expects. */
5977 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
5978 /* "__cxa_atexit" will pass the address of DECL to the
5979 cleanup function. */
5980 mark_used (decl);
5981 addr = build_address (decl);
5982 /* The declared type of the parameter to "__cxa_atexit" is
5983 "void *". For plain "T*", we could just let the
5984 machinery in cp_build_function_call convert it -- but if the
5985 type is "cv-qualified T *", then we need to convert it
5986 before passing it in, to avoid spurious errors. */
5987 addr = build_nop (ptr_type_node, addr);
5989 else
5990 /* Since the cleanup functions we build ignore the address
5991 they're given, there's no reason to pass the actual address
5992 in, and, in general, it's cheaper to pass NULL than any
5993 other value. */
5994 addr = null_pointer_node;
5995 args = tree_cons (NULL_TREE,
5996 cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
5997 tf_warning_or_error),
5998 NULL_TREE);
5999 if (targetm.cxx.use_aeabi_atexit ())
6001 args = tree_cons (NULL_TREE, cleanup, args);
6002 args = tree_cons (NULL_TREE, addr, args);
6004 else
6006 args = tree_cons (NULL_TREE, addr, args);
6007 args = tree_cons (NULL_TREE, cleanup, args);
6010 else
6011 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6012 return cp_build_function_call (get_atexit_node (), args,
6013 tf_warning_or_error);
6016 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
6017 is its initializer. Generate code to handle the construction
6018 and destruction of DECL. */
6020 static void
6021 expand_static_init (tree decl, tree init)
6023 gcc_assert (TREE_CODE (decl) == VAR_DECL);
6024 gcc_assert (TREE_STATIC (decl));
6026 /* Some variables require no initialization. */
6027 if (!init
6028 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6029 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6030 return;
6032 if (DECL_FUNCTION_SCOPE_P (decl))
6034 /* Emit code to perform this initialization but once. */
6035 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6036 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6037 tree guard, guard_addr;
6038 tree acquire_fn, release_fn, abort_fn;
6039 tree flag, begin;
6041 /* Emit code to perform this initialization but once. This code
6042 looks like:
6044 static <type> guard;
6045 if (!guard.first_byte) {
6046 if (__cxa_guard_acquire (&guard)) {
6047 bool flag = false;
6048 try {
6049 // Do initialization.
6050 flag = true; __cxa_guard_release (&guard);
6051 // Register variable for destruction at end of program.
6052 } catch {
6053 if (!flag) __cxa_guard_abort (&guard);
6057 Note that the `flag' variable is only set to 1 *after* the
6058 initialization is complete. This ensures that an exception,
6059 thrown during the construction, will cause the variable to
6060 reinitialized when we pass through this code again, as per:
6062 [stmt.dcl]
6064 If the initialization exits by throwing an exception, the
6065 initialization is not complete, so it will be tried again
6066 the next time control enters the declaration.
6068 This process should be thread-safe, too; multiple threads
6069 should not be able to initialize the variable more than
6070 once. */
6072 /* Create the guard variable. */
6073 guard = get_guard (decl);
6075 /* This optimization isn't safe on targets with relaxed memory
6076 consistency. On such targets we force synchronization in
6077 __cxa_guard_acquire. */
6078 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6080 /* Begin the conditional initialization. */
6081 if_stmt = begin_if_stmt ();
6082 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6083 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6086 if (flag_threadsafe_statics)
6088 guard_addr = build_address (guard);
6090 acquire_fn = get_identifier ("__cxa_guard_acquire");
6091 release_fn = get_identifier ("__cxa_guard_release");
6092 abort_fn = get_identifier ("__cxa_guard_abort");
6093 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6095 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6096 void_list_node);
6097 tree vfntype = build_function_type (void_type_node, argtypes);
6098 acquire_fn = push_library_fn
6099 (acquire_fn, build_function_type (integer_type_node, argtypes));
6100 release_fn = push_library_fn (release_fn, vfntype);
6101 abort_fn = push_library_fn (abort_fn, vfntype);
6103 else
6105 release_fn = identifier_global_value (release_fn);
6106 abort_fn = identifier_global_value (abort_fn);
6109 inner_if_stmt = begin_if_stmt ();
6110 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6111 inner_if_stmt);
6113 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6114 begin = get_target_expr (boolean_false_node);
6115 flag = TARGET_EXPR_SLOT (begin);
6117 TARGET_EXPR_CLEANUP (begin)
6118 = build3 (COND_EXPR, void_type_node, flag,
6119 void_zero_node,
6120 build_call_n (abort_fn, 1, guard_addr));
6121 CLEANUP_EH_ONLY (begin) = 1;
6123 /* Do the initialization itself. */
6124 init = add_stmt_to_compound (begin, init);
6125 init = add_stmt_to_compound
6126 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6127 init = add_stmt_to_compound
6128 (init, build_call_n (release_fn, 1, guard_addr));
6130 else
6131 init = add_stmt_to_compound (init, set_guard (guard));
6133 /* Use atexit to register a function for destroying this static
6134 variable. */
6135 init = add_stmt_to_compound (init, register_dtor_fn (decl));
6137 finish_expr_stmt (init);
6139 if (flag_threadsafe_statics)
6141 finish_compound_stmt (inner_then_clause);
6142 finish_then_clause (inner_if_stmt);
6143 finish_if_stmt (inner_if_stmt);
6146 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6148 finish_compound_stmt (then_clause);
6149 finish_then_clause (if_stmt);
6150 finish_if_stmt (if_stmt);
6153 else
6154 static_aggregates = tree_cons (init, decl, static_aggregates);
6158 /* Make TYPE a complete type based on INITIAL_VALUE.
6159 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6160 2 if there was no information (in which case assume 0 if DO_DEFAULT),
6161 3 if the initializer list is empty (in pedantic mode). */
6164 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6166 int failure;
6167 tree type, elt_type;
6169 if (initial_value)
6171 unsigned HOST_WIDE_INT i;
6172 tree value;
6174 /* An array of character type can be initialized from a
6175 brace-enclosed string constant.
6177 FIXME: this code is duplicated from reshape_init. Probably
6178 we should just call reshape_init here? */
6179 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6180 && TREE_CODE (initial_value) == CONSTRUCTOR
6181 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6183 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6184 tree value = VEC_index (constructor_elt, v, 0)->value;
6186 if (TREE_CODE (value) == STRING_CST
6187 && VEC_length (constructor_elt, v) == 1)
6188 initial_value = value;
6191 /* If any of the elements are parameter packs, we can't actually
6192 complete this type now because the array size is dependent. */
6193 if (TREE_CODE (initial_value) == CONSTRUCTOR)
6195 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6196 i, value)
6198 if (PACK_EXPANSION_P (value))
6199 return 0;
6204 failure = complete_array_type (ptype, initial_value, do_default);
6206 /* We can create the array before the element type is complete, which
6207 means that we didn't have these two bits set in the original type
6208 either. In completing the type, we are expected to propagate these
6209 bits. See also complete_type which does the same thing for arrays
6210 of fixed size. */
6211 type = *ptype;
6212 if (TYPE_DOMAIN (type))
6214 elt_type = TREE_TYPE (type);
6215 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6216 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6217 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6220 return failure;
6223 /* Return zero if something is declared to be a member of type
6224 CTYPE when in the context of CUR_TYPE. STRING is the error
6225 message to print in that case. Otherwise, quietly return 1. */
6227 static int
6228 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6230 if (ctype && ctype != cur_type)
6232 if (flags == DTOR_FLAG)
6233 error ("destructor for alien class %qT cannot be a member", ctype);
6234 else
6235 error ("constructor for alien class %qT cannot be a member", ctype);
6236 return 0;
6238 return 1;
6241 /* Subroutine of `grokdeclarator'. */
6243 /* Generate errors possibly applicable for a given set of specifiers.
6244 This is for ARM $7.1.2. */
6246 static void
6247 bad_specifiers (tree object,
6248 const char* type,
6249 int virtualp,
6250 int quals,
6251 int inlinep,
6252 int friendp,
6253 int raises)
6255 if (virtualp)
6256 error ("%qD declared as a %<virtual%> %s", object, type);
6257 if (inlinep)
6258 error ("%qD declared as an %<inline%> %s", object, type);
6259 if (quals)
6260 error ("%<const%> and %<volatile%> function specifiers on "
6261 "%qD invalid in %s declaration",
6262 object, type);
6263 if (friendp)
6264 error ("%q+D declared as a friend", object);
6265 if (raises
6266 && (TREE_CODE (object) == TYPE_DECL
6267 || (!TYPE_PTRFN_P (TREE_TYPE (object))
6268 && !TYPE_REFFN_P (TREE_TYPE (object))
6269 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6270 error ("%q+D declared with an exception specification", object);
6273 /* DECL is a member function or static data member and is presently
6274 being defined. Check that the definition is taking place in a
6275 valid namespace. */
6277 static void
6278 check_class_member_definition_namespace (tree decl)
6280 /* These checks only apply to member functions and static data
6281 members. */
6282 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6283 || TREE_CODE (decl) == VAR_DECL);
6284 /* We check for problems with specializations in pt.c in
6285 check_specialization_namespace, where we can issue better
6286 diagnostics. */
6287 if (processing_specialization)
6288 return;
6289 /* There are no restrictions on the placement of
6290 explicit instantiations. */
6291 if (processing_explicit_instantiation)
6292 return;
6293 /* [class.mfct]
6295 A member function definition that appears outside of the
6296 class definition shall appear in a namespace scope enclosing
6297 the class definition.
6299 [class.static.data]
6301 The definition for a static data member shall appear in a
6302 namespace scope enclosing the member's class definition. */
6303 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6304 pedwarn ("definition of %qD is not in namespace enclosing %qT",
6305 decl, DECL_CONTEXT (decl));
6308 /* Build a PARM_DECL for the "this" parameter. TYPE is the
6309 METHOD_TYPE for a non-static member function; QUALS are the
6310 cv-qualifiers that apply to the function. */
6312 tree
6313 build_this_parm (tree type, cp_cv_quals quals)
6315 tree this_type;
6316 tree qual_type;
6317 tree parm;
6318 cp_cv_quals this_quals;
6320 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6321 /* The `this' parameter is implicitly `const'; it cannot be
6322 assigned to. */
6323 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6324 qual_type = cp_build_qualified_type (this_type, this_quals);
6325 parm = build_artificial_parm (this_identifier, qual_type);
6326 cp_apply_type_quals_to_decl (this_quals, parm);
6327 return parm;
6330 /* CTYPE is class type, or null if non-class.
6331 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6332 or METHOD_TYPE.
6333 DECLARATOR is the function's name.
6334 PARMS is a chain of PARM_DECLs for the function.
6335 VIRTUALP is truthvalue of whether the function is virtual or not.
6336 FLAGS are to be passed through to `grokclassfn'.
6337 QUALS are qualifiers indicating whether the function is `const'
6338 or `volatile'.
6339 RAISES is a list of exceptions that this function can raise.
6340 CHECK is 1 if we must find this method in CTYPE, 0 if we should
6341 not look, and -1 if we should not call `grokclassfn' at all.
6343 SFK is the kind of special function (if any) for the new function.
6345 Returns `NULL_TREE' if something goes wrong, after issuing
6346 applicable error messages. */
6348 static tree
6349 grokfndecl (tree ctype,
6350 tree type,
6351 tree declarator,
6352 tree parms,
6353 tree orig_declarator,
6354 int virtualp,
6355 enum overload_flags flags,
6356 cp_cv_quals quals,
6357 tree raises,
6358 int check,
6359 int friendp,
6360 int publicp,
6361 int inlinep,
6362 special_function_kind sfk,
6363 bool funcdef_flag,
6364 int template_count,
6365 tree in_namespace,
6366 tree* attrlist)
6368 tree decl;
6369 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6370 tree t;
6372 if (raises)
6373 type = build_exception_variant (type, raises);
6375 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6376 if (TREE_CODE (type) == METHOD_TYPE)
6378 tree parm;
6379 parm = build_this_parm (type, quals);
6380 TREE_CHAIN (parm) = parms;
6381 parms = parm;
6383 DECL_ARGUMENTS (decl) = parms;
6384 /* Propagate volatile out from type to decl. */
6385 if (TYPE_VOLATILE (type))
6386 TREE_THIS_VOLATILE (decl) = 1;
6388 /* Setup decl according to sfk. */
6389 switch (sfk)
6391 case sfk_constructor:
6392 case sfk_copy_constructor:
6393 DECL_CONSTRUCTOR_P (decl) = 1;
6394 break;
6395 case sfk_destructor:
6396 DECL_DESTRUCTOR_P (decl) = 1;
6397 break;
6398 default:
6399 break;
6402 /* If pointers to member functions use the least significant bit to
6403 indicate whether a function is virtual, ensure a pointer
6404 to this function will have that bit clear. */
6405 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6406 && TREE_CODE (type) == METHOD_TYPE
6407 && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6408 DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6410 if (friendp
6411 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6413 if (funcdef_flag)
6414 error
6415 ("defining explicit specialization %qD in friend declaration",
6416 orig_declarator);
6417 else
6419 tree fns = TREE_OPERAND (orig_declarator, 0);
6420 tree args = TREE_OPERAND (orig_declarator, 1);
6422 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6424 /* Something like `template <class T> friend void f<T>()'. */
6425 error ("invalid use of template-id %qD in declaration "
6426 "of primary template",
6427 orig_declarator);
6428 return NULL_TREE;
6432 /* A friend declaration of the form friend void f<>(). Record
6433 the information in the TEMPLATE_ID_EXPR. */
6434 SET_DECL_IMPLICIT_INSTANTIATION (decl);
6436 if (TREE_CODE (fns) == COMPONENT_REF)
6438 /* Due to bison parser ickiness, we will have already looked
6439 up an operator_name or PFUNCNAME within the current class
6440 (see template_id in parse.y). If the current class contains
6441 such a name, we'll get a COMPONENT_REF here. Undo that. */
6443 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6444 == current_class_type);
6445 fns = TREE_OPERAND (fns, 1);
6447 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6448 || TREE_CODE (fns) == OVERLOAD);
6449 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6451 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6452 if (TREE_PURPOSE (t)
6453 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6455 error ("default arguments are not allowed in declaration "
6456 "of friend template specialization %qD",
6457 decl);
6458 return NULL_TREE;
6461 if (inlinep)
6463 error ("%<inline%> is not allowed in declaration of friend "
6464 "template specialization %qD",
6465 decl);
6466 return NULL_TREE;
6471 /* If this decl has namespace scope, set that up. */
6472 if (in_namespace)
6473 set_decl_namespace (decl, in_namespace, friendp);
6474 else if (!ctype)
6475 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6477 /* `main' and builtins have implicit 'C' linkage. */
6478 if ((MAIN_NAME_P (declarator)
6479 || (IDENTIFIER_LENGTH (declarator) > 10
6480 && IDENTIFIER_POINTER (declarator)[0] == '_'
6481 && IDENTIFIER_POINTER (declarator)[1] == '_'
6482 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6483 && current_lang_name == lang_name_cplusplus
6484 && ctype == NULL_TREE
6485 /* NULL_TREE means global namespace. */
6486 && DECL_CONTEXT (decl) == NULL_TREE)
6487 SET_DECL_LANGUAGE (decl, lang_c);
6489 /* Should probably propagate const out from type to decl I bet (mrs). */
6490 if (staticp)
6492 DECL_STATIC_FUNCTION_P (decl) = 1;
6493 DECL_CONTEXT (decl) = ctype;
6496 if (ctype)
6498 DECL_CONTEXT (decl) = ctype;
6499 if (funcdef_flag)
6500 check_class_member_definition_namespace (decl);
6503 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6505 if (processing_template_decl)
6506 error ("cannot declare %<::main%> to be a template");
6507 if (inlinep)
6508 error ("cannot declare %<::main%> to be inline");
6509 if (!publicp)
6510 error ("cannot declare %<::main%> to be static");
6511 inlinep = 0;
6512 publicp = 1;
6515 /* Members of anonymous types and local classes have no linkage; make
6516 them internal. If a typedef is made later, this will be changed. */
6517 if (ctype && (TYPE_ANONYMOUS_P (ctype)
6518 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6519 publicp = 0;
6521 if (publicp)
6523 /* [basic.link]: A name with no linkage (notably, the name of a class
6524 or enumeration declared in a local scope) shall not be used to
6525 declare an entity with linkage.
6527 Only check this for public decls for now. See core 319, 389. */
6528 t = no_linkage_check (TREE_TYPE (decl),
6529 /*relaxed_p=*/false);
6530 if (t)
6532 if (TYPE_ANONYMOUS_P (t))
6534 if (DECL_EXTERN_C_P (decl))
6535 /* Allow this; it's pretty common in C. */;
6536 else
6538 pedwarn ("non-local function %q#D uses anonymous type",
6539 decl);
6540 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6541 pedwarn ("%q+#D does not refer to the unqualified "
6542 "type, so it is not used for linkage",
6543 TYPE_NAME (t));
6546 else
6547 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6551 TREE_PUBLIC (decl) = publicp;
6552 if (! publicp)
6554 DECL_INTERFACE_KNOWN (decl) = 1;
6555 DECL_NOT_REALLY_EXTERN (decl) = 1;
6558 /* If the declaration was declared inline, mark it as such. */
6559 if (inlinep)
6560 DECL_DECLARED_INLINE_P (decl) = 1;
6561 /* We inline functions that are explicitly declared inline, or, when
6562 the user explicitly asks us to, all functions. */
6563 if (DECL_DECLARED_INLINE_P (decl)
6564 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6565 DECL_INLINE (decl) = 1;
6567 DECL_EXTERNAL (decl) = 1;
6568 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6570 error (ctype
6571 ? G_("static member function %qD cannot have cv-qualifier")
6572 : G_("non-member function %qD cannot have cv-qualifier"),
6573 decl);
6574 quals = TYPE_UNQUALIFIED;
6577 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6578 && !grok_op_properties (decl, /*complain=*/true))
6579 return NULL_TREE;
6581 if (ctype && decl_function_context (decl))
6582 DECL_NO_STATIC_CHAIN (decl) = 1;
6584 if (funcdef_flag)
6585 /* Make the init_value nonzero so pushdecl knows this is not
6586 tentative. error_mark_node is replaced later with the BLOCK. */
6587 DECL_INITIAL (decl) = error_mark_node;
6589 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6590 TREE_NOTHROW (decl) = 1;
6592 /* Caller will do the rest of this. */
6593 if (check < 0)
6594 return decl;
6596 if (ctype != NULL_TREE)
6597 grokclassfn (ctype, decl, flags);
6599 decl = check_explicit_specialization (orig_declarator, decl,
6600 template_count,
6601 2 * funcdef_flag +
6602 4 * (friendp != 0));
6603 if (decl == error_mark_node)
6604 return NULL_TREE;
6606 if (attrlist)
6608 cplus_decl_attributes (&decl, *attrlist, 0);
6609 *attrlist = NULL_TREE;
6612 /* Check main's type after attributes have been applied. */
6613 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6615 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6616 integer_type_node))
6618 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6619 tree newtype;
6620 error ("%<::main%> must return %<int%>");
6621 newtype = build_function_type (integer_type_node, oldtypeargs);
6622 TREE_TYPE (decl) = newtype;
6624 check_main_parameter_types (decl);
6627 if (ctype != NULL_TREE
6628 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6629 && check)
6631 tree old_decl = check_classfn (ctype, decl,
6632 (processing_template_decl
6633 > template_class_depth (ctype))
6634 ? current_template_parms
6635 : NULL_TREE);
6637 if (old_decl == error_mark_node)
6638 return NULL_TREE;
6640 if (old_decl)
6642 tree ok;
6643 tree pushed_scope;
6645 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6646 /* Because grokfndecl is always supposed to return a
6647 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6648 here. We depend on our callers to figure out that its
6649 really a template that's being returned. */
6650 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6652 if (DECL_STATIC_FUNCTION_P (old_decl)
6653 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6654 /* Remove the `this' parm added by grokclassfn.
6655 XXX Isn't this done in start_function, too? */
6656 revert_static_member_fn (decl);
6657 if (DECL_ARTIFICIAL (old_decl))
6659 error ("definition of implicitly-declared %qD", old_decl);
6660 return NULL_TREE;
6663 /* Since we've smashed OLD_DECL to its
6664 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6665 if (TREE_CODE (decl) == TEMPLATE_DECL)
6666 decl = DECL_TEMPLATE_RESULT (decl);
6668 /* Attempt to merge the declarations. This can fail, in
6669 the case of some invalid specialization declarations. */
6670 pushed_scope = push_scope (ctype);
6671 ok = duplicate_decls (decl, old_decl, friendp);
6672 if (pushed_scope)
6673 pop_scope (pushed_scope);
6674 if (!ok)
6676 error ("no %q#D member function declared in class %qT",
6677 decl, ctype);
6678 return NULL_TREE;
6680 return old_decl;
6684 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6685 return NULL_TREE;
6687 if (ctype == NULL_TREE || check)
6688 return decl;
6690 if (virtualp)
6691 DECL_VIRTUAL_P (decl) = 1;
6693 return decl;
6696 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6697 the linkage that DECL will receive in the object file. */
6699 static void
6700 set_linkage_for_static_data_member (tree decl)
6702 /* A static data member always has static storage duration and
6703 external linkage. Note that static data members are forbidden in
6704 local classes -- the only situation in which a class has
6705 non-external linkage. */
6706 TREE_PUBLIC (decl) = 1;
6707 TREE_STATIC (decl) = 1;
6708 /* For non-template classes, static data members are always put
6709 out in exactly those files where they are defined, just as
6710 with ordinary namespace-scope variables. */
6711 if (!processing_template_decl)
6712 DECL_INTERFACE_KNOWN (decl) = 1;
6715 /* Create a VAR_DECL named NAME with the indicated TYPE.
6717 If SCOPE is non-NULL, it is the class type or namespace containing
6718 the variable. If SCOPE is NULL, the variable should is created in
6719 the innermost enclosings scope. */
6721 static tree
6722 grokvardecl (tree type,
6723 tree name,
6724 const cp_decl_specifier_seq *declspecs,
6725 int initialized,
6726 int constp,
6727 tree scope)
6729 tree decl;
6730 tree explicit_scope;
6732 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6734 /* Compute the scope in which to place the variable, but remember
6735 whether or not that scope was explicitly specified by the user. */
6736 explicit_scope = scope;
6737 if (!scope)
6739 /* An explicit "extern" specifier indicates a namespace-scope
6740 variable. */
6741 if (declspecs->storage_class == sc_extern)
6742 scope = current_namespace;
6743 else if (!at_function_scope_p ())
6744 scope = current_scope ();
6747 if (scope
6748 && (/* If the variable is a namespace-scope variable declared in a
6749 template, we need DECL_LANG_SPECIFIC. */
6750 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6751 /* Similarly for namespace-scope variables with language linkage
6752 other than C++. */
6753 || (TREE_CODE (scope) == NAMESPACE_DECL
6754 && current_lang_name != lang_name_cplusplus)
6755 /* Similarly for static data members. */
6756 || TYPE_P (scope)))
6757 decl = build_lang_decl (VAR_DECL, name, type);
6758 else
6759 decl = build_decl (VAR_DECL, name, type);
6761 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6762 set_decl_namespace (decl, explicit_scope, 0);
6763 else
6764 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6766 if (declspecs->storage_class == sc_extern)
6768 DECL_THIS_EXTERN (decl) = 1;
6769 DECL_EXTERNAL (decl) = !initialized;
6772 if (DECL_CLASS_SCOPE_P (decl))
6774 set_linkage_for_static_data_member (decl);
6775 /* This function is only called with out-of-class definitions. */
6776 DECL_EXTERNAL (decl) = 0;
6777 check_class_member_definition_namespace (decl);
6779 /* At top level, either `static' or no s.c. makes a definition
6780 (perhaps tentative), and absence of `static' makes it public. */
6781 else if (toplevel_bindings_p ())
6783 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6784 && (DECL_THIS_EXTERN (decl) || ! constp));
6785 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6787 /* Not at top level, only `static' makes a static definition. */
6788 else
6790 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6791 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6794 if (declspecs->specs[(int)ds_thread])
6795 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6797 if (TREE_PUBLIC (decl))
6799 /* [basic.link]: A name with no linkage (notably, the name of a class
6800 or enumeration declared in a local scope) shall not be used to
6801 declare an entity with linkage.
6803 Only check this for public decls for now. */
6804 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6805 if (t)
6807 if (TYPE_ANONYMOUS_P (t))
6809 if (DECL_EXTERN_C_P (decl))
6810 /* Allow this; it's pretty common in C. */
6812 else
6814 /* DRs 132, 319 and 389 seem to indicate types with
6815 no linkage can only be used to declare extern "C"
6816 entities. Since it's not always an error in the
6817 ISO C++ 90 Standard, we only issue a warning. */
6818 warning (0, "non-local variable %q#D uses anonymous type",
6819 decl);
6820 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6821 warning (0, "%q+#D does not refer to the unqualified "
6822 "type, so it is not used for linkage",
6823 TYPE_NAME (t));
6826 else
6827 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6830 else
6831 DECL_INTERFACE_KNOWN (decl) = 1;
6833 return decl;
6836 /* Create and return a canonical pointer to member function type, for
6837 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
6839 tree
6840 build_ptrmemfunc_type (tree type)
6842 tree field, fields;
6843 tree t;
6844 tree unqualified_variant = NULL_TREE;
6846 if (type == error_mark_node)
6847 return type;
6849 /* If a canonical type already exists for this type, use it. We use
6850 this method instead of type_hash_canon, because it only does a
6851 simple equality check on the list of field members. */
6853 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6854 return t;
6856 /* Make sure that we always have the unqualified pointer-to-member
6857 type first. */
6858 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6859 unqualified_variant
6860 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6862 t = make_class_type (RECORD_TYPE);
6863 xref_basetypes (t, NULL_TREE);
6865 /* Let the front end know this is a pointer to member function... */
6866 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6867 /* ... and not really a class type. */
6868 SET_CLASS_TYPE_P (t, 0);
6870 field = build_decl (FIELD_DECL, pfn_identifier, type);
6871 fields = field;
6873 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6874 TREE_CHAIN (field) = fields;
6875 fields = field;
6877 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6879 /* Zap out the name so that the back end will give us the debugging
6880 information for this anonymous RECORD_TYPE. */
6881 TYPE_NAME (t) = NULL_TREE;
6883 /* If this is not the unqualified form of this pointer-to-member
6884 type, set the TYPE_MAIN_VARIANT for this type to be the
6885 unqualified type. Since they are actually RECORD_TYPEs that are
6886 not variants of each other, we must do this manually. */
6887 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6889 t = build_qualified_type (t, cp_type_quals (type));
6890 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6891 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6892 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6895 /* Cache this pointer-to-member type so that we can find it again
6896 later. */
6897 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6899 /* Managing canonical types for the RECORD_TYPE behind a
6900 pointer-to-member function is a nightmare, so use structural
6901 equality for now. */
6902 SET_TYPE_STRUCTURAL_EQUALITY (t);
6904 return t;
6907 /* Create and return a pointer to data member type. */
6909 tree
6910 build_ptrmem_type (tree class_type, tree member_type)
6912 if (TREE_CODE (member_type) == METHOD_TYPE)
6914 tree arg_types;
6916 arg_types = TYPE_ARG_TYPES (member_type);
6917 class_type = (cp_build_qualified_type
6918 (class_type,
6919 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6920 member_type
6921 = build_method_type_directly (class_type,
6922 TREE_TYPE (member_type),
6923 TREE_CHAIN (arg_types));
6924 return build_ptrmemfunc_type (build_pointer_type (member_type));
6926 else
6928 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6929 return build_offset_type (class_type, member_type);
6933 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6934 Check to see that the definition is valid. Issue appropriate error
6935 messages. Return 1 if the definition is particularly bad, or 0
6936 otherwise. */
6939 check_static_variable_definition (tree decl, tree type)
6941 /* Motion 10 at San Diego: If a static const integral data member is
6942 initialized with an integral constant expression, the initializer
6943 may appear either in the declaration (within the class), or in
6944 the definition, but not both. If it appears in the class, the
6945 member is a member constant. The file-scope definition is always
6946 required. */
6947 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6949 error ("invalid in-class initialization of static data member "
6950 "of non-integral type %qT",
6951 type);
6952 /* If we just return the declaration, crashes will sometimes
6953 occur. We therefore return void_type_node, as if this were a
6954 friend declaration, to cause callers to completely ignore
6955 this declaration. */
6956 return 1;
6958 else if (!CP_TYPE_CONST_P (type))
6959 error ("ISO C++ forbids in-class initialization of non-const "
6960 "static member %qD",
6961 decl);
6962 else if (pedantic && !INTEGRAL_TYPE_P (type))
6963 pedwarn ("ISO C++ forbids initialization of member constant "
6964 "%qD of non-integral type %qT", decl, type);
6966 return 0;
6969 /* Given the SIZE (i.e., number of elements) in an array, compute an
6970 appropriate index type for the array. If non-NULL, NAME is the
6971 name of the thing being declared. */
6973 tree
6974 compute_array_index_type (tree name, tree size)
6976 tree type;
6977 tree itype;
6978 tree abi_1_itype = NULL_TREE;
6980 if (error_operand_p (size))
6981 return error_mark_node;
6983 type = TREE_TYPE (size);
6984 /* The array bound must be an integer type. */
6985 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6987 if (name)
6988 error ("size of array %qD has non-integral type %qT", name, type);
6989 else
6990 error ("size of array has non-integral type %qT", type);
6991 size = integer_one_node;
6992 type = TREE_TYPE (size);
6995 if (value_dependent_expression_p (size))
6997 /* We cannot do any checking for a value-dependent SIZE. Just
6998 build the index type and mark that it requires structural
6999 equality checks. */
7000 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7001 size, integer_one_node));
7002 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7003 return itype;
7006 if (!abi_version_at_least (2) && processing_template_decl)
7007 /* For abi-1, we handled all instances in templates the same way,
7008 even when they were non-dependent. This effects the manglings
7009 produced. So, we do the normal checking for non-dependent
7010 sizes, but at the end we'll return the same type that abi-1
7011 would have, but with TYPE_CANONICAL set to the "right"
7012 value that the current ABI would provide. */
7013 abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7014 size, integer_one_node));
7016 /* The size might be the result of a cast. */
7017 STRIP_TYPE_NOPS (size);
7019 /* It might be a const variable or enumeration constant. */
7020 size = integral_constant_value (size);
7022 /* Normally, the array-bound will be a constant. */
7023 if (TREE_CODE (size) == INTEGER_CST)
7025 /* Check to see if the array bound overflowed. Make that an
7026 error, no matter how generous we're being. */
7027 constant_expression_error (size);
7029 /* An array must have a positive number of elements. */
7030 if (INT_CST_LT (size, integer_zero_node))
7032 if (name)
7033 error ("size of array %qD is negative", name);
7034 else
7035 error ("size of array is negative");
7036 size = integer_one_node;
7038 /* As an extension we allow zero-sized arrays. We always allow
7039 them in system headers because glibc uses them. */
7040 else if (integer_zerop (size) && pedantic && !in_system_header)
7042 if (name)
7043 pedwarn ("ISO C++ forbids zero-size array %qD", name);
7044 else
7045 pedwarn ("ISO C++ forbids zero-size array");
7048 else if (TREE_CONSTANT (size))
7050 /* `(int) &fn' is not a valid array bound. */
7051 if (name)
7052 error ("size of array %qD is not an integral constant-expression",
7053 name);
7054 else
7055 error ("size of array is not an integral constant-expression");
7056 size = integer_one_node;
7058 else if (pedantic && warn_vla != 0)
7060 if (name)
7061 pedwarn ("ISO C++ forbids variable length array %qD", name);
7062 else
7063 pedwarn ("ISO C++ forbids variable length array");
7065 else if (warn_vla > 0)
7067 if (name)
7068 warning (OPT_Wvla,
7069 "variable length array %qD is used", name);
7070 else
7071 warning (OPT_Wvla,
7072 "variable length array is used");
7075 if (processing_template_decl && !TREE_CONSTANT (size))
7076 /* A variable sized array. */
7077 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7078 else
7080 HOST_WIDE_INT saved_processing_template_decl;
7082 /* Compute the index of the largest element in the array. It is
7083 one less than the number of elements in the array. We save
7084 and restore PROCESSING_TEMPLATE_DECL so that computations in
7085 cp_build_binary_op will be appropriately folded. */
7086 saved_processing_template_decl = processing_template_decl;
7087 processing_template_decl = 0;
7088 itype = cp_build_binary_op (MINUS_EXPR,
7089 cp_convert (ssizetype, size),
7090 cp_convert (ssizetype, integer_one_node),
7091 tf_warning_or_error);
7092 itype = fold (itype);
7093 processing_template_decl = saved_processing_template_decl;
7095 if (!TREE_CONSTANT (itype))
7096 /* A variable sized array. */
7097 itype = variable_size (itype);
7098 /* Make sure that there was no overflow when creating to a signed
7099 index type. (For example, on a 32-bit machine, an array with
7100 size 2^32 - 1 is too big.) */
7101 else if (TREE_CODE (itype) == INTEGER_CST
7102 && TREE_OVERFLOW (itype))
7104 error ("overflow in array dimension");
7105 TREE_OVERFLOW (itype) = 0;
7109 /* Create and return the appropriate index type. */
7110 if (abi_1_itype)
7112 tree t = build_index_type (itype);
7113 TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7114 return abi_1_itype;
7116 else
7117 return build_index_type (itype);
7120 /* Returns the scope (if any) in which the entity declared by
7121 DECLARATOR will be located. If the entity was declared with an
7122 unqualified name, NULL_TREE is returned. */
7124 tree
7125 get_scope_of_declarator (const cp_declarator *declarator)
7127 while (declarator && declarator->kind != cdk_id)
7128 declarator = declarator->declarator;
7130 /* If the declarator-id is a SCOPE_REF, the scope in which the
7131 declaration occurs is the first operand. */
7132 if (declarator
7133 && declarator->u.id.qualifying_scope)
7134 return declarator->u.id.qualifying_scope;
7136 /* Otherwise, the declarator is not a qualified name; the entity will
7137 be declared in the current scope. */
7138 return NULL_TREE;
7141 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7142 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
7143 with this type. */
7145 static tree
7146 create_array_type_for_decl (tree name, tree type, tree size)
7148 tree itype = NULL_TREE;
7149 const char* error_msg;
7151 /* If things have already gone awry, bail now. */
7152 if (type == error_mark_node || size == error_mark_node)
7153 return error_mark_node;
7155 /* Assume that everything will go OK. */
7156 error_msg = NULL;
7158 /* There are some types which cannot be array elements. */
7159 switch (TREE_CODE (type))
7161 case VOID_TYPE:
7162 error_msg = "array of void";
7163 break;
7165 case FUNCTION_TYPE:
7166 error_msg = "array of functions";
7167 break;
7169 case REFERENCE_TYPE:
7170 error_msg = "array of references";
7171 break;
7173 case METHOD_TYPE:
7174 error_msg = "array of function members";
7175 break;
7177 default:
7178 break;
7181 /* If something went wrong, issue an error-message and return. */
7182 if (error_msg)
7184 if (name)
7185 error ("declaration of %qD as %s", name, error_msg);
7186 else
7187 error ("creating %s", error_msg);
7189 return error_mark_node;
7192 /* [dcl.array]
7194 The constant expressions that specify the bounds of the arrays
7195 can be omitted only for the first member of the sequence. */
7196 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7198 if (name)
7199 error ("declaration of %qD as multidimensional array must "
7200 "have bounds for all dimensions except the first",
7201 name);
7202 else
7203 error ("multidimensional array must have bounds for all "
7204 "dimensions except the first");
7206 return error_mark_node;
7209 /* Figure out the index type for the array. */
7210 if (size)
7211 itype = compute_array_index_type (name, size);
7213 /* [dcl.array]
7214 T is called the array element type; this type shall not be [...] an
7215 abstract class type. */
7216 abstract_virtuals_error (name, type);
7218 return build_cplus_array_type (type, itype);
7221 /* Check that it's OK to declare a function with the indicated TYPE.
7222 SFK indicates the kind of special function (if any) that this
7223 function is. OPTYPE is the type given in a conversion operator
7224 declaration, or the class type for a constructor/destructor.
7225 Returns the actual return type of the function; that
7226 may be different than TYPE if an error occurs, or for certain
7227 special functions. */
7229 static tree
7230 check_special_function_return_type (special_function_kind sfk,
7231 tree type,
7232 tree optype)
7234 switch (sfk)
7236 case sfk_constructor:
7237 if (type)
7238 error ("return type specification for constructor invalid");
7240 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7241 type = build_pointer_type (optype);
7242 else
7243 type = void_type_node;
7244 break;
7246 case sfk_destructor:
7247 if (type)
7248 error ("return type specification for destructor invalid");
7249 /* We can't use the proper return type here because we run into
7250 problems with ambiguous bases and covariant returns.
7251 Java classes are left unchanged because (void *) isn't a valid
7252 Java type, and we don't want to change the Java ABI. */
7253 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7254 type = build_pointer_type (void_type_node);
7255 else
7256 type = void_type_node;
7257 break;
7259 case sfk_conversion:
7260 if (type)
7261 error ("return type specified for %<operator %T%>", optype);
7262 type = optype;
7263 break;
7265 default:
7266 gcc_unreachable ();
7269 return type;
7272 /* A variable or data member (whose unqualified name is IDENTIFIER)
7273 has been declared with the indicated TYPE. If the TYPE is not
7274 acceptable, issue an error message and return a type to use for
7275 error-recovery purposes. */
7277 tree
7278 check_var_type (tree identifier, tree type)
7280 if (VOID_TYPE_P (type))
7282 if (!identifier)
7283 error ("unnamed variable or field declared void");
7284 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7286 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7287 error ("variable or field %qE declared void", identifier);
7289 else
7290 error ("variable or field declared void");
7291 type = error_mark_node;
7294 return type;
7297 /* Given declspecs and a declarator (abstract or otherwise), determine
7298 the name and type of the object declared and construct a DECL node
7299 for it.
7301 DECLSPECS points to the representation of declaration-specifier
7302 sequence that precedes declarator.
7304 DECL_CONTEXT says which syntactic context this declaration is in:
7305 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7306 FUNCDEF for a function definition. Like NORMAL but a few different
7307 error messages in each case. Return value may be zero meaning
7308 this definition is too screwy to try to parse.
7309 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
7310 handle member functions (which have FIELD context).
7311 Return value may be zero meaning this definition is too screwy to
7312 try to parse.
7313 PARM for a parameter declaration (either within a function prototype
7314 or before a function body). Make a PARM_DECL, or return void_type_node.
7315 CATCHPARM for a parameter declaration before a catch clause.
7316 TYPENAME if for a typename (in a cast or sizeof).
7317 Don't make a DECL node; just return the ..._TYPE node.
7318 FIELD for a struct or union field; make a FIELD_DECL.
7319 BITFIELD for a field with specified width.
7320 INITIALIZED is 1 if the decl has an initializer.
7322 ATTRLIST is a pointer to the list of attributes, which may be NULL
7323 if there are none; *ATTRLIST may be modified if attributes from inside
7324 the declarator should be applied to the declaration.
7326 When this function is called, scoping variables (such as
7327 CURRENT_CLASS_TYPE) should reflect the scope in which the
7328 declaration occurs, not the scope in which the new declaration will
7329 be placed. For example, on:
7331 void S::f() { ... }
7333 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7334 should not be `S'.
7336 Returns a DECL (if a declarator is present), a TYPE (if there is no
7337 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7338 error occurs. */
7340 tree
7341 grokdeclarator (const cp_declarator *declarator,
7342 const cp_decl_specifier_seq *declspecs,
7343 enum decl_context decl_context,
7344 int initialized,
7345 tree* attrlist)
7347 tree type = NULL_TREE;
7348 int longlong = 0;
7349 int virtualp, explicitp, friendp, inlinep, staticp;
7350 int explicit_int = 0;
7351 int explicit_char = 0;
7352 int defaulted_int = 0;
7353 tree dependent_name = NULL_TREE;
7355 tree typedef_decl = NULL_TREE;
7356 const char *name = NULL;
7357 tree typedef_type = NULL_TREE;
7358 /* True if this declarator is a function definition. */
7359 bool funcdef_flag = false;
7360 cp_declarator_kind innermost_code = cdk_error;
7361 int bitfield = 0;
7362 #if 0
7363 /* See the code below that used this. */
7364 tree decl_attr = NULL_TREE;
7365 #endif
7367 /* Keep track of what sort of function is being processed
7368 so that we can warn about default return values, or explicit
7369 return values which do not match prescribed defaults. */
7370 special_function_kind sfk = sfk_none;
7372 tree dname = NULL_TREE;
7373 tree ctor_return_type = NULL_TREE;
7374 enum overload_flags flags = NO_SPECIAL;
7375 /* cv-qualifiers that apply to the declarator, for a declaration of
7376 a member function. */
7377 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7378 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
7379 int type_quals;
7380 tree raises = NULL_TREE;
7381 int template_count = 0;
7382 tree returned_attrs = NULL_TREE;
7383 tree parms = NULL_TREE;
7384 const cp_declarator *id_declarator;
7385 /* The unqualified name of the declarator; either an
7386 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
7387 tree unqualified_id;
7388 /* The class type, if any, in which this entity is located,
7389 or NULL_TREE if none. Note that this value may be different from
7390 the current class type; for example if an attempt is made to declare
7391 "A::f" inside "B", this value will be "A". */
7392 tree ctype = current_class_type;
7393 /* The NAMESPACE_DECL for the namespace in which this entity is
7394 located. If an unqualified name is used to declare the entity,
7395 this value will be NULL_TREE, even if the entity is located at
7396 namespace scope. */
7397 tree in_namespace = NULL_TREE;
7398 cp_storage_class storage_class;
7399 bool unsigned_p, signed_p, short_p, long_p, thread_p;
7400 bool type_was_error_mark_node = false;
7401 bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7402 bool set_no_warning = false;
7404 signed_p = declspecs->specs[(int)ds_signed];
7405 unsigned_p = declspecs->specs[(int)ds_unsigned];
7406 short_p = declspecs->specs[(int)ds_short];
7407 long_p = declspecs->specs[(int)ds_long];
7408 longlong = declspecs->specs[(int)ds_long] >= 2;
7409 thread_p = declspecs->specs[(int)ds_thread];
7411 if (decl_context == FUNCDEF)
7412 funcdef_flag = true, decl_context = NORMAL;
7413 else if (decl_context == MEMFUNCDEF)
7414 funcdef_flag = true, decl_context = FIELD;
7415 else if (decl_context == BITFIELD)
7416 bitfield = 1, decl_context = FIELD;
7418 /* Look inside a declarator for the name being declared
7419 and get it as a string, for an error message. */
7420 for (id_declarator = declarator;
7421 id_declarator;
7422 id_declarator = id_declarator->declarator)
7424 if (id_declarator->kind != cdk_id)
7425 innermost_code = id_declarator->kind;
7427 switch (id_declarator->kind)
7429 case cdk_function:
7430 if (id_declarator->declarator
7431 && id_declarator->declarator->kind == cdk_id)
7433 sfk = id_declarator->declarator->u.id.sfk;
7434 if (sfk == sfk_destructor)
7435 flags = DTOR_FLAG;
7437 break;
7439 case cdk_id:
7441 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7442 tree decl = id_declarator->u.id.unqualified_name;
7443 if (!decl)
7444 break;
7445 if (qualifying_scope)
7447 if (at_function_scope_p ())
7449 /* [dcl.meaning]
7451 A declarator-id shall not be qualified except
7452 for ...
7454 None of the cases are permitted in block
7455 scope. */
7456 if (qualifying_scope == global_namespace)
7457 error ("invalid use of qualified-name %<::%D%>",
7458 decl);
7459 else if (TYPE_P (qualifying_scope))
7460 error ("invalid use of qualified-name %<%T::%D%>",
7461 qualifying_scope, decl);
7462 else
7463 error ("invalid use of qualified-name %<%D::%D%>",
7464 qualifying_scope, decl);
7465 return error_mark_node;
7467 else if (TYPE_P (qualifying_scope))
7469 ctype = qualifying_scope;
7470 if (innermost_code != cdk_function
7471 && current_class_type
7472 && !UNIQUELY_DERIVED_FROM_P (ctype,
7473 current_class_type))
7475 error ("type %qT is not derived from type %qT",
7476 ctype, current_class_type);
7477 return error_mark_node;
7480 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7481 in_namespace = qualifying_scope;
7483 switch (TREE_CODE (decl))
7485 case BIT_NOT_EXPR:
7487 tree type;
7489 if (innermost_code != cdk_function)
7491 error ("declaration of %qD as non-function", decl);
7492 return error_mark_node;
7494 else if (!qualifying_scope
7495 && !(current_class_type && at_class_scope_p ()))
7497 error ("declaration of %qD as non-member", decl);
7498 return error_mark_node;
7501 type = TREE_OPERAND (decl, 0);
7502 name = IDENTIFIER_POINTER (constructor_name (type));
7503 dname = decl;
7505 break;
7507 case TEMPLATE_ID_EXPR:
7509 tree fns = TREE_OPERAND (decl, 0);
7511 dname = fns;
7512 if (TREE_CODE (dname) != IDENTIFIER_NODE)
7514 gcc_assert (is_overloaded_fn (dname));
7515 dname = DECL_NAME (get_first_fn (dname));
7518 /* Fall through. */
7520 case IDENTIFIER_NODE:
7521 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7522 dname = decl;
7524 if (C_IS_RESERVED_WORD (dname))
7526 error ("declarator-id missing; using reserved word %qD",
7527 dname);
7528 name = IDENTIFIER_POINTER (dname);
7530 else if (!IDENTIFIER_TYPENAME_P (dname))
7531 name = IDENTIFIER_POINTER (dname);
7532 else
7534 gcc_assert (flags == NO_SPECIAL);
7535 flags = TYPENAME_FLAG;
7536 ctor_return_type = TREE_TYPE (dname);
7537 sfk = sfk_conversion;
7538 if (is_typename_at_global_scope (dname))
7539 name = IDENTIFIER_POINTER (dname);
7540 else
7541 name = "<invalid operator>";
7543 break;
7545 default:
7546 gcc_unreachable ();
7548 break;
7551 case cdk_array:
7552 case cdk_pointer:
7553 case cdk_reference:
7554 case cdk_ptrmem:
7555 break;
7557 case cdk_error:
7558 return error_mark_node;
7560 default:
7561 gcc_unreachable ();
7563 if (id_declarator->kind == cdk_id)
7564 break;
7567 /* [dcl.fct.edf]
7569 The declarator in a function-definition shall have the form
7570 D1 ( parameter-declaration-clause) ... */
7571 if (funcdef_flag && innermost_code != cdk_function)
7573 error ("function definition does not declare parameters");
7574 return error_mark_node;
7577 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7578 && innermost_code != cdk_function
7579 && ! (ctype && !declspecs->any_specifiers_p))
7581 error ("declaration of %qD as non-function", dname);
7582 return error_mark_node;
7585 /* Anything declared one level down from the top level
7586 must be one of the parameters of a function
7587 (because the body is at least two levels down). */
7589 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7590 by not allowing C++ class definitions to specify their parameters
7591 with xdecls (must be spec.d in the parmlist).
7593 Since we now wait to push a class scope until we are sure that
7594 we are in a legitimate method context, we must set oldcname
7595 explicitly (since current_class_name is not yet alive).
7597 We also want to avoid calling this a PARM if it is in a namespace. */
7599 if (decl_context == NORMAL && !toplevel_bindings_p ())
7601 struct cp_binding_level *b = current_binding_level;
7602 current_binding_level = b->level_chain;
7603 if (current_binding_level != 0 && toplevel_bindings_p ())
7604 decl_context = PARM;
7605 current_binding_level = b;
7608 if (name == NULL)
7609 name = decl_context == PARM ? "parameter" : "type name";
7611 /* If there were multiple types specified in the decl-specifier-seq,
7612 issue an error message. */
7613 if (declspecs->multiple_types_p)
7615 error ("two or more data types in declaration of %qs", name);
7616 return error_mark_node;
7619 if (declspecs->conflicting_specifiers_p)
7621 error ("conflicting specifiers in declaration of %qs", name);
7622 return error_mark_node;
7625 /* Extract the basic type from the decl-specifier-seq. */
7626 type = declspecs->type;
7627 if (type == error_mark_node)
7629 type = NULL_TREE;
7630 type_was_error_mark_node = true;
7632 /* If the entire declaration is itself tagged as deprecated then
7633 suppress reports of deprecated items. */
7634 if (type && TREE_DEPRECATED (type)
7635 && deprecated_state != DEPRECATED_SUPPRESS)
7636 warn_deprecated_use (type);
7637 if (type && TREE_CODE (type) == TYPE_DECL)
7639 typedef_decl = type;
7640 type = TREE_TYPE (typedef_decl);
7641 if (TREE_DEPRECATED (type)
7642 && DECL_ARTIFICIAL (typedef_decl)
7643 && deprecated_state != DEPRECATED_SUPPRESS)
7644 warn_deprecated_use (type);
7646 /* No type at all: default to `int', and set DEFAULTED_INT
7647 because it was not a user-defined typedef. */
7648 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7650 /* These imply 'int'. */
7651 type = integer_type_node;
7652 defaulted_int = 1;
7654 /* Gather flags. */
7655 explicit_int = declspecs->explicit_int_p;
7656 explicit_char = declspecs->explicit_char_p;
7658 #if 0
7659 /* See the code below that used this. */
7660 if (typedef_decl)
7661 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7662 #endif
7663 typedef_type = type;
7666 if (sfk != sfk_conversion)
7667 ctor_return_type = ctype;
7669 if (sfk != sfk_none)
7670 type = check_special_function_return_type (sfk, type,
7671 ctor_return_type);
7672 else if (type == NULL_TREE)
7674 int is_main;
7676 explicit_int = -1;
7678 /* We handle `main' specially here, because 'main () { }' is so
7679 common. With no options, it is allowed. With -Wreturn-type,
7680 it is a warning. It is only an error with -pedantic-errors. */
7681 is_main = (funcdef_flag
7682 && dname && MAIN_NAME_P (dname)
7683 && ctype == NULL_TREE
7684 && in_namespace == NULL_TREE
7685 && current_namespace == global_namespace);
7687 if (type_was_error_mark_node)
7688 /* We've already issued an error, don't complain more. */;
7689 else if (in_system_header || flag_ms_extensions)
7690 /* Allow it, sigh. */;
7691 else if (pedantic || ! is_main)
7692 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7693 else
7694 warning (OPT_Wreturn_type,
7695 "ISO C++ forbids declaration of %qs with no type", name);
7697 type = integer_type_node;
7700 ctype = NULL_TREE;
7702 /* Now process the modifiers that were specified
7703 and check for invalid combinations. */
7705 /* Long double is a special combination. */
7706 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7708 long_p = false;
7709 type = build_qualified_type (long_double_type_node,
7710 cp_type_quals (type));
7713 /* Check all other uses of type modifiers. */
7715 if (unsigned_p || signed_p || long_p || short_p)
7717 int ok = 0;
7719 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7720 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7721 else if (signed_p && unsigned_p)
7722 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7723 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7724 error ("%<long long%> invalid for %qs", name);
7725 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7726 error ("%<long%> invalid for %qs", name);
7727 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7728 error ("%<short%> invalid for %qs", name);
7729 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7730 error ("%<long%> or %<short%> invalid for %qs", name);
7731 else if ((long_p || short_p) && explicit_char)
7732 error ("%<long%> or %<short%> specified with char for %qs", name);
7733 else if (long_p && short_p)
7734 error ("%<long%> and %<short%> specified together for %qs", name);
7735 else if (type == char16_type_node || type == char32_type_node)
7737 if (signed_p || unsigned_p)
7738 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7739 else if (short_p || long_p)
7740 error ("%<short%> or %<long%> invalid for %qs", name);
7742 else
7744 ok = 1;
7745 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7747 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7748 name);
7749 if (flag_pedantic_errors)
7750 ok = 0;
7754 /* Discard the type modifiers if they are invalid. */
7755 if (! ok)
7757 unsigned_p = false;
7758 signed_p = false;
7759 long_p = false;
7760 short_p = false;
7761 longlong = 0;
7765 /* Decide whether an integer type is signed or not.
7766 Optionally treat bitfields as signed by default. */
7767 if (unsigned_p
7768 /* [class.bit]
7770 It is implementation-defined whether a plain (neither
7771 explicitly signed or unsigned) char, short, int, or long
7772 bit-field is signed or unsigned.
7774 Naturally, we extend this to long long as well. Note that
7775 this does not include wchar_t. */
7776 || (bitfield && !flag_signed_bitfields
7777 && !signed_p
7778 /* A typedef for plain `int' without `signed' can be
7779 controlled just like plain `int', but a typedef for
7780 `signed int' cannot be so controlled. */
7781 && !(typedef_decl
7782 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7783 && TREE_CODE (type) == INTEGER_TYPE
7784 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7786 if (longlong)
7787 type = long_long_unsigned_type_node;
7788 else if (long_p)
7789 type = long_unsigned_type_node;
7790 else if (short_p)
7791 type = short_unsigned_type_node;
7792 else if (type == char_type_node)
7793 type = unsigned_char_type_node;
7794 else if (typedef_decl)
7795 type = unsigned_type_for (type);
7796 else
7797 type = unsigned_type_node;
7799 else if (signed_p && type == char_type_node)
7800 type = signed_char_type_node;
7801 else if (longlong)
7802 type = long_long_integer_type_node;
7803 else if (long_p)
7804 type = long_integer_type_node;
7805 else if (short_p)
7806 type = short_integer_type_node;
7808 if (declspecs->specs[(int)ds_complex])
7810 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7811 error ("complex invalid for %qs", name);
7812 /* If we just have "complex", it is equivalent to
7813 "complex double", but if any modifiers at all are specified it is
7814 the complex form of TYPE. E.g, "complex short" is
7815 "complex short int". */
7817 else if (defaulted_int && ! longlong
7818 && ! (long_p || short_p || signed_p || unsigned_p))
7819 type = complex_double_type_node;
7820 else if (type == integer_type_node)
7821 type = complex_integer_type_node;
7822 else if (type == float_type_node)
7823 type = complex_float_type_node;
7824 else if (type == double_type_node)
7825 type = complex_double_type_node;
7826 else if (type == long_double_type_node)
7827 type = complex_long_double_type_node;
7828 else
7829 type = build_complex_type (type);
7832 type_quals = TYPE_UNQUALIFIED;
7833 if (declspecs->specs[(int)ds_const])
7834 type_quals |= TYPE_QUAL_CONST;
7835 if (declspecs->specs[(int)ds_volatile])
7836 type_quals |= TYPE_QUAL_VOLATILE;
7837 if (declspecs->specs[(int)ds_restrict])
7838 type_quals |= TYPE_QUAL_RESTRICT;
7839 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7840 error ("qualifiers are not allowed on declaration of %<operator %T%>",
7841 ctor_return_type);
7843 if (TREE_CODE (type) == FUNCTION_TYPE
7844 && type_quals != TYPE_UNQUALIFIED)
7846 /* This was an error in C++98 (cv-qualifiers cannot be added to
7847 a function type), but DR 295 makes the code well-formed by
7848 dropping the extra qualifiers. */
7849 if (pedantic)
7851 tree bad_type = build_qualified_type (type, type_quals);
7852 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7853 bad_type, type);
7855 type_quals = TYPE_UNQUALIFIED;
7857 type_quals |= cp_type_quals (type);
7858 type = cp_build_qualified_type_real
7859 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7860 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7861 /* We might have ignored or rejected some of the qualifiers. */
7862 type_quals = cp_type_quals (type);
7864 staticp = 0;
7865 inlinep = !! declspecs->specs[(int)ds_inline];
7866 virtualp = !! declspecs->specs[(int)ds_virtual];
7867 explicitp = !! declspecs->specs[(int)ds_explicit];
7869 storage_class = declspecs->storage_class;
7870 if (storage_class == sc_static)
7871 staticp = 1 + (decl_context == FIELD);
7873 if (virtualp && staticp == 2)
7875 error ("member %qD cannot be declared both virtual and static", dname);
7876 storage_class = sc_none;
7877 staticp = 0;
7879 friendp = !! declspecs->specs[(int)ds_friend];
7881 if (dependent_name && !friendp)
7883 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
7884 return error_mark_node;
7887 /* Issue errors about use of storage classes for parameters. */
7888 if (decl_context == PARM)
7890 if (declspecs->specs[(int)ds_typedef])
7892 error ("typedef declaration invalid in parameter declaration");
7893 return error_mark_node;
7895 else if (storage_class == sc_static
7896 || storage_class == sc_extern
7897 || thread_p)
7898 error ("storage class specifiers invalid in parameter declarations");
7901 /* Give error if `virtual' is used outside of class declaration. */
7902 if (virtualp
7903 && (current_class_name == NULL_TREE || decl_context != FIELD))
7905 error ("%<virtual%> outside class declaration");
7906 virtualp = 0;
7909 /* Static anonymous unions are dealt with here. */
7910 if (staticp && decl_context == TYPENAME
7911 && declspecs->type
7912 && ANON_AGGR_TYPE_P (declspecs->type))
7913 decl_context = FIELD;
7915 /* Warn about storage classes that are invalid for certain
7916 kinds of declarations (parameters, typenames, etc.). */
7917 if (thread_p
7918 && ((storage_class
7919 && storage_class != sc_extern
7920 && storage_class != sc_static)
7921 || declspecs->specs[(int)ds_typedef]))
7923 error ("multiple storage classes in declaration of %qs", name);
7924 thread_p = false;
7926 if (decl_context != NORMAL
7927 && ((storage_class != sc_none
7928 && storage_class != sc_mutable)
7929 || thread_p))
7931 if ((decl_context == PARM || decl_context == CATCHPARM)
7932 && (storage_class == sc_register
7933 || storage_class == sc_auto))
7935 else if (declspecs->specs[(int)ds_typedef])
7937 else if (decl_context == FIELD
7938 /* C++ allows static class elements. */
7939 && storage_class == sc_static)
7940 /* C++ also allows inlines and signed and unsigned elements,
7941 but in those cases we don't come in here. */
7943 else
7945 if (decl_context == FIELD)
7946 error ("storage class specified for %qs", name);
7947 else
7949 if (decl_context == PARM || decl_context == CATCHPARM)
7950 error ("storage class specified for parameter %qs", name);
7951 else
7952 error ("storage class specified for typename");
7954 if (storage_class == sc_register
7955 || storage_class == sc_auto
7956 || storage_class == sc_extern
7957 || thread_p)
7958 storage_class = sc_none;
7961 else if (storage_class == sc_extern && initialized
7962 && !funcdef_flag)
7964 if (toplevel_bindings_p ())
7966 /* It's common practice (and completely valid) to have a const
7967 be initialized and declared extern. */
7968 if (!(type_quals & TYPE_QUAL_CONST))
7969 warning (0, "%qs initialized and declared %<extern%>", name);
7971 else
7972 error ("%qs has both %<extern%> and initializer", name);
7974 else if (storage_class == sc_extern && funcdef_flag
7975 && ! toplevel_bindings_p ())
7976 error ("nested function %qs declared %<extern%>", name);
7977 else if (toplevel_bindings_p ())
7979 if (storage_class == sc_auto)
7980 error ("top-level declaration of %qs specifies %<auto%>", name);
7982 else if (thread_p
7983 && storage_class != sc_extern
7984 && storage_class != sc_static)
7986 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7987 name);
7988 thread_p = false;
7991 if (storage_class && friendp)
7992 error ("storage class specifiers invalid in friend function declarations");
7994 if (!id_declarator)
7995 unqualified_id = NULL_TREE;
7996 else
7998 unqualified_id = id_declarator->u.id.unqualified_name;
7999 switch (TREE_CODE (unqualified_id))
8001 case BIT_NOT_EXPR:
8002 unqualified_id
8003 = constructor_name (TREE_OPERAND (unqualified_id, 0));
8004 break;
8006 case IDENTIFIER_NODE:
8007 case TEMPLATE_ID_EXPR:
8008 break;
8010 default:
8011 gcc_unreachable ();
8015 /* Determine the type of the entity declared by recurring on the
8016 declarator. */
8017 for (; declarator; declarator = declarator->declarator)
8019 const cp_declarator *inner_declarator;
8020 tree attrs;
8022 if (type == error_mark_node)
8023 return error_mark_node;
8025 attrs = declarator->attributes;
8026 if (attrs)
8028 int attr_flags;
8030 attr_flags = 0;
8031 if (declarator == NULL || declarator->kind == cdk_id)
8032 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8033 if (declarator->kind == cdk_function)
8034 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8035 if (declarator->kind == cdk_array)
8036 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8037 returned_attrs = decl_attributes (&type,
8038 chainon (returned_attrs, attrs),
8039 attr_flags);
8042 if (declarator->kind == cdk_id)
8043 break;
8045 inner_declarator = declarator->declarator;
8047 switch (declarator->kind)
8049 case cdk_array:
8050 type = create_array_type_for_decl (dname, type,
8051 declarator->u.array.bounds);
8052 break;
8054 case cdk_function:
8056 tree arg_types;
8057 int funcdecl_p;
8059 /* Declaring a function type.
8060 Make sure we have a valid type for the function to return. */
8062 if (type_quals != TYPE_UNQUALIFIED)
8064 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8065 warning (OPT_Wignored_qualifiers,
8066 "type qualifiers ignored on function return type");
8067 /* We now know that the TYPE_QUALS don't apply to the
8068 decl, but to its return type. */
8069 type_quals = TYPE_UNQUALIFIED;
8070 set_no_warning = true;
8073 /* Warn about some types functions can't return. */
8075 if (TREE_CODE (type) == FUNCTION_TYPE)
8077 error ("%qs declared as function returning a function", name);
8078 type = integer_type_node;
8080 if (TREE_CODE (type) == ARRAY_TYPE)
8082 error ("%qs declared as function returning an array", name);
8083 type = integer_type_node;
8086 /* Pick up type qualifiers which should be applied to `this'. */
8087 memfn_quals = declarator->u.function.qualifiers;
8089 /* Pick up the exception specifications. */
8090 raises = declarator->u.function.exception_specification;
8092 /* Say it's a definition only for the CALL_EXPR
8093 closest to the identifier. */
8094 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8096 if (ctype == NULL_TREE
8097 && decl_context == FIELD
8098 && funcdecl_p
8099 && (friendp == 0 || dname == current_class_name))
8100 ctype = current_class_type;
8102 if (ctype && (sfk == sfk_constructor
8103 || sfk == sfk_destructor))
8105 /* We are within a class's scope. If our declarator name
8106 is the same as the class name, and we are defining
8107 a function, then it is a constructor/destructor, and
8108 therefore returns a void type. */
8110 /* ISO C++ 12.4/2. A destructor may not be declared
8111 const or volatile. A destructor may not be
8112 static.
8114 ISO C++ 12.1. A constructor may not be declared
8115 const or volatile. A constructor may not be
8116 virtual. A constructor may not be static. */
8117 if (staticp == 2)
8118 error ((flags == DTOR_FLAG)
8119 ? "destructor cannot be static member function"
8120 : "constructor cannot be static member function");
8121 if (memfn_quals)
8123 error ((flags == DTOR_FLAG)
8124 ? "destructors may not be cv-qualified"
8125 : "constructors may not be cv-qualified");
8126 memfn_quals = TYPE_UNQUALIFIED;
8129 if (decl_context == FIELD
8130 && !member_function_or_else (ctype,
8131 current_class_type,
8132 flags))
8133 return error_mark_node;
8135 if (flags != DTOR_FLAG)
8137 /* It's a constructor. */
8138 if (explicitp == 1)
8139 explicitp = 2;
8140 if (virtualp)
8142 pedwarn ("constructors cannot be declared virtual");
8143 virtualp = 0;
8145 if (decl_context == FIELD
8146 && sfk != sfk_constructor)
8147 return error_mark_node;
8149 if (decl_context == FIELD)
8150 staticp = 0;
8152 else if (friendp)
8154 if (initialized)
8155 error ("can't initialize friend function %qs", name);
8156 if (virtualp)
8158 /* Cannot be both friend and virtual. */
8159 error ("virtual functions cannot be friends");
8160 friendp = 0;
8162 if (decl_context == NORMAL)
8163 error ("friend declaration not in class definition");
8164 if (current_function_decl && funcdef_flag)
8165 error ("can't define friend function %qs in a local "
8166 "class definition",
8167 name);
8170 arg_types = grokparms (declarator->u.function.parameters,
8171 &parms);
8173 if (inner_declarator
8174 && inner_declarator->kind == cdk_id
8175 && inner_declarator->u.id.sfk == sfk_destructor
8176 && arg_types != void_list_node)
8178 error ("destructors may not have parameters");
8179 arg_types = void_list_node;
8180 parms = NULL_TREE;
8183 type = build_function_type (type, arg_types);
8185 break;
8187 case cdk_pointer:
8188 case cdk_reference:
8189 case cdk_ptrmem:
8190 /* Filter out pointers-to-references and references-to-references.
8191 We can get these if a TYPE_DECL is used. */
8193 if (TREE_CODE (type) == REFERENCE_TYPE)
8195 if (declarator->kind != cdk_reference)
8197 error ("cannot declare pointer to %q#T", type);
8198 type = TREE_TYPE (type);
8201 /* In C++0x, we allow reference to reference declarations
8202 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8203 and template type arguments [14.3.1/4 temp.arg.type]. The
8204 check for direct reference to reference declarations, which
8205 are still forbidden, occurs below. Reasoning behind the change
8206 can be found in DR106, DR540, and the rvalue reference
8207 proposals. */
8208 else if (cxx_dialect == cxx98)
8210 error ("cannot declare reference to %q#T", type);
8211 type = TREE_TYPE (type);
8214 else if (VOID_TYPE_P (type))
8216 if (declarator->kind == cdk_reference)
8217 error ("cannot declare reference to %q#T", type);
8218 else if (declarator->kind == cdk_ptrmem)
8219 error ("cannot declare pointer to %q#T member", type);
8222 /* We now know that the TYPE_QUALS don't apply to the decl,
8223 but to the target of the pointer. */
8224 type_quals = TYPE_UNQUALIFIED;
8226 if (declarator->kind == cdk_ptrmem
8227 && (TREE_CODE (type) == FUNCTION_TYPE
8228 || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8230 memfn_quals |= cp_type_quals (type);
8231 type = build_memfn_type (type,
8232 declarator->u.pointer.class_type,
8233 memfn_quals);
8234 memfn_quals = TYPE_UNQUALIFIED;
8237 if (declarator->kind == cdk_reference)
8239 /* In C++0x, the type we are creating a reference to might be
8240 a typedef which is itself a reference type. In that case,
8241 we follow the reference collapsing rules in
8242 [7.1.3/8 dcl.typedef] to create the final reference type:
8244 "If a typedef TD names a type that is a reference to a type
8245 T, an attempt to create the type 'lvalue reference to cv TD'
8246 creates the type 'lvalue reference to T,' while an attempt
8247 to create the type "rvalue reference to cv TD' creates the
8248 type TD."
8250 if (!VOID_TYPE_P (type))
8251 type = cp_build_reference_type
8252 ((TREE_CODE (type) == REFERENCE_TYPE
8253 ? TREE_TYPE (type) : type),
8254 (declarator->u.reference.rvalue_ref
8255 && (TREE_CODE(type) != REFERENCE_TYPE
8256 || TYPE_REF_IS_RVALUE (type))));
8258 /* In C++0x, we need this check for direct reference to
8259 reference declarations, which are forbidden by
8260 [8.3.2/5 dcl.ref]. Reference to reference declarations
8261 are only allowed indirectly through typedefs and template
8262 type arguments. Example:
8264 void foo(int & &); // invalid ref-to-ref decl
8266 typedef int & int_ref;
8267 void foo(int_ref &); // valid ref-to-ref decl
8269 if (inner_declarator && inner_declarator->kind == cdk_reference)
8270 error ("cannot declare reference to %q#T, which is not "
8271 "a typedef or a template type argument", type);
8273 else if (TREE_CODE (type) == METHOD_TYPE)
8274 type = build_ptrmemfunc_type (build_pointer_type (type));
8275 else if (declarator->kind == cdk_ptrmem)
8277 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8278 != NAMESPACE_DECL);
8279 if (declarator->u.pointer.class_type == error_mark_node)
8280 /* We will already have complained. */
8281 type = error_mark_node;
8282 else
8283 type = build_ptrmem_type (declarator->u.pointer.class_type,
8284 type);
8286 else
8287 type = build_pointer_type (type);
8289 /* Process a list of type modifier keywords (such as
8290 const or volatile) that were given inside the `*' or `&'. */
8292 if (declarator->u.pointer.qualifiers)
8294 type
8295 = cp_build_qualified_type (type,
8296 declarator->u.pointer.qualifiers);
8297 type_quals = cp_type_quals (type);
8299 ctype = NULL_TREE;
8300 break;
8302 case cdk_error:
8303 break;
8305 default:
8306 gcc_unreachable ();
8310 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8311 && TREE_CODE (type) != FUNCTION_TYPE
8312 && TREE_CODE (type) != METHOD_TYPE)
8314 error ("template-id %qD used as a declarator",
8315 unqualified_id);
8316 unqualified_id = dname;
8319 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8320 qualified with a class-name, turn it into a METHOD_TYPE, unless
8321 we know that the function is static. We take advantage of this
8322 opportunity to do other processing that pertains to entities
8323 explicitly declared to be class members. Note that if DECLARATOR
8324 is non-NULL, we know it is a cdk_id declarator; otherwise, we
8325 would not have exited the loop above. */
8326 if (declarator
8327 && declarator->u.id.qualifying_scope
8328 && TYPE_P (declarator->u.id.qualifying_scope))
8330 tree t;
8332 ctype = declarator->u.id.qualifying_scope;
8333 ctype = TYPE_MAIN_VARIANT (ctype);
8334 t = ctype;
8335 while (t != NULL_TREE && CLASS_TYPE_P (t))
8337 /* You're supposed to have one `template <...>' for every
8338 template class, but you don't need one for a full
8339 specialization. For example:
8341 template <class T> struct S{};
8342 template <> struct S<int> { void f(); };
8343 void S<int>::f () {}
8345 is correct; there shouldn't be a `template <>' for the
8346 definition of `S<int>::f'. */
8347 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8348 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8349 /* T is an explicit (not partial) specialization. All
8350 containing classes must therefore also be explicitly
8351 specialized. */
8352 break;
8353 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8354 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8355 template_count += 1;
8357 t = TYPE_MAIN_DECL (t);
8358 t = DECL_CONTEXT (t);
8361 if (ctype == current_class_type)
8363 if (friendp)
8365 pedwarn ("member functions are implicitly friends of their class");
8366 friendp = 0;
8368 else
8369 pedwarn ("extra qualification %<%T::%> on member %qs",
8370 ctype, name);
8372 else if (/* If the qualifying type is already complete, then we
8373 can skip the following checks. */
8374 !COMPLETE_TYPE_P (ctype)
8375 && (/* If the function is being defined, then
8376 qualifying type must certainly be complete. */
8377 funcdef_flag
8378 /* A friend declaration of "T::f" is OK, even if
8379 "T" is a template parameter. But, if this
8380 function is not a friend, the qualifying type
8381 must be a class. */
8382 || (!friendp && !CLASS_TYPE_P (ctype))
8383 /* For a declaration, the type need not be
8384 complete, if either it is dependent (since there
8385 is no meaningful definition of complete in that
8386 case) or the qualifying class is currently being
8387 defined. */
8388 || !(dependent_type_p (ctype)
8389 || currently_open_class (ctype)))
8390 /* Check that the qualifying type is complete. */
8391 && !complete_type_or_else (ctype, NULL_TREE))
8392 return error_mark_node;
8393 else if (TREE_CODE (type) == FUNCTION_TYPE)
8395 tree sname = declarator->u.id.unqualified_name;
8397 if (current_class_type
8398 && (!friendp || funcdef_flag))
8400 error (funcdef_flag
8401 ? "cannot define member function %<%T::%s%> within %<%T%>"
8402 : "cannot declare member function %<%T::%s%> within %<%T%>",
8403 ctype, name, current_class_type);
8404 return error_mark_node;
8407 if (TREE_CODE (sname) == IDENTIFIER_NODE
8408 && NEW_DELETE_OPNAME_P (sname))
8409 /* Overloaded operator new and operator delete
8410 are always static functions. */
8412 else
8413 type = build_memfn_type (type, ctype, memfn_quals);
8415 else if (declspecs->specs[(int)ds_typedef]
8416 && current_class_type)
8418 error ("cannot declare member %<%T::%s%> within %qT",
8419 ctype, name, current_class_type);
8420 return error_mark_node;
8424 /* Now TYPE has the actual type. */
8426 if (returned_attrs)
8428 if (attrlist)
8429 *attrlist = chainon (returned_attrs, *attrlist);
8430 else
8431 attrlist = &returned_attrs;
8434 /* Handle parameter packs. */
8435 if (parameter_pack_p)
8437 if (decl_context == PARM)
8438 /* Turn the type into a pack expansion.*/
8439 type = make_pack_expansion (type);
8440 else
8441 error ("non-parameter %qs cannot be a parameter pack", name);
8444 /* Did array size calculations overflow? */
8446 if (TREE_CODE (type) == ARRAY_TYPE
8447 && COMPLETE_TYPE_P (type)
8448 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8449 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8451 error ("size of array %qs is too large", name);
8452 /* If we proceed with the array type as it is, we'll eventually
8453 crash in tree_low_cst(). */
8454 type = error_mark_node;
8457 if ((decl_context == FIELD || decl_context == PARM)
8458 && !processing_template_decl
8459 && variably_modified_type_p (type, NULL_TREE))
8461 if (decl_context == FIELD)
8462 error ("data member may not have variably modified type %qT", type);
8463 else
8464 error ("parameter may not have variably modified type %qT", type);
8465 type = error_mark_node;
8468 if (explicitp == 1 || (explicitp && friendp))
8470 /* [dcl.fct.spec] The explicit specifier shall only be used in
8471 declarations of constructors within a class definition. */
8472 error ("only declarations of constructors can be %<explicit%>");
8473 explicitp = 0;
8476 if (storage_class == sc_mutable)
8478 if (decl_context != FIELD || friendp)
8480 error ("non-member %qs cannot be declared %<mutable%>", name);
8481 storage_class = sc_none;
8483 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8485 error ("non-object member %qs cannot be declared %<mutable%>", name);
8486 storage_class = sc_none;
8488 else if (TREE_CODE (type) == FUNCTION_TYPE
8489 || TREE_CODE (type) == METHOD_TYPE)
8491 error ("function %qs cannot be declared %<mutable%>", name);
8492 storage_class = sc_none;
8494 else if (staticp)
8496 error ("static %qs cannot be declared %<mutable%>", name);
8497 storage_class = sc_none;
8499 else if (type_quals & TYPE_QUAL_CONST)
8501 error ("const %qs cannot be declared %<mutable%>", name);
8502 storage_class = sc_none;
8506 /* If this is declaring a typedef name, return a TYPE_DECL. */
8507 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8509 tree decl;
8511 /* Note that the grammar rejects storage classes
8512 in typenames, fields or parameters. */
8513 if (current_lang_name == lang_name_java)
8514 TYPE_FOR_JAVA (type) = 1;
8516 /* This declaration:
8518 typedef void f(int) const;
8520 declares a function type which is not a member of any
8521 particular class, but which is cv-qualified; for
8522 example "f S::*" declares a pointer to a const-qualified
8523 member function of S. We record the cv-qualification in the
8524 function type. */
8525 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8527 type = cp_build_qualified_type (type, memfn_quals);
8529 /* We have now dealt with these qualifiers. */
8530 memfn_quals = TYPE_UNQUALIFIED;
8533 if (decl_context == FIELD)
8534 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8535 else
8536 decl = build_decl (TYPE_DECL, unqualified_id, type);
8537 if (id_declarator && declarator->u.id.qualifying_scope)
8538 error ("%Jtypedef name may not be a nested-name-specifier", decl);
8540 if (decl_context != FIELD)
8542 if (!current_function_decl)
8543 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8544 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8545 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8546 (current_function_decl)))
8547 /* The TYPE_DECL is "abstract" because there will be
8548 clones of this constructor/destructor, and there will
8549 be copies of this TYPE_DECL generated in those
8550 clones. */
8551 DECL_ABSTRACT (decl) = 1;
8553 else if (constructor_name_p (unqualified_id, current_class_type))
8554 pedwarn ("ISO C++ forbids nested type %qD with same name "
8555 "as enclosing class",
8556 unqualified_id);
8558 /* If the user declares "typedef struct {...} foo" then the
8559 struct will have an anonymous name. Fill that name in now.
8560 Nothing can refer to it, so nothing needs know about the name
8561 change. */
8562 if (type != error_mark_node
8563 && unqualified_id
8564 && TYPE_NAME (type)
8565 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8566 && TYPE_ANONYMOUS_P (type)
8567 && cp_type_quals (type) == TYPE_UNQUALIFIED)
8569 tree oldname = TYPE_NAME (type);
8570 tree t;
8572 /* Replace the anonymous name with the real name everywhere. */
8573 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8574 if (TYPE_NAME (t) == oldname)
8575 TYPE_NAME (t) = decl;
8577 if (TYPE_LANG_SPECIFIC (type))
8578 TYPE_WAS_ANONYMOUS (type) = 1;
8580 /* If this is a typedef within a template class, the nested
8581 type is a (non-primary) template. The name for the
8582 template needs updating as well. */
8583 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8584 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8585 = TYPE_IDENTIFIER (type);
8587 /* FIXME remangle member functions; member functions of a
8588 type with external linkage have external linkage. */
8591 if (signed_p
8592 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8593 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8595 bad_specifiers (decl, "type", virtualp,
8596 memfn_quals != TYPE_UNQUALIFIED,
8597 inlinep, friendp, raises != NULL_TREE);
8599 return decl;
8602 /* Detect the case of an array type of unspecified size
8603 which came, as such, direct from a typedef name.
8604 We must copy the type, so that the array's domain can be
8605 individually set by the object's initializer. */
8607 if (type && typedef_type
8608 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8609 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8610 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8612 /* Detect where we're using a typedef of function type to declare a
8613 function. PARMS will not be set, so we must create it now. */
8615 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8617 tree decls = NULL_TREE;
8618 tree args;
8620 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8622 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8624 TREE_CHAIN (decl) = decls;
8625 decls = decl;
8628 parms = nreverse (decls);
8630 if (decl_context != TYPENAME)
8632 /* A cv-qualifier-seq shall only be part of the function type
8633 for a non-static member function. [8.3.5/4 dcl.fct] */
8634 if (cp_type_quals (type) != TYPE_UNQUALIFIED
8635 && (current_class_type == NULL_TREE || staticp) )
8637 error (staticp
8638 ? G_("qualified function types cannot be used to "
8639 "declare static member functions")
8640 : G_("qualified function types cannot be used to "
8641 "declare free functions"));
8642 type = TYPE_MAIN_VARIANT (type);
8645 /* The qualifiers on the function type become the qualifiers on
8646 the non-static member function. */
8647 memfn_quals |= cp_type_quals (type);
8651 /* If this is a type name (such as, in a cast or sizeof),
8652 compute the type and return it now. */
8654 if (decl_context == TYPENAME)
8656 /* Note that the grammar rejects storage classes
8657 in typenames, fields or parameters. */
8658 if (type_quals != TYPE_UNQUALIFIED)
8659 type_quals = TYPE_UNQUALIFIED;
8661 /* Special case: "friend class foo" looks like a TYPENAME context. */
8662 if (friendp)
8664 if (type_quals != TYPE_UNQUALIFIED)
8666 error ("type qualifiers specified for friend class declaration");
8667 type_quals = TYPE_UNQUALIFIED;
8669 if (inlinep)
8671 error ("%<inline%> specified for friend class declaration");
8672 inlinep = 0;
8675 if (!current_aggr)
8677 /* Don't allow friend declaration without a class-key. */
8678 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8679 pedwarn ("template parameters cannot be friends");
8680 else if (TREE_CODE (type) == TYPENAME_TYPE)
8681 pedwarn ("friend declaration requires class-key, "
8682 "i.e. %<friend class %T::%D%>",
8683 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8684 else
8685 pedwarn ("friend declaration requires class-key, "
8686 "i.e. %<friend %#T%>",
8687 type);
8690 /* Only try to do this stuff if we didn't already give up. */
8691 if (type != integer_type_node)
8693 /* A friendly class? */
8694 if (current_class_type)
8695 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8696 /*complain=*/true);
8697 else
8698 error ("trying to make class %qT a friend of global scope",
8699 type);
8701 type = void_type_node;
8704 else if (memfn_quals)
8706 if (ctype == NULL_TREE)
8708 if (TREE_CODE (type) != METHOD_TYPE)
8709 error ("invalid qualifiers on non-member function type");
8710 else
8711 ctype = TYPE_METHOD_BASETYPE (type);
8713 if (ctype)
8714 type = build_memfn_type (type, ctype, memfn_quals);
8717 return type;
8719 else if (unqualified_id == NULL_TREE && decl_context != PARM
8720 && decl_context != CATCHPARM
8721 && TREE_CODE (type) != UNION_TYPE
8722 && ! bitfield)
8724 error ("abstract declarator %qT used as declaration", type);
8725 return error_mark_node;
8728 /* Only functions may be declared using an operator-function-id. */
8729 if (unqualified_id
8730 && IDENTIFIER_OPNAME_P (unqualified_id)
8731 && TREE_CODE (type) != FUNCTION_TYPE
8732 && TREE_CODE (type) != METHOD_TYPE)
8734 error ("declaration of %qD as non-function", unqualified_id);
8735 return error_mark_node;
8738 /* We don't check parameter types here because we can emit a better
8739 error message later. */
8740 if (decl_context != PARM)
8742 type = check_var_type (unqualified_id, type);
8743 if (type == error_mark_node)
8744 return error_mark_node;
8747 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8748 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8750 if (decl_context == PARM || decl_context == CATCHPARM)
8752 if (ctype || in_namespace)
8753 error ("cannot use %<::%> in parameter declaration");
8755 /* A parameter declared as an array of T is really a pointer to T.
8756 One declared as a function is really a pointer to a function.
8757 One declared as a member is really a pointer to member. */
8759 if (TREE_CODE (type) == ARRAY_TYPE)
8761 /* Transfer const-ness of array into that of type pointed to. */
8762 type = build_pointer_type (TREE_TYPE (type));
8763 type_quals = TYPE_UNQUALIFIED;
8765 else if (TREE_CODE (type) == FUNCTION_TYPE)
8766 type = build_pointer_type (type);
8770 tree decl;
8772 if (decl_context == PARM)
8774 decl = cp_build_parm_decl (unqualified_id, type);
8776 bad_specifiers (decl, "parameter", virtualp,
8777 memfn_quals != TYPE_UNQUALIFIED,
8778 inlinep, friendp, raises != NULL_TREE);
8780 else if (decl_context == FIELD)
8782 /* The C99 flexible array extension. */
8783 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8784 && TYPE_DOMAIN (type) == NULL_TREE)
8786 tree itype = compute_array_index_type (dname, integer_zero_node);
8787 type = build_cplus_array_type (TREE_TYPE (type), itype);
8790 if (type == error_mark_node)
8792 /* Happens when declaring arrays of sizes which
8793 are error_mark_node, for example. */
8794 decl = NULL_TREE;
8796 else if (in_namespace && !friendp)
8798 /* Something like struct S { int N::j; }; */
8799 error ("invalid use of %<::%>");
8800 return error_mark_node;
8802 else if (TREE_CODE (type) == FUNCTION_TYPE)
8804 int publicp = 0;
8805 tree function_context;
8807 if (friendp == 0)
8809 if (ctype == NULL_TREE)
8810 ctype = current_class_type;
8812 if (ctype == NULL_TREE)
8814 error ("can't make %qD into a method -- not in a class",
8815 unqualified_id);
8816 return error_mark_node;
8819 /* ``A union may [ ... ] not [ have ] virtual functions.''
8820 ARM 9.5 */
8821 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8823 error ("function %qD declared virtual inside a union",
8824 unqualified_id);
8825 return error_mark_node;
8828 if (NEW_DELETE_OPNAME_P (unqualified_id))
8830 if (virtualp)
8832 error ("%qD cannot be declared virtual, since it "
8833 "is always static",
8834 unqualified_id);
8835 virtualp = 0;
8838 else if (staticp < 2)
8839 type = build_memfn_type (type, ctype, memfn_quals);
8842 /* Check that the name used for a destructor makes sense. */
8843 if (sfk == sfk_destructor)
8845 if (!ctype)
8847 gcc_assert (friendp);
8848 error ("expected qualified name in friend declaration "
8849 "for destructor %qD",
8850 id_declarator->u.id.unqualified_name);
8851 return error_mark_node;
8854 if (!same_type_p (TREE_OPERAND
8855 (id_declarator->u.id.unqualified_name, 0),
8856 ctype))
8858 error ("declaration of %qD as member of %qT",
8859 id_declarator->u.id.unqualified_name, ctype);
8860 return error_mark_node;
8863 else if (sfk == sfk_constructor && friendp)
8865 error ("expected qualified name in friend declaration "
8866 "for constructor %qD",
8867 id_declarator->u.id.unqualified_name);
8868 return error_mark_node;
8871 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8872 function_context = (ctype != NULL_TREE) ?
8873 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8874 publicp = (! friendp || ! staticp)
8875 && function_context == NULL_TREE;
8876 decl = grokfndecl (ctype, type,
8877 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8878 ? unqualified_id : dname,
8879 parms,
8880 unqualified_id,
8881 virtualp, flags, memfn_quals, raises,
8882 friendp ? -1 : 0, friendp, publicp, inlinep,
8883 sfk,
8884 funcdef_flag, template_count, in_namespace, attrlist);
8885 if (decl == NULL_TREE)
8886 return error_mark_node;
8887 #if 0
8888 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8889 /* The decl and setting of decl_attr is also turned off. */
8890 decl = build_decl_attribute_variant (decl, decl_attr);
8891 #endif
8893 /* [class.conv.ctor]
8895 A constructor declared without the function-specifier
8896 explicit that can be called with a single parameter
8897 specifies a conversion from the type of its first
8898 parameter to the type of its class. Such a constructor
8899 is called a converting constructor. */
8900 if (explicitp == 2)
8901 DECL_NONCONVERTING_P (decl) = 1;
8902 else if (DECL_CONSTRUCTOR_P (decl))
8904 /* The constructor can be called with exactly one
8905 parameter if there is at least one parameter, and
8906 any subsequent parameters have default arguments.
8907 Ignore any compiler-added parms. */
8908 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8910 if (arg_types == void_list_node
8911 || (arg_types
8912 && TREE_CHAIN (arg_types)
8913 && TREE_CHAIN (arg_types) != void_list_node
8914 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8915 DECL_NONCONVERTING_P (decl) = 1;
8918 else if (TREE_CODE (type) == METHOD_TYPE)
8920 /* We only get here for friend declarations of
8921 members of other classes. */
8922 /* All method decls are public, so tell grokfndecl to set
8923 TREE_PUBLIC, also. */
8924 decl = grokfndecl (ctype, type,
8925 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8926 ? unqualified_id : dname,
8927 parms,
8928 unqualified_id,
8929 virtualp, flags, memfn_quals, raises,
8930 friendp ? -1 : 0, friendp, 1, 0, sfk,
8931 funcdef_flag, template_count, in_namespace,
8932 attrlist);
8933 if (decl == NULL_TREE)
8934 return error_mark_node;
8936 else if (!staticp && !dependent_type_p (type)
8937 && !COMPLETE_TYPE_P (complete_type (type))
8938 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8940 if (unqualified_id)
8941 error ("field %qD has incomplete type", unqualified_id);
8942 else
8943 error ("name %qT has incomplete type", type);
8945 /* If we're instantiating a template, tell them which
8946 instantiation made the field's type be incomplete. */
8947 if (current_class_type
8948 && TYPE_NAME (current_class_type)
8949 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8950 && declspecs->type
8951 && declspecs->type == type)
8952 error (" in instantiation of template %qT",
8953 current_class_type);
8955 return error_mark_node;
8957 else
8959 if (friendp)
8961 error ("%qE is neither function nor member function; "
8962 "cannot be declared friend", unqualified_id);
8963 friendp = 0;
8965 decl = NULL_TREE;
8968 if (friendp)
8970 /* Friends are treated specially. */
8971 if (ctype == current_class_type)
8972 ; /* We already issued a pedwarn. */
8973 else if (decl && DECL_NAME (decl))
8975 if (template_class_depth (current_class_type) == 0)
8977 decl = check_explicit_specialization
8978 (unqualified_id, decl, template_count,
8979 2 * funcdef_flag + 4);
8980 if (decl == error_mark_node)
8981 return error_mark_node;
8984 decl = do_friend (ctype, unqualified_id, decl,
8985 *attrlist, flags,
8986 funcdef_flag);
8987 return decl;
8989 else
8990 return error_mark_node;
8993 /* Structure field. It may not be a function, except for C++. */
8995 if (decl == NULL_TREE)
8997 if (initialized)
8999 if (!staticp)
9001 /* An attempt is being made to initialize a non-static
9002 member. But, from [class.mem]:
9004 4 A member-declarator can contain a
9005 constant-initializer only if it declares a static
9006 member (_class.static_) of integral or enumeration
9007 type, see _class.static.data_.
9009 This used to be relatively common practice, but
9010 the rest of the compiler does not correctly
9011 handle the initialization unless the member is
9012 static so we make it static below. */
9013 pedwarn ("ISO C++ forbids initialization of member %qD",
9014 unqualified_id);
9015 pedwarn ("making %qD static", unqualified_id);
9016 staticp = 1;
9019 if (uses_template_parms (type))
9020 /* We'll check at instantiation time. */
9022 else if (check_static_variable_definition (unqualified_id,
9023 type))
9024 /* If we just return the declaration, crashes
9025 will sometimes occur. We therefore return
9026 void_type_node, as if this was a friend
9027 declaration, to cause callers to completely
9028 ignore this declaration. */
9029 return error_mark_node;
9032 if (staticp)
9034 /* C++ allows static class members. All other work
9035 for this is done by grokfield. */
9036 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9037 set_linkage_for_static_data_member (decl);
9038 /* Even if there is an in-class initialization, DECL
9039 is considered undefined until an out-of-class
9040 definition is provided. */
9041 DECL_EXTERNAL (decl) = 1;
9043 if (thread_p)
9044 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9046 else
9048 decl = build_decl (FIELD_DECL, unqualified_id, type);
9049 DECL_NONADDRESSABLE_P (decl) = bitfield;
9050 if (bitfield && !unqualified_id)
9051 TREE_NO_WARNING (decl) = 1;
9053 if (storage_class == sc_mutable)
9055 DECL_MUTABLE_P (decl) = 1;
9056 storage_class = sc_none;
9060 bad_specifiers (decl, "field", virtualp,
9061 memfn_quals != TYPE_UNQUALIFIED,
9062 inlinep, friendp, raises != NULL_TREE);
9065 else if (TREE_CODE (type) == FUNCTION_TYPE
9066 || TREE_CODE (type) == METHOD_TYPE)
9068 tree original_name;
9069 int publicp = 0;
9071 if (!unqualified_id)
9072 return error_mark_node;
9074 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9075 original_name = dname;
9076 else
9077 original_name = unqualified_id;
9079 if (storage_class == sc_auto)
9080 error ("storage class %<auto%> invalid for function %qs", name);
9081 else if (storage_class == sc_register)
9082 error ("storage class %<register%> invalid for function %qs", name);
9083 else if (thread_p)
9084 error ("storage class %<__thread%> invalid for function %qs", name);
9086 /* Function declaration not at top level.
9087 Storage classes other than `extern' are not allowed
9088 and `extern' makes no difference. */
9089 if (! toplevel_bindings_p ()
9090 && (storage_class == sc_static
9091 || declspecs->specs[(int)ds_inline])
9092 && pedantic)
9094 if (storage_class == sc_static)
9095 pedwarn ("%<static%> specified invalid for function %qs "
9096 "declared out of global scope", name);
9097 else
9098 pedwarn ("%<inline%> specifier invalid for function %qs "
9099 "declared out of global scope", name);
9102 if (ctype == NULL_TREE)
9104 if (virtualp)
9106 error ("virtual non-class function %qs", name);
9107 virtualp = 0;
9110 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9111 && !NEW_DELETE_OPNAME_P (original_name))
9112 type = build_method_type_directly (ctype,
9113 TREE_TYPE (type),
9114 TYPE_ARG_TYPES (type));
9116 /* Record presence of `static'. */
9117 publicp = (ctype != NULL_TREE
9118 || storage_class == sc_extern
9119 || storage_class != sc_static);
9121 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9122 virtualp, flags, memfn_quals, raises,
9123 1, friendp,
9124 publicp, inlinep, sfk, funcdef_flag,
9125 template_count, in_namespace, attrlist);
9126 if (decl == NULL_TREE)
9127 return error_mark_node;
9129 if (staticp == 1)
9131 int invalid_static = 0;
9133 /* Don't allow a static member function in a class, and forbid
9134 declaring main to be static. */
9135 if (TREE_CODE (type) == METHOD_TYPE)
9137 pedwarn ("cannot declare member function %qD to have "
9138 "static linkage", decl);
9139 invalid_static = 1;
9141 else if (current_function_decl)
9143 /* FIXME need arm citation */
9144 error ("cannot declare static function inside another function");
9145 invalid_static = 1;
9148 if (invalid_static)
9150 staticp = 0;
9151 storage_class = sc_none;
9155 else
9157 /* It's a variable. */
9159 /* An uninitialized decl with `extern' is a reference. */
9160 decl = grokvardecl (type, unqualified_id,
9161 declspecs,
9162 initialized,
9163 (type_quals & TYPE_QUAL_CONST) != 0,
9164 ctype ? ctype : in_namespace);
9165 bad_specifiers (decl, "variable", virtualp,
9166 memfn_quals != TYPE_UNQUALIFIED,
9167 inlinep, friendp, raises != NULL_TREE);
9169 if (ctype)
9171 DECL_CONTEXT (decl) = ctype;
9172 if (staticp == 1)
9174 pedwarn ("%<static%> may not be used when defining "
9175 "(as opposed to declaring) a static data member");
9176 staticp = 0;
9177 storage_class = sc_none;
9179 if (storage_class == sc_register && TREE_STATIC (decl))
9181 error ("static member %qD declared %<register%>", decl);
9182 storage_class = sc_none;
9184 if (storage_class == sc_extern && pedantic)
9186 pedwarn ("cannot explicitly declare member %q#D to have "
9187 "extern linkage",
9188 decl);
9189 storage_class = sc_none;
9194 /* Record `register' declaration for warnings on &
9195 and in case doing stupid register allocation. */
9197 if (storage_class == sc_register)
9198 DECL_REGISTER (decl) = 1;
9199 else if (storage_class == sc_extern)
9200 DECL_THIS_EXTERN (decl) = 1;
9201 else if (storage_class == sc_static)
9202 DECL_THIS_STATIC (decl) = 1;
9204 /* Record constancy and volatility on the DECL itself . There's
9205 no need to do this when processing a template; we'll do this
9206 for the instantiated declaration based on the type of DECL. */
9207 if (!processing_template_decl)
9208 cp_apply_type_quals_to_decl (type_quals, decl);
9210 if (set_no_warning)
9211 TREE_NO_WARNING (decl) = 1;
9213 return decl;
9217 /* Subroutine of start_function. Ensure that each of the parameter
9218 types (as listed in PARMS) is complete, as is required for a
9219 function definition. */
9221 static void
9222 require_complete_types_for_parms (tree parms)
9224 for (; parms; parms = TREE_CHAIN (parms))
9226 if (dependent_type_p (TREE_TYPE (parms)))
9227 continue;
9228 if (!VOID_TYPE_P (TREE_TYPE (parms))
9229 && complete_type_or_else (TREE_TYPE (parms), parms))
9231 relayout_decl (parms);
9232 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9234 else
9235 /* grokparms or complete_type_or_else will have already issued
9236 an error. */
9237 TREE_TYPE (parms) = error_mark_node;
9241 /* Returns nonzero if T is a local variable. */
9244 local_variable_p (const_tree t)
9246 if ((TREE_CODE (t) == VAR_DECL
9247 /* A VAR_DECL with a context that is a _TYPE is a static data
9248 member. */
9249 && !TYPE_P (CP_DECL_CONTEXT (t))
9250 /* Any other non-local variable must be at namespace scope. */
9251 && !DECL_NAMESPACE_SCOPE_P (t))
9252 || (TREE_CODE (t) == PARM_DECL))
9253 return 1;
9255 return 0;
9258 /* Like local_variable_p, but suitable for use as a tree-walking
9259 function. */
9261 static tree
9262 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9263 void *data ATTRIBUTE_UNUSED)
9265 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9266 return *tp;
9267 else if (TYPE_P (*tp))
9268 *walk_subtrees = 0;
9270 return NULL_TREE;
9274 /* Check that ARG, which is a default-argument expression for a
9275 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
9276 something goes wrong. DECL may also be a _TYPE node, rather than a
9277 DECL, if there is no DECL available. */
9279 tree
9280 check_default_argument (tree decl, tree arg)
9282 tree var;
9283 tree decl_type;
9285 if (TREE_CODE (arg) == DEFAULT_ARG)
9286 /* We get a DEFAULT_ARG when looking at an in-class declaration
9287 with a default argument. Ignore the argument for now; we'll
9288 deal with it after the class is complete. */
9289 return arg;
9291 if (TYPE_P (decl))
9293 decl_type = decl;
9294 decl = NULL_TREE;
9296 else
9297 decl_type = TREE_TYPE (decl);
9299 if (arg == error_mark_node
9300 || decl == error_mark_node
9301 || TREE_TYPE (arg) == error_mark_node
9302 || decl_type == error_mark_node)
9303 /* Something already went wrong. There's no need to check
9304 further. */
9305 return error_mark_node;
9307 /* [dcl.fct.default]
9309 A default argument expression is implicitly converted to the
9310 parameter type. */
9311 if (!TREE_TYPE (arg)
9312 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9314 if (decl)
9315 error ("default argument for %q#D has type %qT",
9316 decl, TREE_TYPE (arg));
9317 else
9318 error ("default argument for parameter of type %qT has type %qT",
9319 decl_type, TREE_TYPE (arg));
9321 return error_mark_node;
9324 /* [dcl.fct.default]
9326 Local variables shall not be used in default argument
9327 expressions.
9329 The keyword `this' shall not be used in a default argument of a
9330 member function. */
9331 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9332 if (var)
9334 error ("default argument %qE uses local variable %qD", arg, var);
9335 return error_mark_node;
9338 /* All is well. */
9339 return arg;
9342 /* Decode the list of parameter types for a function type.
9343 Given the list of things declared inside the parens,
9344 return a list of types.
9346 If this parameter does not end with an ellipsis, we append
9347 void_list_node.
9349 *PARMS is set to the chain of PARM_DECLs created. */
9351 static tree
9352 grokparms (cp_parameter_declarator *first_parm, tree *parms)
9354 tree result = NULL_TREE;
9355 tree decls = NULL_TREE;
9356 int ellipsis = !first_parm || first_parm->ellipsis_p;
9357 cp_parameter_declarator *parm;
9358 int any_error = 0;
9359 struct pointer_set_t *unique_decls = pointer_set_create ();
9361 for (parm = first_parm; parm != NULL; parm = parm->next)
9363 tree type = NULL_TREE;
9364 tree init = parm->default_argument;
9365 tree attrs;
9366 tree decl;
9368 if (parm == no_parameters)
9369 break;
9371 attrs = parm->decl_specifiers.attributes;
9372 parm->decl_specifiers.attributes = NULL_TREE;
9373 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
9374 PARM, init != NULL_TREE, &attrs);
9375 if (! decl || TREE_TYPE (decl) == error_mark_node)
9376 continue;
9378 if (attrs)
9379 cplus_decl_attributes (&decl, attrs, 0);
9381 type = TREE_TYPE (decl);
9382 if (VOID_TYPE_P (type))
9384 if (same_type_p (type, void_type_node)
9385 && DECL_SELF_REFERENCE_P (type)
9386 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
9387 /* this is a parmlist of `(void)', which is ok. */
9388 break;
9389 cxx_incomplete_type_error (decl, type);
9390 /* It's not a good idea to actually create parameters of
9391 type `void'; other parts of the compiler assume that a
9392 void type terminates the parameter list. */
9393 type = error_mark_node;
9394 TREE_TYPE (decl) = error_mark_node;
9397 if (type != error_mark_node
9398 && TYPE_FOR_JAVA (type)
9399 && MAYBE_CLASS_TYPE_P (type))
9401 error ("parameter %qD has Java class type", decl);
9402 type = error_mark_node;
9403 TREE_TYPE (decl) = error_mark_node;
9404 init = NULL_TREE;
9407 if (type != error_mark_node)
9409 /* Top-level qualifiers on the parameters are
9410 ignored for function types. */
9411 type = cp_build_qualified_type (type, 0);
9412 if (TREE_CODE (type) == METHOD_TYPE)
9414 error ("parameter %qD invalidly declared method type", decl);
9415 type = build_pointer_type (type);
9416 TREE_TYPE (decl) = type;
9418 else if (abstract_virtuals_error (decl, type))
9419 any_error = 1; /* Seems like a good idea. */
9420 else if (POINTER_TYPE_P (type))
9422 /* [dcl.fct]/6, parameter types cannot contain pointers
9423 (references) to arrays of unknown bound. */
9424 tree t = TREE_TYPE (type);
9425 int ptr = TYPE_PTR_P (type);
9427 while (1)
9429 if (TYPE_PTR_P (t))
9430 ptr = 1;
9431 else if (TREE_CODE (t) != ARRAY_TYPE)
9432 break;
9433 else if (!TYPE_DOMAIN (t))
9434 break;
9435 t = TREE_TYPE (t);
9437 if (TREE_CODE (t) == ARRAY_TYPE)
9438 error ("parameter %qD includes %s to array of unknown "
9439 "bound %qT",
9440 decl, ptr ? "pointer" : "reference", t);
9443 if (any_error)
9444 init = NULL_TREE;
9445 else if (init && !processing_template_decl)
9446 init = check_default_argument (decl, init);
9449 if (TREE_CODE (decl) == PARM_DECL
9450 && FUNCTION_PARAMETER_PACK_P (decl)
9451 && parm->next)
9452 error ("parameter packs must be at the end of the parameter list");
9454 if (DECL_NAME (decl))
9456 if (pointer_set_contains (unique_decls, DECL_NAME (decl)))
9457 error ("multiple parameters named %qE", DECL_NAME (decl));
9458 else
9459 pointer_set_insert (unique_decls, DECL_NAME (decl));
9462 TREE_CHAIN (decl) = decls;
9463 decls = decl;
9464 result = tree_cons (init, type, result);
9466 decls = nreverse (decls);
9467 result = nreverse (result);
9468 if (!ellipsis)
9469 result = chainon (result, void_list_node);
9470 *parms = decls;
9472 pointer_set_destroy (unique_decls);
9473 return result;
9477 /* D is a constructor or overloaded `operator='.
9479 Let T be the class in which D is declared. Then, this function
9480 returns:
9482 -1 if D's is an ill-formed constructor or copy assignment operator
9483 whose first parameter is of type `T'.
9484 0 if D is not a copy constructor or copy assignment
9485 operator.
9486 1 if D is a copy constructor or copy assignment operator whose
9487 first parameter is a reference to const qualified T.
9488 2 if D is a copy constructor or copy assignment operator whose
9489 first parameter is a reference to non-const qualified T.
9491 This function can be used as a predicate. Positive values indicate
9492 a copy constructor and nonzero values indicate a copy assignment
9493 operator. */
9496 copy_fn_p (const_tree d)
9498 tree args;
9499 tree arg_type;
9500 int result = 1;
9502 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9504 if (TREE_CODE (d) == TEMPLATE_DECL
9505 || (DECL_TEMPLATE_INFO (d)
9506 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9507 /* Instantiations of template member functions are never copy
9508 functions. Note that member functions of templated classes are
9509 represented as template functions internally, and we must
9510 accept those as copy functions. */
9511 return 0;
9513 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9514 if (!args)
9515 return 0;
9517 arg_type = TREE_VALUE (args);
9518 if (arg_type == error_mark_node)
9519 return 0;
9521 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9523 /* Pass by value copy assignment operator. */
9524 result = -1;
9526 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9527 && !TYPE_REF_IS_RVALUE (arg_type)
9528 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9530 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9531 result = 2;
9533 else
9534 return 0;
9536 args = TREE_CHAIN (args);
9538 if (args && args != void_list_node && !TREE_PURPOSE (args))
9539 /* There are more non-optional args. */
9540 return 0;
9542 return result;
9545 /* D is a constructor or overloaded `operator='.
9547 Let T be the class in which D is declared. Then, this function
9548 returns true when D is a move constructor or move assignment
9549 operator, false otherwise. */
9551 bool
9552 move_fn_p (const_tree d)
9554 tree args;
9555 tree arg_type;
9556 bool result = false;
9558 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9560 if (cxx_dialect == cxx98)
9561 /* There are no move constructors if we are in C++98 mode. */
9562 return false;
9564 if (TREE_CODE (d) == TEMPLATE_DECL
9565 || (DECL_TEMPLATE_INFO (d)
9566 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9567 /* Instantiations of template member functions are never copy
9568 functions. Note that member functions of templated classes are
9569 represented as template functions internally, and we must
9570 accept those as copy functions. */
9571 return 0;
9573 args = FUNCTION_FIRST_USER_PARMTYPE (d);
9574 if (!args)
9575 return 0;
9577 arg_type = TREE_VALUE (args);
9578 if (arg_type == error_mark_node)
9579 return 0;
9581 if (TREE_CODE (arg_type) == REFERENCE_TYPE
9582 && TYPE_REF_IS_RVALUE (arg_type)
9583 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9584 DECL_CONTEXT (d)))
9585 result = true;
9587 args = TREE_CHAIN (args);
9589 if (args && args != void_list_node && !TREE_PURPOSE (args))
9590 /* There are more non-optional args. */
9591 return false;
9593 return result;
9596 /* Remember any special properties of member function DECL. */
9598 void
9599 grok_special_member_properties (tree decl)
9601 tree class_type;
9603 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9604 return;
9606 class_type = DECL_CONTEXT (decl);
9607 if (DECL_CONSTRUCTOR_P (decl))
9609 int ctor = copy_fn_p (decl);
9611 if (!DECL_ARTIFICIAL (decl))
9612 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
9614 if (ctor > 0)
9616 /* [class.copy]
9618 A non-template constructor for class X is a copy
9619 constructor if its first parameter is of type X&, const
9620 X&, volatile X& or const volatile X&, and either there
9621 are no other parameters or else all other parameters have
9622 default arguments. */
9623 TYPE_HAS_INIT_REF (class_type) = 1;
9624 if (ctor > 1)
9625 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
9627 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
9628 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9630 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9632 /* [class.copy]
9634 A non-template assignment operator for class X is a copy
9635 assignment operator if its parameter is of type X, X&, const
9636 X&, volatile X& or const volatile X&. */
9638 int assop = copy_fn_p (decl);
9640 if (assop)
9642 TYPE_HAS_ASSIGN_REF (class_type) = 1;
9643 if (assop != 1)
9644 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9649 /* Check a constructor DECL has the correct form. Complains
9650 if the class has a constructor of the form X(X). */
9653 grok_ctor_properties (const_tree ctype, const_tree decl)
9655 int ctor_parm = copy_fn_p (decl);
9657 if (ctor_parm < 0)
9659 /* [class.copy]
9661 A declaration of a constructor for a class X is ill-formed if
9662 its first parameter is of type (optionally cv-qualified) X
9663 and either there are no other parameters or else all other
9664 parameters have default arguments.
9666 We *don't* complain about member template instantiations that
9667 have this form, though; they can occur as we try to decide
9668 what constructor to use during overload resolution. Since
9669 overload resolution will never prefer such a constructor to
9670 the non-template copy constructor (which is either explicitly
9671 or implicitly defined), there's no need to worry about their
9672 existence. Theoretically, they should never even be
9673 instantiated, but that's hard to forestall. */
9674 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
9675 ctype, ctype);
9676 return 0;
9679 return 1;
9682 /* An operator with this code is unary, but can also be binary. */
9684 static int
9685 ambi_op_p (enum tree_code code)
9687 return (code == INDIRECT_REF
9688 || code == ADDR_EXPR
9689 || code == UNARY_PLUS_EXPR
9690 || code == NEGATE_EXPR
9691 || code == PREINCREMENT_EXPR
9692 || code == PREDECREMENT_EXPR);
9695 /* An operator with this name can only be unary. */
9697 static int
9698 unary_op_p (enum tree_code code)
9700 return (code == TRUTH_NOT_EXPR
9701 || code == BIT_NOT_EXPR
9702 || code == COMPONENT_REF
9703 || code == TYPE_EXPR);
9706 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
9707 errors are issued for invalid declarations. */
9709 bool
9710 grok_op_properties (tree decl, bool complain)
9712 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9713 tree argtype;
9714 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9715 tree name = DECL_NAME (decl);
9716 enum tree_code operator_code;
9717 int arity;
9718 bool ellipsis_p;
9719 tree class_type;
9721 /* Count the number of arguments and check for ellipsis. */
9722 for (argtype = argtypes, arity = 0;
9723 argtype && argtype != void_list_node;
9724 argtype = TREE_CHAIN (argtype))
9725 ++arity;
9726 ellipsis_p = !argtype;
9728 class_type = DECL_CONTEXT (decl);
9729 if (class_type && !CLASS_TYPE_P (class_type))
9730 class_type = NULL_TREE;
9732 if (DECL_CONV_FN_P (decl))
9733 operator_code = TYPE_EXPR;
9734 else
9737 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
9738 if (ansi_opname (CODE) == name) \
9740 operator_code = (CODE); \
9741 break; \
9743 else if (ansi_assopname (CODE) == name) \
9745 operator_code = (CODE); \
9746 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
9747 break; \
9750 #include "operators.def"
9751 #undef DEF_OPERATOR
9753 gcc_unreachable ();
9755 while (0);
9756 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9757 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9759 if (class_type)
9760 switch (operator_code)
9762 case NEW_EXPR:
9763 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9764 break;
9766 case DELETE_EXPR:
9767 TYPE_GETS_DELETE (class_type) |= 1;
9768 break;
9770 case VEC_NEW_EXPR:
9771 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9772 break;
9774 case VEC_DELETE_EXPR:
9775 TYPE_GETS_DELETE (class_type) |= 2;
9776 break;
9778 default:
9779 break;
9782 /* [basic.std.dynamic.allocation]/1:
9784 A program is ill-formed if an allocation function is declared
9785 in a namespace scope other than global scope or declared static
9786 in global scope.
9788 The same also holds true for deallocation functions. */
9789 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9790 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9792 if (DECL_NAMESPACE_SCOPE_P (decl))
9794 if (CP_DECL_CONTEXT (decl) != global_namespace)
9796 error ("%qD may not be declared within a namespace", decl);
9797 return false;
9799 else if (!TREE_PUBLIC (decl))
9801 error ("%qD may not be declared as static", decl);
9802 return false;
9807 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9809 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9810 DECL_IS_OPERATOR_NEW (decl) = 1;
9812 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9813 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9814 else
9816 /* An operator function must either be a non-static member function
9817 or have at least one parameter of a class, a reference to a class,
9818 an enumeration, or a reference to an enumeration. 13.4.0.6 */
9819 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9821 if (operator_code == TYPE_EXPR
9822 || operator_code == CALL_EXPR
9823 || operator_code == COMPONENT_REF
9824 || operator_code == ARRAY_REF
9825 || operator_code == NOP_EXPR)
9827 error ("%qD must be a nonstatic member function", decl);
9828 return false;
9830 else
9832 tree p;
9834 if (DECL_STATIC_FUNCTION_P (decl))
9836 error ("%qD must be either a non-static member "
9837 "function or a non-member function", decl);
9838 return false;
9841 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9843 tree arg = non_reference (TREE_VALUE (p));
9844 if (arg == error_mark_node)
9845 return false;
9847 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
9848 because these checks are performed even on
9849 template functions. */
9850 if (MAYBE_CLASS_TYPE_P (arg)
9851 || TREE_CODE (arg) == ENUMERAL_TYPE)
9852 break;
9855 if (!p || p == void_list_node)
9857 if (complain)
9858 error ("%qD must have an argument of class or "
9859 "enumerated type", decl);
9860 return false;
9865 /* There are no restrictions on the arguments to an overloaded
9866 "operator ()". */
9867 if (operator_code == CALL_EXPR)
9868 return true;
9870 /* Warn about conversion operators that will never be used. */
9871 if (IDENTIFIER_TYPENAME_P (name)
9872 && ! DECL_TEMPLATE_INFO (decl)
9873 && warn_conversion
9874 /* Warn only declaring the function; there is no need to
9875 warn again about out-of-class definitions. */
9876 && class_type == current_class_type)
9878 tree t = TREE_TYPE (name);
9879 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9880 const char *what = 0;
9882 if (ref)
9883 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9885 if (TREE_CODE (t) == VOID_TYPE)
9886 what = "void";
9887 else if (class_type)
9889 if (t == class_type)
9890 what = "the same type";
9891 /* Don't force t to be complete here. */
9892 else if (MAYBE_CLASS_TYPE_P (t)
9893 && COMPLETE_TYPE_P (t)
9894 && DERIVED_FROM_P (t, class_type))
9895 what = "a base class";
9898 if (what)
9899 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9900 "conversion operator",
9901 ref ? "a reference to " : "", what);
9904 if (operator_code == COND_EXPR)
9906 /* 13.4.0.3 */
9907 error ("ISO C++ prohibits overloading operator ?:");
9908 return false;
9910 else if (ellipsis_p)
9912 error ("%qD must not have variable number of arguments", decl);
9913 return false;
9915 else if (ambi_op_p (operator_code))
9917 if (arity == 1)
9918 /* We pick the one-argument operator codes by default, so
9919 we don't have to change anything. */
9921 else if (arity == 2)
9923 /* If we thought this was a unary operator, we now know
9924 it to be a binary operator. */
9925 switch (operator_code)
9927 case INDIRECT_REF:
9928 operator_code = MULT_EXPR;
9929 break;
9931 case ADDR_EXPR:
9932 operator_code = BIT_AND_EXPR;
9933 break;
9935 case UNARY_PLUS_EXPR:
9936 operator_code = PLUS_EXPR;
9937 break;
9939 case NEGATE_EXPR:
9940 operator_code = MINUS_EXPR;
9941 break;
9943 case PREINCREMENT_EXPR:
9944 operator_code = POSTINCREMENT_EXPR;
9945 break;
9947 case PREDECREMENT_EXPR:
9948 operator_code = POSTDECREMENT_EXPR;
9949 break;
9951 default:
9952 gcc_unreachable ();
9955 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9957 if ((operator_code == POSTINCREMENT_EXPR
9958 || operator_code == POSTDECREMENT_EXPR)
9959 && ! processing_template_decl
9960 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9962 if (methodp)
9963 error ("postfix %qD must take %<int%> as its argument",
9964 decl);
9965 else
9966 error ("postfix %qD must take %<int%> as its second "
9967 "argument", decl);
9968 return false;
9971 else
9973 if (methodp)
9974 error ("%qD must take either zero or one argument", decl);
9975 else
9976 error ("%qD must take either one or two arguments", decl);
9977 return false;
9980 /* More Effective C++ rule 6. */
9981 if (warn_ecpp
9982 && (operator_code == POSTINCREMENT_EXPR
9983 || operator_code == POSTDECREMENT_EXPR
9984 || operator_code == PREINCREMENT_EXPR
9985 || operator_code == PREDECREMENT_EXPR))
9987 tree arg = TREE_VALUE (argtypes);
9988 tree ret = TREE_TYPE (TREE_TYPE (decl));
9989 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9990 arg = TREE_TYPE (arg);
9991 arg = TYPE_MAIN_VARIANT (arg);
9992 if (operator_code == PREINCREMENT_EXPR
9993 || operator_code == PREDECREMENT_EXPR)
9995 if (TREE_CODE (ret) != REFERENCE_TYPE
9996 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9997 arg))
9998 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9999 build_reference_type (arg));
10001 else
10003 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10004 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10008 else if (unary_op_p (operator_code))
10010 if (arity != 1)
10012 if (methodp)
10013 error ("%qD must take %<void%>", decl);
10014 else
10015 error ("%qD must take exactly one argument", decl);
10016 return false;
10019 else /* if (binary_op_p (operator_code)) */
10021 if (arity != 2)
10023 if (methodp)
10024 error ("%qD must take exactly one argument", decl);
10025 else
10026 error ("%qD must take exactly two arguments", decl);
10027 return false;
10030 /* More Effective C++ rule 7. */
10031 if (warn_ecpp
10032 && (operator_code == TRUTH_ANDIF_EXPR
10033 || operator_code == TRUTH_ORIF_EXPR
10034 || operator_code == COMPOUND_EXPR))
10035 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10036 decl);
10039 /* Effective C++ rule 23. */
10040 if (warn_ecpp
10041 && arity == 2
10042 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10043 && (operator_code == PLUS_EXPR
10044 || operator_code == MINUS_EXPR
10045 || operator_code == TRUNC_DIV_EXPR
10046 || operator_code == MULT_EXPR
10047 || operator_code == TRUNC_MOD_EXPR)
10048 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10049 warning (OPT_Weffc__, "%qD should return by value", decl);
10051 /* [over.oper]/8 */
10052 for (; argtypes && argtypes != void_list_node;
10053 argtypes = TREE_CHAIN (argtypes))
10054 if (TREE_PURPOSE (argtypes))
10056 TREE_PURPOSE (argtypes) = NULL_TREE;
10057 if (operator_code == POSTINCREMENT_EXPR
10058 || operator_code == POSTDECREMENT_EXPR)
10060 if (pedantic)
10061 pedwarn ("%qD cannot have default arguments", decl);
10063 else
10065 error ("%qD cannot have default arguments", decl);
10066 return false;
10070 return true;
10073 /* Return a string giving the keyword associate with CODE. */
10075 static const char *
10076 tag_name (enum tag_types code)
10078 switch (code)
10080 case record_type:
10081 return "struct";
10082 case class_type:
10083 return "class";
10084 case union_type:
10085 return "union";
10086 case enum_type:
10087 return "enum";
10088 case typename_type:
10089 return "typename";
10090 default:
10091 gcc_unreachable ();
10095 /* Name lookup in an elaborated-type-specifier (after the keyword
10096 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
10097 elaborated-type-specifier is invalid, issue a diagnostic and return
10098 error_mark_node; otherwise, return the *_TYPE to which it referred.
10099 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
10101 tree
10102 check_elaborated_type_specifier (enum tag_types tag_code,
10103 tree decl,
10104 bool allow_template_p)
10106 tree type;
10108 /* In the case of:
10110 struct S { struct S *p; };
10112 name lookup will find the TYPE_DECL for the implicit "S::S"
10113 typedef. Adjust for that here. */
10114 if (DECL_SELF_REFERENCE_P (decl))
10115 decl = TYPE_NAME (TREE_TYPE (decl));
10117 type = TREE_TYPE (decl);
10119 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10120 is false for this case as well. */
10121 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10123 error ("using template type parameter %qT after %qs",
10124 type, tag_name (tag_code));
10125 return error_mark_node;
10127 /* [dcl.type.elab]
10129 If the identifier resolves to a typedef-name or a template
10130 type-parameter, the elaborated-type-specifier is ill-formed.
10132 In other words, the only legitimate declaration to use in the
10133 elaborated type specifier is the implicit typedef created when
10134 the type is declared. */
10135 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10136 && tag_code != typename_type)
10138 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10139 error ("%q+D has a previous declaration here", decl);
10140 return error_mark_node;
10142 else if (TREE_CODE (type) != RECORD_TYPE
10143 && TREE_CODE (type) != UNION_TYPE
10144 && tag_code != enum_type
10145 && tag_code != typename_type)
10147 error ("%qT referred to as %qs", type, tag_name (tag_code));
10148 error ("%q+T has a previous declaration here", type);
10149 return error_mark_node;
10151 else if (TREE_CODE (type) != ENUMERAL_TYPE
10152 && tag_code == enum_type)
10154 error ("%qT referred to as enum", type);
10155 error ("%q+T has a previous declaration here", type);
10156 return error_mark_node;
10158 else if (!allow_template_p
10159 && TREE_CODE (type) == RECORD_TYPE
10160 && CLASSTYPE_IS_TEMPLATE (type))
10162 /* If a class template appears as elaborated type specifier
10163 without a template header such as:
10165 template <class T> class C {};
10166 void f(class C); // No template header here
10168 then the required template argument is missing. */
10169 error ("template argument required for %<%s %T%>",
10170 tag_name (tag_code),
10171 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10172 return error_mark_node;
10175 return type;
10178 /* Lookup NAME in elaborate type specifier in scope according to
10179 SCOPE and issue diagnostics if necessary.
10180 Return *_TYPE node upon success, NULL_TREE when the NAME is not
10181 found, and ERROR_MARK_NODE for type error. */
10183 static tree
10184 lookup_and_check_tag (enum tag_types tag_code, tree name,
10185 tag_scope scope, bool template_header_p)
10187 tree t;
10188 tree decl;
10189 if (scope == ts_global)
10191 /* First try ordinary name lookup, ignoring hidden class name
10192 injected via friend declaration. */
10193 decl = lookup_name_prefer_type (name, 2);
10194 /* If that fails, the name will be placed in the smallest
10195 non-class, non-function-prototype scope according to 3.3.1/5.
10196 We may already have a hidden name declared as friend in this
10197 scope. So lookup again but not ignoring hidden names.
10198 If we find one, that name will be made visible rather than
10199 creating a new tag. */
10200 if (!decl)
10201 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10203 else
10204 decl = lookup_type_scope (name, scope);
10206 if (decl && DECL_CLASS_TEMPLATE_P (decl))
10207 decl = DECL_TEMPLATE_RESULT (decl);
10209 if (decl && TREE_CODE (decl) == TYPE_DECL)
10211 /* Look for invalid nested type:
10212 class C {
10213 class C {};
10214 }; */
10215 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10217 error ("%qD has the same name as the class in which it is "
10218 "declared",
10219 decl);
10220 return error_mark_node;
10223 /* Two cases we need to consider when deciding if a class
10224 template is allowed as an elaborated type specifier:
10225 1. It is a self reference to its own class.
10226 2. It comes with a template header.
10228 For example:
10230 template <class T> class C {
10231 class C *c1; // DECL_SELF_REFERENCE_P is true
10232 class D;
10234 template <class U> class C; // template_header_p is true
10235 template <class T> class C<T>::D {
10236 class C *c2; // DECL_SELF_REFERENCE_P is true
10237 }; */
10239 t = check_elaborated_type_specifier (tag_code,
10240 decl,
10241 template_header_p
10242 | DECL_SELF_REFERENCE_P (decl));
10243 return t;
10245 else if (decl && TREE_CODE (decl) == TREE_LIST)
10247 error ("reference to %qD is ambiguous", name);
10248 print_candidates (decl);
10249 return error_mark_node;
10251 else
10252 return NULL_TREE;
10255 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10256 Define the tag as a forward-reference if it is not defined.
10258 If a declaration is given, process it here, and report an error if
10259 multiple declarations are not identical.
10261 SCOPE is TS_CURRENT when this is also a definition. Only look in
10262 the current frame for the name (since C++ allows new names in any
10263 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10264 declaration. Only look beginning from the current scope outward up
10265 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
10267 TEMPLATE_HEADER_P is true when this declaration is preceded by
10268 a set of template parameters. */
10270 tree
10271 xref_tag (enum tag_types tag_code, tree name,
10272 tag_scope scope, bool template_header_p)
10274 enum tree_code code;
10275 tree t;
10276 tree context = NULL_TREE;
10278 timevar_push (TV_NAME_LOOKUP);
10280 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10282 switch (tag_code)
10284 case record_type:
10285 case class_type:
10286 code = RECORD_TYPE;
10287 break;
10288 case union_type:
10289 code = UNION_TYPE;
10290 break;
10291 case enum_type:
10292 code = ENUMERAL_TYPE;
10293 break;
10294 default:
10295 gcc_unreachable ();
10298 /* In case of anonymous name, xref_tag is only called to
10299 make type node and push name. Name lookup is not required. */
10300 if (ANON_AGGRNAME_P (name))
10301 t = NULL_TREE;
10302 else
10303 t = lookup_and_check_tag (tag_code, name,
10304 scope, template_header_p);
10306 if (t == error_mark_node)
10307 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10309 if (scope != ts_current && t && current_class_type
10310 && template_class_depth (current_class_type)
10311 && template_header_p)
10313 /* Since SCOPE is not TS_CURRENT, we are not looking at a
10314 definition of this tag. Since, in addition, we are currently
10315 processing a (member) template declaration of a template
10316 class, we must be very careful; consider:
10318 template <class X>
10319 struct S1
10321 template <class U>
10322 struct S2
10323 { template <class V>
10324 friend struct S1; };
10326 Here, the S2::S1 declaration should not be confused with the
10327 outer declaration. In particular, the inner version should
10328 have a template parameter of level 2, not level 1. This
10329 would be particularly important if the member declaration
10330 were instead:
10332 template <class V = U> friend struct S1;
10334 say, when we should tsubst into `U' when instantiating
10335 S2. On the other hand, when presented with:
10337 template <class T>
10338 struct S1 {
10339 template <class U>
10340 struct S2 {};
10341 template <class U>
10342 friend struct S2;
10345 we must find the inner binding eventually. We
10346 accomplish this by making sure that the new type we
10347 create to represent this declaration has the right
10348 TYPE_CONTEXT. */
10349 context = TYPE_CONTEXT (t);
10350 t = NULL_TREE;
10353 if (! t)
10355 /* If no such tag is yet defined, create a forward-reference node
10356 and record it as the "definition".
10357 When a real declaration of this type is found,
10358 the forward-reference will be altered into a real type. */
10359 if (code == ENUMERAL_TYPE)
10361 error ("use of enum %q#D without previous declaration", name);
10362 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10364 else
10366 t = make_class_type (code);
10367 TYPE_CONTEXT (t) = context;
10368 t = pushtag (name, t, scope);
10371 else
10373 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10375 if (!redeclare_class_template (t, current_template_parms))
10376 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10378 else if (!processing_template_decl
10379 && CLASS_TYPE_P (t)
10380 && CLASSTYPE_IS_TEMPLATE (t))
10382 error ("redeclaration of %qT as a non-template", t);
10383 error ("previous declaration %q+D", t);
10384 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10387 /* Make injected friend class visible. */
10388 if (scope != ts_within_enclosing_non_class
10389 && hidden_name_p (TYPE_NAME (t)))
10391 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10392 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10394 if (TYPE_TEMPLATE_INFO (t))
10396 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10397 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10402 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10405 tree
10406 xref_tag_from_type (tree old, tree id, tag_scope scope)
10408 enum tag_types tag_kind;
10410 if (TREE_CODE (old) == RECORD_TYPE)
10411 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10412 else
10413 tag_kind = union_type;
10415 if (id == NULL_TREE)
10416 id = TYPE_IDENTIFIER (old);
10418 return xref_tag (tag_kind, id, scope, false);
10421 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10422 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
10423 access_* node, and the TREE_VALUE is the type of the base-class.
10424 Non-NULL TREE_TYPE indicates virtual inheritance.
10426 Returns true if the binfo hierarchy was successfully created,
10427 false if an error was detected. */
10429 bool
10430 xref_basetypes (tree ref, tree base_list)
10432 tree *basep;
10433 tree binfo, base_binfo;
10434 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
10435 unsigned max_bases = 0; /* Maximum direct bases. */
10436 int i;
10437 tree default_access;
10438 tree igo_prev; /* Track Inheritance Graph Order. */
10440 if (ref == error_mark_node)
10441 return false;
10443 /* The base of a derived class is private by default, all others are
10444 public. */
10445 default_access = (TREE_CODE (ref) == RECORD_TYPE
10446 && CLASSTYPE_DECLARED_CLASS (ref)
10447 ? access_private_node : access_public_node);
10449 /* First, make sure that any templates in base-classes are
10450 instantiated. This ensures that if we call ourselves recursively
10451 we do not get confused about which classes are marked and which
10452 are not. */
10453 basep = &base_list;
10454 while (*basep)
10456 tree basetype = TREE_VALUE (*basep);
10458 if (!(processing_template_decl && uses_template_parms (basetype))
10459 && !complete_type_or_else (basetype, NULL))
10460 /* An incomplete type. Remove it from the list. */
10461 *basep = TREE_CHAIN (*basep);
10462 else
10464 max_bases++;
10465 if (TREE_TYPE (*basep))
10466 max_vbases++;
10467 if (CLASS_TYPE_P (basetype))
10468 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10469 basep = &TREE_CHAIN (*basep);
10473 TYPE_MARKED_P (ref) = 1;
10475 /* The binfo slot should be empty, unless this is an (ill-formed)
10476 redefinition. */
10477 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10478 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10480 binfo = make_tree_binfo (max_bases);
10482 TYPE_BINFO (ref) = binfo;
10483 BINFO_OFFSET (binfo) = size_zero_node;
10484 BINFO_TYPE (binfo) = ref;
10486 if (max_bases)
10488 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10489 /* An aggregate cannot have baseclasses. */
10490 CLASSTYPE_NON_AGGREGATE (ref) = 1;
10492 if (TREE_CODE (ref) == UNION_TYPE)
10494 error ("derived union %qT invalid", ref);
10495 return false;
10499 if (max_bases > 1)
10501 if (TYPE_FOR_JAVA (ref))
10503 error ("Java class %qT cannot have multiple bases", ref);
10504 return false;
10508 if (max_vbases)
10510 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
10512 if (TYPE_FOR_JAVA (ref))
10514 error ("Java class %qT cannot have virtual bases", ref);
10515 return false;
10519 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10521 tree access = TREE_PURPOSE (base_list);
10522 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10523 tree basetype = TREE_VALUE (base_list);
10525 if (access == access_default_node)
10526 access = default_access;
10528 if (PACK_EXPANSION_P (basetype))
10529 basetype = PACK_EXPANSION_PATTERN (basetype);
10530 if (TREE_CODE (basetype) == TYPE_DECL)
10531 basetype = TREE_TYPE (basetype);
10532 if (TREE_CODE (basetype) != RECORD_TYPE
10533 && TREE_CODE (basetype) != TYPENAME_TYPE
10534 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
10535 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
10537 error ("base type %qT fails to be a struct or class type",
10538 basetype);
10539 return false;
10542 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10543 TYPE_FOR_JAVA (ref) = 1;
10545 base_binfo = NULL_TREE;
10546 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
10548 base_binfo = TYPE_BINFO (basetype);
10549 /* The original basetype could have been a typedef'd type. */
10550 basetype = BINFO_TYPE (base_binfo);
10552 /* Inherit flags from the base. */
10553 TYPE_HAS_NEW_OPERATOR (ref)
10554 |= TYPE_HAS_NEW_OPERATOR (basetype);
10555 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10556 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10557 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10558 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
10559 CLASSTYPE_DIAMOND_SHAPED_P (ref)
10560 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10561 CLASSTYPE_REPEATED_BASE_P (ref)
10562 |= CLASSTYPE_REPEATED_BASE_P (basetype);
10565 /* We must do this test after we've seen through a typedef
10566 type. */
10567 if (TYPE_MARKED_P (basetype))
10569 if (basetype == ref)
10570 error ("recursive type %qT undefined", basetype);
10571 else
10572 error ("duplicate base type %qT invalid", basetype);
10573 return false;
10576 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10577 /* Regenerate the pack expansion for the bases. */
10578 basetype = make_pack_expansion (basetype);
10580 TYPE_MARKED_P (basetype) = 1;
10582 base_binfo = copy_binfo (base_binfo, basetype, ref,
10583 &igo_prev, via_virtual);
10584 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10585 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
10587 BINFO_BASE_APPEND (binfo, base_binfo);
10588 BINFO_BASE_ACCESS_APPEND (binfo, access);
10591 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10592 /* If we have space in the vbase vector, we must have shared at
10593 least one of them, and are therefore diamond shaped. */
10594 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10596 /* Unmark all the types. */
10597 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10598 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10599 TYPE_MARKED_P (ref) = 0;
10601 /* Now see if we have a repeated base type. */
10602 if (!CLASSTYPE_REPEATED_BASE_P (ref))
10604 for (base_binfo = binfo; base_binfo;
10605 base_binfo = TREE_CHAIN (base_binfo))
10607 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10609 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10610 break;
10612 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10614 for (base_binfo = binfo; base_binfo;
10615 base_binfo = TREE_CHAIN (base_binfo))
10616 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10617 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10618 else
10619 break;
10622 return true;
10626 /* Begin compiling the definition of an enumeration type.
10627 NAME is its name.
10628 Returns the type object, as yet incomplete.
10629 Also records info about it so that build_enumerator
10630 may be used to declare the individual values as they are read. */
10632 tree
10633 start_enum (tree name)
10635 tree enumtype;
10637 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10639 /* If this is the real definition for a previous forward reference,
10640 fill in the contents in the same object that used to be the
10641 forward reference. */
10643 enumtype = lookup_and_check_tag (enum_type, name,
10644 /*tag_scope=*/ts_current,
10645 /*template_header_p=*/false);
10647 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
10649 error ("multiple definition of %q#T", enumtype);
10650 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
10651 /* Clear out TYPE_VALUES, and start again. */
10652 TYPE_VALUES (enumtype) = NULL_TREE;
10654 else
10656 /* In case of error, make a dummy enum to allow parsing to
10657 continue. */
10658 if (enumtype == error_mark_node)
10659 name = make_anon_name ();
10661 enumtype = make_node (ENUMERAL_TYPE);
10662 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
10665 return enumtype;
10668 /* After processing and defining all the values of an enumeration type,
10669 install their decls in the enumeration type and finish it off.
10670 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
10672 void
10673 finish_enum (tree enumtype)
10675 tree values;
10676 tree decl;
10677 tree value;
10678 tree minnode;
10679 tree maxnode;
10680 tree t;
10681 bool unsignedp;
10682 bool use_short_enum;
10683 int lowprec;
10684 int highprec;
10685 int precision;
10686 integer_type_kind itk;
10687 tree underlying_type = NULL_TREE;
10689 /* We built up the VALUES in reverse order. */
10690 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10692 /* For an enum defined in a template, just set the type of the values;
10693 all further processing is postponed until the template is
10694 instantiated. We need to set the type so that tsubst of a CONST_DECL
10695 works. */
10696 if (processing_template_decl)
10698 for (values = TYPE_VALUES (enumtype);
10699 values;
10700 values = TREE_CHAIN (values))
10701 TREE_TYPE (TREE_VALUE (values)) = enumtype;
10702 if (at_function_scope_p ())
10703 add_stmt (build_min (TAG_DEFN, enumtype));
10704 return;
10707 /* Determine the minimum and maximum values of the enumerators. */
10708 if (TYPE_VALUES (enumtype))
10710 minnode = maxnode = NULL_TREE;
10712 for (values = TYPE_VALUES (enumtype);
10713 values;
10714 values = TREE_CHAIN (values))
10716 decl = TREE_VALUE (values);
10718 /* [dcl.enum]: Following the closing brace of an enum-specifier,
10719 each enumerator has the type of its enumeration. Prior to the
10720 closing brace, the type of each enumerator is the type of its
10721 initializing value. */
10722 TREE_TYPE (decl) = enumtype;
10724 /* Update the minimum and maximum values, if appropriate. */
10725 value = DECL_INITIAL (decl);
10726 if (value == error_mark_node)
10727 value = integer_zero_node;
10728 /* Figure out what the minimum and maximum values of the
10729 enumerators are. */
10730 if (!minnode)
10731 minnode = maxnode = value;
10732 else if (tree_int_cst_lt (maxnode, value))
10733 maxnode = value;
10734 else if (tree_int_cst_lt (value, minnode))
10735 minnode = value;
10738 else
10739 /* [dcl.enum]
10741 If the enumerator-list is empty, the underlying type is as if
10742 the enumeration had a single enumerator with value 0. */
10743 minnode = maxnode = integer_zero_node;
10745 /* Compute the number of bits require to represent all values of the
10746 enumeration. We must do this before the type of MINNODE and
10747 MAXNODE are transformed, since min_precision relies on the
10748 TREE_TYPE of the value it is passed. */
10749 unsignedp = tree_int_cst_sgn (minnode) >= 0;
10750 lowprec = min_precision (minnode, unsignedp);
10751 highprec = min_precision (maxnode, unsignedp);
10752 precision = MAX (lowprec, highprec);
10754 /* Determine the underlying type of the enumeration.
10756 [dcl.enum]
10758 The underlying type of an enumeration is an integral type that
10759 can represent all the enumerator values defined in the
10760 enumeration. It is implementation-defined which integral type is
10761 used as the underlying type for an enumeration except that the
10762 underlying type shall not be larger than int unless the value of
10763 an enumerator cannot fit in an int or unsigned int.
10765 We use "int" or an "unsigned int" as the underlying type, even if
10766 a smaller integral type would work, unless the user has
10767 explicitly requested that we use the smallest possible type. The
10768 user can request that for all enumerations with a command line
10769 flag, or for just one enumeration with an attribute. */
10771 use_short_enum = flag_short_enums
10772 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
10774 for (itk = (use_short_enum ? itk_char : itk_int);
10775 itk != itk_none;
10776 itk++)
10778 underlying_type = integer_types[itk];
10779 if (TYPE_PRECISION (underlying_type) >= precision
10780 && TYPE_UNSIGNED (underlying_type) == unsignedp)
10781 break;
10783 if (itk == itk_none)
10785 /* DR 377
10787 IF no integral type can represent all the enumerator values, the
10788 enumeration is ill-formed. */
10789 error ("no integral type can represent all of the enumerator values "
10790 "for %qT", enumtype);
10791 precision = TYPE_PRECISION (long_long_integer_type_node);
10792 underlying_type = integer_types[itk_unsigned_long_long];
10795 /* Compute the minium and maximum values for the type.
10797 [dcl.enum]
10799 For an enumeration where emin is the smallest enumerator and emax
10800 is the largest, the values of the enumeration are the values of the
10801 underlying type in the range bmin to bmax, where bmin and bmax are,
10802 respectively, the smallest and largest values of the smallest bit-
10803 field that can store emin and emax. */
10805 /* The middle-end currently assumes that types with TYPE_PRECISION
10806 narrower than their underlying type are suitably zero or sign
10807 extended to fill their mode. g++ doesn't make these guarantees.
10808 Until the middle-end can represent such paradoxical types, we
10809 set the TYPE_PRECISION to the width of the underlying type. */
10810 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10812 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10814 /* [dcl.enum]
10816 The value of sizeof() applied to an enumeration type, an object
10817 of an enumeration type, or an enumerator, is the value of sizeof()
10818 applied to the underlying type. */
10819 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10820 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10821 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10822 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10823 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10824 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10826 /* Convert each of the enumerators to the type of the underlying
10827 type of the enumeration. */
10828 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10830 location_t saved_location;
10832 decl = TREE_VALUE (values);
10833 saved_location = input_location;
10834 input_location = DECL_SOURCE_LOCATION (decl);
10835 value = perform_implicit_conversion (underlying_type,
10836 DECL_INITIAL (decl),
10837 tf_warning_or_error);
10838 input_location = saved_location;
10840 /* Do not clobber shared ints. */
10841 value = copy_node (value);
10843 TREE_TYPE (value) = enumtype;
10844 DECL_INITIAL (decl) = value;
10845 TREE_VALUE (values) = value;
10848 /* Fix up all variant types of this enum type. */
10849 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10851 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10852 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10853 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10854 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10855 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10856 TYPE_MODE (t) = TYPE_MODE (enumtype);
10857 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10858 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10859 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10860 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10863 /* Finish debugging output for this type. */
10864 rest_of_type_compilation (enumtype, namespace_bindings_p ());
10867 /* Build and install a CONST_DECL for an enumeration constant of the
10868 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10869 Assignment of sequential values by default is handled here. */
10871 void
10872 build_enumerator (tree name, tree value, tree enumtype)
10874 tree decl;
10875 tree context;
10876 tree type;
10878 /* If the VALUE was erroneous, pretend it wasn't there; that will
10879 result in the enum being assigned the next value in sequence. */
10880 if (value == error_mark_node)
10881 value = NULL_TREE;
10883 /* Remove no-op casts from the value. */
10884 if (value)
10885 STRIP_TYPE_NOPS (value);
10887 if (! processing_template_decl)
10889 /* Validate and default VALUE. */
10890 if (value != NULL_TREE)
10892 value = integral_constant_value (value);
10894 if (TREE_CODE (value) == INTEGER_CST)
10896 value = perform_integral_promotions (value);
10897 constant_expression_warning (value);
10899 else
10901 error ("enumerator value for %qD is not an integer constant", name);
10902 value = NULL_TREE;
10906 /* Default based on previous value. */
10907 if (value == NULL_TREE)
10909 if (TYPE_VALUES (enumtype))
10911 HOST_WIDE_INT hi;
10912 unsigned HOST_WIDE_INT lo;
10913 tree prev_value;
10914 bool overflowed;
10916 /* The next value is the previous value plus one. We can
10917 safely assume that the previous value is an INTEGER_CST.
10918 add_double doesn't know the type of the target expression,
10919 so we must check with int_fits_type_p as well. */
10920 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10921 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10922 TREE_INT_CST_HIGH (prev_value),
10923 1, 0, &lo, &hi);
10924 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10925 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10927 if (overflowed)
10929 error ("overflow in enumeration values at %qD", name);
10930 value = error_mark_node;
10933 else
10934 value = integer_zero_node;
10937 /* Remove no-op casts from the value. */
10938 STRIP_TYPE_NOPS (value);
10941 /* C++ associates enums with global, function, or class declarations. */
10942 context = current_scope ();
10944 /* Build the actual enumeration constant. Note that the enumeration
10945 constants have the type of their initializers until the
10946 enumeration is complete:
10948 [ dcl.enum ]
10950 Following the closing brace of an enum-specifier, each enumer-
10951 ator has the type of its enumeration. Prior to the closing
10952 brace, the type of each enumerator is the type of its
10953 initializing value.
10955 In finish_enum we will reset the type. Of course, if we're
10956 processing a template, there may be no value. */
10957 type = value ? TREE_TYPE (value) : NULL_TREE;
10959 if (context && context == current_class_type)
10960 /* This enum declaration is local to the class. We need the full
10961 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
10962 decl = build_lang_decl (CONST_DECL, name, type);
10963 else
10964 /* It's a global enum, or it's local to a function. (Note local to
10965 a function could mean local to a class method. */
10966 decl = build_decl (CONST_DECL, name, type);
10968 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10969 TREE_CONSTANT (decl) = 1;
10970 TREE_READONLY (decl) = 1;
10971 DECL_INITIAL (decl) = value;
10973 if (context && context == current_class_type)
10974 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10975 on the TYPE_FIELDS list for `S'. (That's so that you can say
10976 things like `S::i' later.) */
10977 finish_member_declaration (decl);
10978 else
10979 pushdecl (decl);
10981 /* Add this enumeration constant to the list for this type. */
10982 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10986 /* We're defining DECL. Make sure that it's type is OK. */
10988 static void
10989 check_function_type (tree decl, tree current_function_parms)
10991 tree fntype = TREE_TYPE (decl);
10992 tree return_type = complete_type (TREE_TYPE (fntype));
10994 /* In a function definition, arg types must be complete. */
10995 require_complete_types_for_parms (current_function_parms);
10997 if (dependent_type_p (return_type))
10998 return;
10999 if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11000 || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11002 tree args = TYPE_ARG_TYPES (fntype);
11004 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11005 error ("return type %q#T is incomplete", return_type);
11006 else
11007 error ("return type has Java class type %q#T", return_type);
11009 /* Make it return void instead. */
11010 if (TREE_CODE (fntype) == METHOD_TYPE)
11011 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11012 void_type_node,
11013 TREE_CHAIN (args));
11014 else
11015 fntype = build_function_type (void_type_node, args);
11016 TREE_TYPE (decl)
11017 = build_exception_variant (fntype,
11018 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11020 else
11021 abstract_virtuals_error (decl, TREE_TYPE (fntype));
11024 /* Create the FUNCTION_DECL for a function definition.
11025 DECLSPECS and DECLARATOR are the parts of the declaration;
11026 they describe the function's name and the type it returns,
11027 but twisted together in a fashion that parallels the syntax of C.
11029 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11030 DECLARATOR is really the DECL for the function we are about to
11031 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11032 indicating that the function is an inline defined in-class.
11034 This function creates a binding context for the function body
11035 as well as setting up the FUNCTION_DECL in current_function_decl.
11037 For C++, we must first check whether that datum makes any sense.
11038 For example, "class A local_a(1,2);" means that variable local_a
11039 is an aggregate of type A, which should have a constructor
11040 applied to it with the argument list [1, 2].
11042 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11043 or may be a BLOCK if the function has been defined previously
11044 in this translation unit. On exit, DECL_INITIAL (decl1) will be
11045 error_mark_node if the function has never been defined, or
11046 a BLOCK if the function has been defined somewhere. */
11048 void
11049 start_preparsed_function (tree decl1, tree attrs, int flags)
11051 tree ctype = NULL_TREE;
11052 tree fntype;
11053 tree restype;
11054 int doing_friend = 0;
11055 struct cp_binding_level *bl;
11056 tree current_function_parms;
11057 struct c_fileinfo *finfo
11058 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11059 bool honor_interface;
11061 /* Sanity check. */
11062 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11063 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11065 fntype = TREE_TYPE (decl1);
11066 if (TREE_CODE (fntype) == METHOD_TYPE)
11067 ctype = TYPE_METHOD_BASETYPE (fntype);
11069 /* ISO C++ 11.4/5. A friend function defined in a class is in
11070 the (lexical) scope of the class in which it is defined. */
11071 if (!ctype && DECL_FRIEND_P (decl1))
11073 ctype = DECL_FRIEND_CONTEXT (decl1);
11075 /* CTYPE could be null here if we're dealing with a template;
11076 for example, `inline friend float foo()' inside a template
11077 will have no CTYPE set. */
11078 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11079 ctype = NULL_TREE;
11080 else
11081 doing_friend = 1;
11084 if (DECL_DECLARED_INLINE_P (decl1)
11085 && lookup_attribute ("noinline", attrs))
11086 warning (0, "inline function %q+D given attribute noinline", decl1);
11088 /* Handle gnu_inline attribute. */
11089 if (GNU_INLINE_P (decl1))
11091 DECL_EXTERNAL (decl1) = 1;
11092 DECL_NOT_REALLY_EXTERN (decl1) = 0;
11093 DECL_INTERFACE_KNOWN (decl1) = 1;
11094 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11097 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11098 /* This is a constructor, we must ensure that any default args
11099 introduced by this definition are propagated to the clones
11100 now. The clones are used directly in overload resolution. */
11101 adjust_clone_args (decl1);
11103 /* Sometimes we don't notice that a function is a static member, and
11104 build a METHOD_TYPE for it. Fix that up now. */
11105 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11106 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11108 revert_static_member_fn (decl1);
11109 ctype = NULL_TREE;
11112 /* Set up current_class_type, and enter the scope of the class, if
11113 appropriate. */
11114 if (ctype)
11115 push_nested_class (ctype);
11116 else if (DECL_STATIC_FUNCTION_P (decl1))
11117 push_nested_class (DECL_CONTEXT (decl1));
11119 /* Now that we have entered the scope of the class, we must restore
11120 the bindings for any template parameters surrounding DECL1, if it
11121 is an inline member template. (Order is important; consider the
11122 case where a template parameter has the same name as a field of
11123 the class.) It is not until after this point that
11124 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
11125 if (flags & SF_INCLASS_INLINE)
11126 maybe_begin_member_template_processing (decl1);
11128 /* Effective C++ rule 15. */
11129 if (warn_ecpp
11130 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11131 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11132 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11134 /* Make the init_value nonzero so pushdecl knows this is not tentative.
11135 error_mark_node is replaced below (in poplevel) with the BLOCK. */
11136 if (!DECL_INITIAL (decl1))
11137 DECL_INITIAL (decl1) = error_mark_node;
11139 /* This function exists in static storage.
11140 (This does not mean `static' in the C sense!) */
11141 TREE_STATIC (decl1) = 1;
11143 /* We must call push_template_decl after current_class_type is set
11144 up. (If we are processing inline definitions after exiting a
11145 class scope, current_class_type will be NULL_TREE until set above
11146 by push_nested_class.) */
11147 if (processing_template_decl)
11149 /* FIXME: Handle error_mark_node more gracefully. */
11150 tree newdecl1 = push_template_decl (decl1);
11151 if (newdecl1 != error_mark_node)
11152 decl1 = newdecl1;
11155 /* We are now in the scope of the function being defined. */
11156 current_function_decl = decl1;
11158 /* Save the parm names or decls from this function's declarator
11159 where store_parm_decls will find them. */
11160 current_function_parms = DECL_ARGUMENTS (decl1);
11162 /* Make sure the parameter and return types are reasonable. When
11163 you declare a function, these types can be incomplete, but they
11164 must be complete when you define the function. */
11165 check_function_type (decl1, current_function_parms);
11167 /* Build the return declaration for the function. */
11168 restype = TREE_TYPE (fntype);
11169 if (DECL_RESULT (decl1) == NULL_TREE)
11171 tree resdecl;
11173 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11174 DECL_ARTIFICIAL (resdecl) = 1;
11175 DECL_IGNORED_P (resdecl) = 1;
11176 DECL_RESULT (decl1) = resdecl;
11178 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11181 /* Let the user know we're compiling this function. */
11182 announce_function (decl1);
11184 /* Record the decl so that the function name is defined.
11185 If we already have a decl for this name, and it is a FUNCTION_DECL,
11186 use the old decl. */
11187 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11189 /* A specialization is not used to guide overload resolution. */
11190 if (!DECL_FUNCTION_MEMBER_P (decl1)
11191 && !(DECL_USE_TEMPLATE (decl1) &&
11192 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11194 tree olddecl = pushdecl (decl1);
11196 if (olddecl == error_mark_node)
11197 /* If something went wrong when registering the declaration,
11198 use DECL1; we have to have a FUNCTION_DECL to use when
11199 parsing the body of the function. */
11201 else
11203 /* Otherwise, OLDDECL is either a previous declaration
11204 of the same function or DECL1 itself. */
11206 if (warn_missing_declarations
11207 && olddecl == decl1
11208 && !DECL_MAIN_P (decl1)
11209 && TREE_PUBLIC (decl1)
11210 && !DECL_DECLARED_INLINE_P (decl1))
11212 tree context;
11214 /* Check whether DECL1 is in an anonymous
11215 namespace. */
11216 for (context = DECL_CONTEXT (decl1);
11217 context;
11218 context = DECL_CONTEXT (context))
11220 if (TREE_CODE (context) == NAMESPACE_DECL
11221 && DECL_NAME (context) == NULL_TREE)
11222 break;
11225 if (context == NULL)
11226 warning (OPT_Wmissing_declarations,
11227 "no previous declaration for %q+D", decl1);
11230 decl1 = olddecl;
11233 else
11235 /* We need to set the DECL_CONTEXT. */
11236 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11237 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11239 fntype = TREE_TYPE (decl1);
11241 /* If #pragma weak applies, mark the decl appropriately now.
11242 The pragma only applies to global functions. Because
11243 determining whether or not the #pragma applies involves
11244 computing the mangled name for the declaration, we cannot
11245 apply the pragma until after we have merged this declaration
11246 with any previous declarations; if the original declaration
11247 has a linkage specification, that specification applies to
11248 the definition as well, and may affect the mangled name. */
11249 if (!DECL_CONTEXT (decl1))
11250 maybe_apply_pragma_weak (decl1);
11253 /* Reset this in case the call to pushdecl changed it. */
11254 current_function_decl = decl1;
11256 gcc_assert (DECL_INITIAL (decl1));
11258 /* This function may already have been parsed, in which case just
11259 return; our caller will skip over the body without parsing. */
11260 if (DECL_INITIAL (decl1) != error_mark_node)
11261 return;
11263 /* Initialize RTL machinery. We cannot do this until
11264 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
11265 even when processing a template; this is how we get
11266 CFUN set up, and our per-function variables initialized.
11267 FIXME factor out the non-RTL stuff. */
11268 bl = current_binding_level;
11269 allocate_struct_function (decl1, processing_template_decl);
11271 /* Initialize the language data structures. Whenever we start
11272 a new function, we destroy temporaries in the usual way. */
11273 cfun->language = GGC_CNEW (struct language_function);
11274 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11275 current_binding_level = bl;
11277 /* Even though we're inside a function body, we still don't want to
11278 call expand_expr to calculate the size of a variable-sized array.
11279 We haven't necessarily assigned RTL to all variables yet, so it's
11280 not safe to try to expand expressions involving them. */
11281 cfun->dont_save_pending_sizes_p = 1;
11283 /* Start the statement-tree, start the tree now. */
11284 DECL_SAVED_TREE (decl1) = push_stmt_list ();
11286 /* If we are (erroneously) defining a function that we have already
11287 defined before, wipe out what we knew before. */
11288 if (!DECL_PENDING_INLINE_P (decl1))
11289 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11291 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11293 /* We know that this was set up by `grokclassfn'. We do not
11294 wait until `store_parm_decls', since evil parse errors may
11295 never get us to that point. Here we keep the consistency
11296 between `current_class_type' and `current_class_ptr'. */
11297 tree t = DECL_ARGUMENTS (decl1);
11299 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11300 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11302 cp_function_chain->x_current_class_ref
11303 = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
11304 cp_function_chain->x_current_class_ptr = t;
11306 /* Constructors and destructors need to know whether they're "in
11307 charge" of initializing virtual base classes. */
11308 t = TREE_CHAIN (t);
11309 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11311 current_in_charge_parm = t;
11312 t = TREE_CHAIN (t);
11314 if (DECL_HAS_VTT_PARM_P (decl1))
11316 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11317 current_vtt_parm = t;
11321 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11322 /* Implicitly-defined methods (like the
11323 destructor for a class in which no destructor
11324 is explicitly declared) must not be defined
11325 until their definition is needed. So, we
11326 ignore interface specifications for
11327 compiler-generated functions. */
11328 && !DECL_ARTIFICIAL (decl1));
11330 if (DECL_INTERFACE_KNOWN (decl1))
11332 tree ctx = decl_function_context (decl1);
11334 if (DECL_NOT_REALLY_EXTERN (decl1))
11335 DECL_EXTERNAL (decl1) = 0;
11337 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11338 && TREE_PUBLIC (ctx))
11339 /* This is a function in a local class in an extern inline
11340 function. */
11341 comdat_linkage (decl1);
11343 /* If this function belongs to an interface, it is public.
11344 If it belongs to someone else's interface, it is also external.
11345 This only affects inlines and template instantiations. */
11346 else if (!finfo->interface_unknown && honor_interface)
11348 if (DECL_DECLARED_INLINE_P (decl1)
11349 || DECL_TEMPLATE_INSTANTIATION (decl1)
11350 || processing_template_decl)
11352 DECL_EXTERNAL (decl1)
11353 = (finfo->interface_only
11354 || (DECL_DECLARED_INLINE_P (decl1)
11355 && ! flag_implement_inlines
11356 && !DECL_VINDEX (decl1)));
11358 /* For WIN32 we also want to put these in linkonce sections. */
11359 maybe_make_one_only (decl1);
11361 else
11362 DECL_EXTERNAL (decl1) = 0;
11363 DECL_INTERFACE_KNOWN (decl1) = 1;
11364 /* If this function is in an interface implemented in this file,
11365 make sure that the back end knows to emit this function
11366 here. */
11367 if (!DECL_EXTERNAL (decl1))
11368 mark_needed (decl1);
11370 else if (finfo->interface_unknown && finfo->interface_only
11371 && honor_interface)
11373 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
11374 interface, we will have both finfo->interface_unknown and
11375 finfo->interface_only set. In that case, we don't want to
11376 use the normal heuristics because someone will supply a
11377 #pragma implementation elsewhere, and deducing it here would
11378 produce a conflict. */
11379 comdat_linkage (decl1);
11380 DECL_EXTERNAL (decl1) = 0;
11381 DECL_INTERFACE_KNOWN (decl1) = 1;
11382 DECL_DEFER_OUTPUT (decl1) = 1;
11384 else
11386 /* This is a definition, not a reference.
11387 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
11388 if (!GNU_INLINE_P (decl1))
11389 DECL_EXTERNAL (decl1) = 0;
11391 if ((DECL_DECLARED_INLINE_P (decl1)
11392 || DECL_TEMPLATE_INSTANTIATION (decl1))
11393 && ! DECL_INTERFACE_KNOWN (decl1)
11394 /* Don't try to defer nested functions for now. */
11395 && ! decl_function_context (decl1))
11396 DECL_DEFER_OUTPUT (decl1) = 1;
11397 else
11398 DECL_INTERFACE_KNOWN (decl1) = 1;
11401 /* Determine the ELF visibility attribute for the function. We must not
11402 do this before calling "pushdecl", as we must allow "duplicate_decls"
11403 to merge any attributes appropriately. We also need to wait until
11404 linkage is set. */
11405 if (!DECL_CLONED_FUNCTION_P (decl1))
11406 determine_visibility (decl1);
11408 begin_scope (sk_function_parms, decl1);
11410 ++function_depth;
11412 if (DECL_DESTRUCTOR_P (decl1)
11413 || (DECL_CONSTRUCTOR_P (decl1)
11414 && targetm.cxx.cdtor_returns_this ()))
11416 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11417 DECL_CONTEXT (cdtor_label) = current_function_decl;
11420 start_fname_decls ();
11422 store_parm_decls (current_function_parms);
11426 /* Like start_preparsed_function, except that instead of a
11427 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11429 Returns 1 on success. If the DECLARATOR is not suitable for a function
11430 (it defines a datum instead), we return 0, which tells
11431 yyparse to report a parse error. */
11434 start_function (cp_decl_specifier_seq *declspecs,
11435 const cp_declarator *declarator,
11436 tree attrs)
11438 tree decl1;
11440 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11441 /* If the declarator is not suitable for a function definition,
11442 cause a syntax error. */
11443 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11444 return 0;
11446 if (DECL_MAIN_P (decl1))
11447 /* main must return int. grokfndecl should have corrected it
11448 (and issued a diagnostic) if the user got it wrong. */
11449 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11450 integer_type_node));
11452 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
11454 return 1;
11457 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11458 FN. */
11460 static bool
11461 use_eh_spec_block (tree fn)
11463 return (flag_exceptions && flag_enforce_eh_specs
11464 && !processing_template_decl
11465 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11466 /* We insert the EH_SPEC_BLOCK only in the original
11467 function; then, it is copied automatically to the
11468 clones. */
11469 && !DECL_CLONED_FUNCTION_P (fn)
11470 /* Implicitly-generated constructors and destructors have
11471 exception specifications. However, those specifications
11472 are the union of the possible exceptions specified by the
11473 constructors/destructors for bases and members, so no
11474 unallowed exception will ever reach this function. By
11475 not creating the EH_SPEC_BLOCK we save a little memory,
11476 and we avoid spurious warnings about unreachable
11477 code. */
11478 && !DECL_ARTIFICIAL (fn));
11481 /* Store the parameter declarations into the current function declaration.
11482 This is called after parsing the parameter declarations, before
11483 digesting the body of the function.
11485 Also install to binding contour return value identifier, if any. */
11487 static void
11488 store_parm_decls (tree current_function_parms)
11490 tree fndecl = current_function_decl;
11491 tree parm;
11493 /* This is a chain of any other decls that came in among the parm
11494 declarations. If a parm is declared with enum {foo, bar} x;
11495 then CONST_DECLs for foo and bar are put here. */
11496 tree nonparms = NULL_TREE;
11498 if (current_function_parms)
11500 /* This case is when the function was defined with an ANSI prototype.
11501 The parms already have decls, so we need not do anything here
11502 except record them as in effect
11503 and complain if any redundant old-style parm decls were written. */
11505 tree specparms = current_function_parms;
11506 tree next;
11508 /* Must clear this because it might contain TYPE_DECLs declared
11509 at class level. */
11510 current_binding_level->names = NULL;
11512 /* If we're doing semantic analysis, then we'll call pushdecl
11513 for each of these. We must do them in reverse order so that
11514 they end in the correct forward order. */
11515 specparms = nreverse (specparms);
11517 for (parm = specparms; parm; parm = next)
11519 next = TREE_CHAIN (parm);
11520 if (TREE_CODE (parm) == PARM_DECL)
11522 if (DECL_NAME (parm) == NULL_TREE
11523 || TREE_CODE (parm) != VOID_TYPE)
11524 pushdecl (parm);
11525 else
11526 error ("parameter %qD declared void", parm);
11528 else
11530 /* If we find an enum constant or a type tag,
11531 put it aside for the moment. */
11532 TREE_CHAIN (parm) = NULL_TREE;
11533 nonparms = chainon (nonparms, parm);
11537 /* Get the decls in their original chain order and record in the
11538 function. This is all and only the PARM_DECLs that were
11539 pushed into scope by the loop above. */
11540 DECL_ARGUMENTS (fndecl) = getdecls ();
11542 else
11543 DECL_ARGUMENTS (fndecl) = NULL_TREE;
11545 /* Now store the final chain of decls for the arguments
11546 as the decl-chain of the current lexical scope.
11547 Put the enumerators in as well, at the front so that
11548 DECL_ARGUMENTS is not modified. */
11549 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
11551 if (use_eh_spec_block (current_function_decl))
11552 current_eh_spec_block = begin_eh_spec_block ();
11556 /* We have finished doing semantic analysis on DECL, but have not yet
11557 generated RTL for its body. Save away our current state, so that
11558 when we want to generate RTL later we know what to do. */
11560 static void
11561 save_function_data (tree decl)
11563 struct language_function *f;
11565 /* Save the language-specific per-function data so that we can
11566 get it back when we really expand this function. */
11567 gcc_assert (!DECL_PENDING_INLINE_P (decl));
11569 /* Make a copy. */
11570 f = GGC_NEW (struct language_function);
11571 memcpy (f, cp_function_chain, sizeof (struct language_function));
11572 DECL_SAVED_FUNCTION_DATA (decl) = f;
11574 /* Clear out the bits we don't need. */
11575 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
11576 f->bindings = NULL;
11577 f->x_local_names = NULL;
11581 /* Set the return value of the constructor (if present). */
11583 static void
11584 finish_constructor_body (void)
11586 tree val;
11587 tree exprstmt;
11589 if (targetm.cxx.cdtor_returns_this ())
11591 /* Any return from a constructor will end up here. */
11592 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11594 val = DECL_ARGUMENTS (current_function_decl);
11595 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11596 DECL_RESULT (current_function_decl), val);
11597 /* Return the address of the object. */
11598 exprstmt = build_stmt (RETURN_EXPR, val);
11599 add_stmt (exprstmt);
11603 /* Do all the processing for the beginning of a destructor; set up the
11604 vtable pointers and cleanups for bases and members. */
11606 static void
11607 begin_destructor_body (void)
11609 tree compound_stmt;
11611 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11612 issued an error message. We still want to try to process the
11613 body of the function, but initialize_vtbl_ptrs will crash if
11614 TYPE_BINFO is NULL. */
11615 if (COMPLETE_TYPE_P (current_class_type))
11617 compound_stmt = begin_compound_stmt (0);
11618 /* Make all virtual function table pointers in non-virtual base
11619 classes point to CURRENT_CLASS_TYPE's virtual function
11620 tables. */
11621 initialize_vtbl_ptrs (current_class_ptr);
11622 finish_compound_stmt (compound_stmt);
11624 /* And insert cleanups for our bases and members so that they
11625 will be properly destroyed if we throw. */
11626 push_base_cleanups ();
11630 /* At the end of every destructor we generate code to delete the object if
11631 necessary. Do that now. */
11633 static void
11634 finish_destructor_body (void)
11636 tree exprstmt;
11638 /* Any return from a destructor will end up here; that way all base
11639 and member cleanups will be run when the function returns. */
11640 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11642 /* In a virtual destructor, we must call delete. */
11643 if (DECL_VIRTUAL_P (current_function_decl))
11645 tree if_stmt;
11646 tree virtual_size = cxx_sizeof (current_class_type);
11648 /* [class.dtor]
11650 At the point of definition of a virtual destructor (including
11651 an implicit definition), non-placement operator delete shall
11652 be looked up in the scope of the destructor's class and if
11653 found shall be accessible and unambiguous. */
11654 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
11655 virtual_size,
11656 /*global_p=*/false,
11657 /*placement=*/NULL_TREE,
11658 /*alloc_fn=*/NULL_TREE);
11660 if_stmt = begin_if_stmt ();
11661 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11662 current_in_charge_parm,
11663 integer_one_node),
11664 if_stmt);
11665 finish_expr_stmt (exprstmt);
11666 finish_then_clause (if_stmt);
11667 finish_if_stmt (if_stmt);
11670 if (targetm.cxx.cdtor_returns_this ())
11672 tree val;
11674 val = DECL_ARGUMENTS (current_function_decl);
11675 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11676 DECL_RESULT (current_function_decl), val);
11677 /* Return the address of the object. */
11678 exprstmt = build_stmt (RETURN_EXPR, val);
11679 add_stmt (exprstmt);
11683 /* Do the necessary processing for the beginning of a function body, which
11684 in this case includes member-initializers, but not the catch clauses of
11685 a function-try-block. Currently, this means opening a binding level
11686 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
11688 tree
11689 begin_function_body (void)
11691 tree stmt;
11693 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11694 return NULL_TREE;
11696 if (processing_template_decl)
11697 /* Do nothing now. */;
11698 else
11699 /* Always keep the BLOCK node associated with the outermost pair of
11700 curly braces of a function. These are needed for correct
11701 operation of dwarfout.c. */
11702 keep_next_level (true);
11704 stmt = begin_compound_stmt (BCS_FN_BODY);
11706 if (processing_template_decl)
11707 /* Do nothing now. */;
11708 else if (DECL_DESTRUCTOR_P (current_function_decl))
11709 begin_destructor_body ();
11711 return stmt;
11714 /* Do the processing for the end of a function body. Currently, this means
11715 closing out the cleanups for fully-constructed bases and members, and in
11716 the case of the destructor, deleting the object if desired. Again, this
11717 is only meaningful for [cd]tors, since they are the only functions where
11718 there is a significant distinction between the main body and any
11719 function catch clauses. Handling, say, main() return semantics here
11720 would be wrong, as flowing off the end of a function catch clause for
11721 main() would also need to return 0. */
11723 void
11724 finish_function_body (tree compstmt)
11726 if (compstmt == NULL_TREE)
11727 return;
11729 /* Close the block. */
11730 finish_compound_stmt (compstmt);
11732 if (processing_template_decl)
11733 /* Do nothing now. */;
11734 else if (DECL_CONSTRUCTOR_P (current_function_decl))
11735 finish_constructor_body ();
11736 else if (DECL_DESTRUCTOR_P (current_function_decl))
11737 finish_destructor_body ();
11740 /* Given a function, returns the BLOCK corresponding to the outermost level
11741 of curly braces, skipping the artificial block created for constructor
11742 initializers. */
11744 static tree
11745 outer_curly_brace_block (tree fndecl)
11747 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11748 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11749 /* Skip the artificial function body block. */
11750 block = BLOCK_SUBBLOCKS (block);
11751 return block;
11754 /* Finish up a function declaration and compile that function
11755 all the way to assembler language output. The free the storage
11756 for the function definition.
11758 FLAGS is a bitwise or of the following values:
11759 2 - INCLASS_INLINE
11760 We just finished processing the body of an in-class inline
11761 function definition. (This processing will have taken place
11762 after the class definition is complete.) */
11764 tree
11765 finish_function (int flags)
11767 tree fndecl = current_function_decl;
11768 tree fntype, ctype = NULL_TREE;
11769 int inclass_inline = (flags & 2) != 0;
11770 int nested;
11772 /* When we get some parse errors, we can end up without a
11773 current_function_decl, so cope. */
11774 if (fndecl == NULL_TREE)
11775 return error_mark_node;
11777 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11778 && DECL_VIRTUAL_P (fndecl)
11779 && !processing_template_decl)
11781 tree fnclass = DECL_CONTEXT (fndecl);
11782 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11783 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11786 nested = function_depth > 1;
11787 fntype = TREE_TYPE (fndecl);
11789 /* TREE_READONLY (fndecl) = 1;
11790 This caused &foo to be of type ptr-to-const-function
11791 which then got a warning when stored in a ptr-to-function variable. */
11793 gcc_assert (building_stmt_tree ());
11794 /* The current function is being defined, so its DECL_INITIAL should
11795 be set, and unless there's a multiple definition, it should be
11796 error_mark_node. */
11797 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
11799 /* For a cloned function, we've already got all the code we need;
11800 there's no need to add any extra bits. */
11801 if (!DECL_CLONED_FUNCTION_P (fndecl))
11803 if (DECL_MAIN_P (current_function_decl))
11805 tree stmt;
11807 /* Make it so that `main' always returns 0 by default (or
11808 1 for VMS). */
11809 #if VMS_TARGET
11810 stmt = finish_return_stmt (integer_one_node);
11811 #else
11812 stmt = finish_return_stmt (integer_zero_node);
11813 #endif
11814 /* Hack. We don't want the middle-end to warn that this
11815 return is unreachable, so put the statement on the
11816 special line 0. */
11818 location_t linezero = linemap_line_start (line_table, 0, 1);
11819 SET_EXPR_LOCATION (stmt, linezero);
11823 if (use_eh_spec_block (current_function_decl))
11824 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11825 (TREE_TYPE (current_function_decl)),
11826 current_eh_spec_block);
11829 /* If we're saving up tree structure, tie off the function now. */
11830 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11832 finish_fname_decls ();
11834 /* If this function can't throw any exceptions, remember that. */
11835 if (!processing_template_decl
11836 && !cp_function_chain->can_throw
11837 && !flag_non_call_exceptions
11838 && !DECL_REPLACEABLE_P (fndecl))
11839 TREE_NOTHROW (fndecl) = 1;
11841 /* This must come after expand_function_end because cleanups might
11842 have declarations (from inline functions) that need to go into
11843 this function's blocks. */
11845 /* If the current binding level isn't the outermost binding level
11846 for this function, either there is a bug, or we have experienced
11847 syntax errors and the statement tree is malformed. */
11848 if (current_binding_level->kind != sk_function_parms)
11850 /* Make sure we have already experienced errors. */
11851 gcc_assert (errorcount);
11853 /* Throw away the broken statement tree and extra binding
11854 levels. */
11855 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11857 while (current_binding_level->kind != sk_function_parms)
11859 if (current_binding_level->kind == sk_class)
11860 pop_nested_class ();
11861 else
11862 poplevel (0, 0, 0);
11865 poplevel (1, 0, 1);
11867 /* Statements should always be full-expressions at the outermost set
11868 of curly braces for a function. */
11869 gcc_assert (stmts_are_full_exprs_p ());
11871 /* Set up the named return value optimization, if we can. Candidate
11872 variables are selected in check_return_expr. */
11873 if (current_function_return_value)
11875 tree r = current_function_return_value;
11876 tree outer;
11878 if (r != error_mark_node
11879 /* This is only worth doing for fns that return in memory--and
11880 simpler, since we don't have to worry about promoted modes. */
11881 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11882 /* Only allow this for variables declared in the outer scope of
11883 the function so we know that their lifetime always ends with a
11884 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11885 we were to do this optimization in tree-ssa. */
11886 && (outer = outer_curly_brace_block (fndecl))
11887 && chain_member (r, BLOCK_VARS (outer)))
11888 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11890 current_function_return_value = NULL_TREE;
11893 /* Remember that we were in class scope. */
11894 if (current_class_name)
11895 ctype = current_class_type;
11897 /* Must mark the RESULT_DECL as being in this function. */
11898 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11900 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11901 to the FUNCTION_DECL node itself. */
11902 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11904 /* Save away current state, if appropriate. */
11905 if (!processing_template_decl)
11906 save_function_data (fndecl);
11908 /* Complain if there's just no return statement. */
11909 if (warn_return_type
11910 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11911 && !dependent_type_p (TREE_TYPE (fntype))
11912 && !current_function_returns_value && !current_function_returns_null
11913 /* Don't complain if we abort or throw. */
11914 && !current_function_returns_abnormally
11915 && !DECL_NAME (DECL_RESULT (fndecl))
11916 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
11917 inline function, as we might never be compiled separately. */
11918 && (DECL_INLINE (fndecl) || processing_template_decl)
11919 /* Structor return values (if any) are set by the compiler. */
11920 && !DECL_CONSTRUCTOR_P (fndecl)
11921 && !DECL_DESTRUCTOR_P (fndecl))
11922 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11924 /* Store the end of the function, so that we get good line number
11925 info for the epilogue. */
11926 cfun->function_end_locus = input_location;
11928 /* Genericize before inlining. */
11929 if (!processing_template_decl)
11931 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11932 cp_genericize (fndecl);
11933 /* Clear out the bits we don't need. */
11934 f->x_current_class_ptr = NULL;
11935 f->x_current_class_ref = NULL;
11936 f->x_eh_spec_block = NULL;
11937 f->x_in_charge_parm = NULL;
11938 f->x_vtt_parm = NULL;
11939 f->x_return_value = NULL;
11940 f->bindings = NULL;
11941 f->extern_decl_map = NULL;
11943 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11944 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11946 /* Clear out the bits we don't need. */
11947 local_names = NULL;
11949 /* We're leaving the context of this function, so zap cfun. It's still in
11950 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
11951 set_cfun (NULL);
11952 current_function_decl = NULL;
11954 /* If this is an in-class inline definition, we may have to pop the
11955 bindings for the template parameters that we added in
11956 maybe_begin_member_template_processing when start_function was
11957 called. */
11958 if (inclass_inline)
11959 maybe_end_member_template_processing ();
11961 /* Leave the scope of the class. */
11962 if (ctype)
11963 pop_nested_class ();
11965 --function_depth;
11967 /* Clean up. */
11968 if (! nested)
11969 /* Let the error reporting routines know that we're outside a
11970 function. For a nested function, this value is used in
11971 cxx_pop_function_context and then reset via pop_function_context. */
11972 current_function_decl = NULL_TREE;
11974 return fndecl;
11977 /* Create the FUNCTION_DECL for a function definition.
11978 DECLSPECS and DECLARATOR are the parts of the declaration;
11979 they describe the return type and the name of the function,
11980 but twisted together in a fashion that parallels the syntax of C.
11982 This function creates a binding context for the function body
11983 as well as setting up the FUNCTION_DECL in current_function_decl.
11985 Returns a FUNCTION_DECL on success.
11987 If the DECLARATOR is not suitable for a function (it defines a datum
11988 instead), we return 0, which tells yyparse to report a parse error.
11990 May return void_type_node indicating that this method is actually
11991 a friend. See grokfield for more details.
11993 Came here with a `.pushlevel' .
11995 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11996 CHANGES TO CODE IN `grokfield'. */
11998 tree
11999 start_method (cp_decl_specifier_seq *declspecs,
12000 const cp_declarator *declarator, tree attrlist)
12002 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12003 &attrlist);
12005 if (fndecl == error_mark_node)
12006 return error_mark_node;
12008 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12010 error ("invalid member function declaration");
12011 return error_mark_node;
12014 if (attrlist)
12015 cplus_decl_attributes (&fndecl, attrlist, 0);
12017 /* Pass friends other than inline friend functions back. */
12018 if (fndecl == void_type_node)
12019 return fndecl;
12021 if (DECL_IN_AGGR_P (fndecl))
12023 if (DECL_CONTEXT (fndecl)
12024 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12025 error ("%qD is already defined in class %qT", fndecl,
12026 DECL_CONTEXT (fndecl));
12027 return error_mark_node;
12030 check_template_shadow (fndecl);
12032 DECL_DECLARED_INLINE_P (fndecl) = 1;
12033 if (flag_default_inline)
12034 DECL_INLINE (fndecl) = 1;
12036 /* We process method specializations in finish_struct_1. */
12037 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12039 fndecl = push_template_decl (fndecl);
12040 if (fndecl == error_mark_node)
12041 return fndecl;
12044 if (! DECL_FRIEND_P (fndecl))
12046 if (TREE_CHAIN (fndecl))
12048 fndecl = copy_node (fndecl);
12049 TREE_CHAIN (fndecl) = NULL_TREE;
12053 finish_decl (fndecl, NULL_TREE, NULL_TREE);
12055 /* Make a place for the parms. */
12056 begin_scope (sk_function_parms, fndecl);
12058 DECL_IN_AGGR_P (fndecl) = 1;
12059 return fndecl;
12062 /* Go through the motions of finishing a function definition.
12063 We don't compile this method until after the whole class has
12064 been processed.
12066 FINISH_METHOD must return something that looks as though it
12067 came from GROKFIELD (since we are defining a method, after all).
12069 This is called after parsing the body of the function definition.
12070 STMTS is the chain of statements that makes up the function body.
12072 DECL is the ..._DECL that `start_method' provided. */
12074 tree
12075 finish_method (tree decl)
12077 tree fndecl = decl;
12078 tree old_initial;
12080 tree link;
12082 if (decl == void_type_node)
12083 return decl;
12085 old_initial = DECL_INITIAL (fndecl);
12087 /* Undo the level for the parms (from start_method).
12088 This is like poplevel, but it causes nothing to be
12089 saved. Saving information here confuses symbol-table
12090 output routines. Besides, this information will
12091 be correctly output when this method is actually
12092 compiled. */
12094 /* Clear out the meanings of the local variables of this level;
12095 also record in each decl which block it belongs to. */
12097 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12099 if (DECL_NAME (link) != NULL_TREE)
12100 pop_binding (DECL_NAME (link), link);
12101 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
12102 DECL_CONTEXT (link) = NULL_TREE;
12105 poplevel (0, 0, 0);
12107 DECL_INITIAL (fndecl) = old_initial;
12109 /* We used to check if the context of FNDECL was different from
12110 current_class_type as another way to get inside here. This didn't work
12111 for String.cc in libg++. */
12112 if (DECL_FRIEND_P (fndecl))
12114 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
12115 fndecl);
12116 decl = void_type_node;
12119 return decl;
12123 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
12124 we can lay it out later, when and if its type becomes complete. */
12126 void
12127 maybe_register_incomplete_var (tree var)
12129 gcc_assert (TREE_CODE (var) == VAR_DECL);
12131 /* Keep track of variables with incomplete types. */
12132 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12133 && DECL_EXTERNAL (var))
12135 tree inner_type = TREE_TYPE (var);
12137 while (TREE_CODE (inner_type) == ARRAY_TYPE)
12138 inner_type = TREE_TYPE (inner_type);
12139 inner_type = TYPE_MAIN_VARIANT (inner_type);
12141 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12142 /* RTTI TD entries are created while defining the type_info. */
12143 || (TYPE_LANG_SPECIFIC (inner_type)
12144 && TYPE_BEING_DEFINED (inner_type)))
12145 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12149 /* Called when a class type (given by TYPE) is defined. If there are
12150 any existing VAR_DECLs whose type hsa been completed by this
12151 declaration, update them now. */
12153 void
12154 complete_vars (tree type)
12156 tree *list = &incomplete_vars;
12158 gcc_assert (CLASS_TYPE_P (type));
12159 while (*list)
12161 if (same_type_p (type, TREE_PURPOSE (*list)))
12163 tree var = TREE_VALUE (*list);
12164 tree type = TREE_TYPE (var);
12165 /* Complete the type of the variable. The VAR_DECL itself
12166 will be laid out in expand_expr. */
12167 complete_type (type);
12168 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12169 /* Remove this entry from the list. */
12170 *list = TREE_CHAIN (*list);
12172 else
12173 list = &TREE_CHAIN (*list);
12176 /* Check for pending declarations which may have abstract type. */
12177 complete_type_check_abstract (type);
12180 /* If DECL is of a type which needs a cleanup, build and return an
12181 expression to perform that cleanup here. Return NULL_TREE if no
12182 cleanup need be done. */
12184 tree
12185 cxx_maybe_build_cleanup (tree decl)
12187 tree type;
12188 tree attr;
12189 tree cleanup;
12191 /* Assume no cleanup is required. */
12192 cleanup = NULL_TREE;
12194 if (error_operand_p (decl))
12195 return cleanup;
12197 /* Handle "__attribute__((cleanup))". We run the cleanup function
12198 before the destructor since the destructor is what actually
12199 terminates the lifetime of the object. */
12200 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12201 if (attr)
12203 tree id;
12204 tree fn;
12205 tree arg;
12207 /* Get the name specified by the user for the cleanup function. */
12208 id = TREE_VALUE (TREE_VALUE (attr));
12209 /* Look up the name to find the cleanup function to call. It is
12210 important to use lookup_name here because that is what is
12211 used in c-common.c:handle_cleanup_attribute when performing
12212 initial checks on the attribute. Note that those checks
12213 include ensuring that the function found is not an overloaded
12214 function, or an object with an overloaded call operator,
12215 etc.; we can rely on the fact that the functionfound is an
12216 ordinary FUNCTION_DECL. */
12217 fn = lookup_name (id);
12218 arg = build_address (decl);
12219 mark_used (decl);
12220 cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12221 arg),
12222 tf_warning_or_error);
12224 /* Handle ordinary C++ destructors. */
12225 type = TREE_TYPE (decl);
12226 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12228 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12229 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12230 && CLASSTYPE_VBASECLASSES (type));
12231 tree addr;
12232 tree call;
12234 if (TREE_CODE (type) == ARRAY_TYPE)
12235 addr = decl;
12236 else
12237 addr = build_address (decl);
12239 /* Optimize for space over speed here. */
12240 if (!has_vbases || flag_expensive_optimizations)
12241 flags |= LOOKUP_NONVIRTUAL;
12243 call = build_delete (TREE_TYPE (addr), addr,
12244 sfk_complete_destructor, flags, 0);
12245 if (cleanup)
12246 cleanup = build_compound_expr (cleanup, call);
12247 else
12248 cleanup = call;
12251 return cleanup;
12254 /* When a stmt has been parsed, this function is called. */
12256 void
12257 finish_stmt (void)
12261 /* DECL was originally constructed as a non-static member function,
12262 but turned out to be static. Update it accordingly. */
12264 void
12265 revert_static_member_fn (tree decl)
12267 tree tmp;
12268 tree function = TREE_TYPE (decl);
12269 tree args = TYPE_ARG_TYPES (function);
12271 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
12272 != TYPE_UNQUALIFIED)
12273 error ("static member function %q#D declared with type qualifiers", decl);
12275 args = TREE_CHAIN (args);
12276 tmp = build_function_type (TREE_TYPE (function), args);
12277 tmp = build_qualified_type (tmp, cp_type_quals (function));
12278 tmp = build_exception_variant (tmp,
12279 TYPE_RAISES_EXCEPTIONS (function));
12280 TREE_TYPE (decl) = tmp;
12281 if (DECL_ARGUMENTS (decl))
12282 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12283 DECL_STATIC_FUNCTION_P (decl) = 1;
12286 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12287 one of the language-independent trees. */
12289 enum cp_tree_node_structure_enum
12290 cp_tree_node_structure (union lang_tree_node * t)
12292 switch (TREE_CODE (&t->generic))
12294 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
12295 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
12296 case OVERLOAD: return TS_CP_OVERLOAD;
12297 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
12298 case PTRMEM_CST: return TS_CP_PTRMEM;
12299 case BASELINK: return TS_CP_BASELINK;
12300 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
12301 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
12302 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
12303 default: return TS_CP_GENERIC;
12307 /* Build the void_list_node (void_type_node having been created). */
12308 tree
12309 build_void_list_node (void)
12311 tree t = build_tree_list (NULL_TREE, void_type_node);
12312 return t;
12315 bool
12316 cp_missing_noreturn_ok_p (tree decl)
12318 /* A missing noreturn is ok for the `main' function. */
12319 return DECL_MAIN_P (decl);
12322 /* Return the COMDAT group into which DECL should be placed. */
12324 const char *
12325 cxx_comdat_group (tree decl)
12327 tree name;
12329 /* Virtual tables, construction virtual tables, and virtual table
12330 tables all go in a single COMDAT group, named after the primary
12331 virtual table. */
12332 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12333 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12334 /* For all other DECLs, the COMDAT group is the mangled name of the
12335 declaration itself. */
12336 else
12338 while (DECL_THUNK_P (decl))
12340 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12341 into the same section as the target function. In that case
12342 we must return target's name. */
12343 tree target = THUNK_TARGET (decl);
12344 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12345 && DECL_SECTION_NAME (target) != NULL
12346 && DECL_ONE_ONLY (target))
12347 decl = target;
12348 else
12349 break;
12351 name = DECL_ASSEMBLER_NAME (decl);
12354 return IDENTIFIER_POINTER (name);
12357 #include "gt-cp-decl.h"