PR c++/27102
[official-gcc.git] / gcc / cp / decl.c
blob9e101c15eab84a125383a885f91bce0dd1df5eb6
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
24 /* Process declarations and symbol lookup for C++ front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "hashtab.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "tree-flow.h"
55 static tree grokparms (cp_parameter_declarator *, tree *);
56 static const char *redeclaration_error_message (tree, tree);
58 static int decl_jump_unsafe (tree);
59 static void require_complete_types_for_parms (tree);
60 static int ambi_op_p (enum tree_code);
61 static int unary_op_p (enum tree_code);
62 static void push_local_name (tree);
63 static tree grok_reference_init (tree, tree, tree, tree *);
64 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
65 int, int, tree);
66 static void record_unknown_type (tree, const char *);
67 static tree builtin_function_1 (const char *, tree, tree,
68 enum built_in_function code,
69 enum built_in_class cl, const char *,
70 tree);
71 static tree build_library_fn_1 (tree, enum tree_code, tree);
72 static int member_function_or_else (tree, tree, enum overload_flags);
73 static void bad_specifiers (tree, const char *, int, int, int, int,
74 int);
75 static void check_for_uninitialized_const_var (tree);
76 static hashval_t typename_hash (const void *);
77 static int typename_compare (const void *, const void *);
78 static tree local_variable_p_walkfn (tree *, int *, void *);
79 static tree record_builtin_java_type (const char *, int);
80 static const char *tag_name (enum tag_types);
81 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
82 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
83 static void maybe_deduce_size_from_array_init (tree, tree);
84 static void layout_var_decl (tree);
85 static void maybe_commonize_var (tree);
86 static tree check_initializer (tree, tree, int, tree *);
87 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
88 static void save_function_data (tree);
89 static void check_function_type (tree, tree);
90 static void finish_constructor_body (void);
91 static void begin_destructor_body (void);
92 static void finish_destructor_body (void);
93 static tree create_array_type_for_decl (tree, tree, tree);
94 static tree get_atexit_node (void);
95 static tree get_dso_handle_node (void);
96 static tree start_cleanup_fn (void);
97 static void end_cleanup_fn (void);
98 static tree cp_make_fname_decl (tree, int);
99 static void initialize_predefined_identifiers (void);
100 static tree check_special_function_return_type
101 (special_function_kind, tree, tree);
102 static tree push_cp_library_fn (enum tree_code, tree);
103 static tree build_cp_library_fn (tree, enum tree_code, tree);
104 static void store_parm_decls (tree);
105 static void initialize_local_var (tree, tree);
106 static void expand_static_init (tree, tree);
107 static tree next_initializable_field (tree);
109 /* Erroneous argument lists can use this *IFF* they do not modify it. */
110 tree error_mark_list;
112 /* The following symbols are subsumed in the cp_global_trees array, and
113 listed here individually for documentation purposes.
115 C++ extensions
116 tree wchar_decl_node;
118 tree vtable_entry_type;
119 tree delta_type_node;
120 tree __t_desc_type_node;
122 tree class_type_node;
123 tree unknown_type_node;
125 Array type `vtable_entry_type[]'
127 tree vtbl_type_node;
128 tree vtbl_ptr_type_node;
130 Namespaces,
132 tree std_node;
133 tree abi_node;
135 A FUNCTION_DECL which can call `abort'. Not necessarily the
136 one that the user will declare, but sufficient to be called
137 by routines that want to abort the program.
139 tree abort_fndecl;
141 The FUNCTION_DECL for the default `::operator delete'.
143 tree global_delete_fndecl;
145 Used by RTTI
146 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
147 tree tinfo_var_id;
151 tree cp_global_trees[CPTI_MAX];
153 /* Indicates that there is a type value in some namespace, although
154 that is not necessarily in scope at the moment. */
156 tree global_type_node;
158 /* The node that holds the "name" of the global scope. */
159 tree global_scope_name;
161 #define local_names cp_function_chain->x_local_names
163 /* A list of objects which have constructors or destructors
164 which reside in the global scope. The decl is stored in
165 the TREE_VALUE slot and the initializer is stored
166 in the TREE_PURPOSE slot. */
167 tree static_aggregates;
169 /* -- end of C++ */
171 /* A node for the integer constants 2, and 3. */
173 tree integer_two_node, integer_three_node;
175 /* Used only for jumps to as-yet undefined labels, since jumps to
176 defined labels can have their validity checked immediately. */
178 struct named_label_use_entry GTY(())
180 struct named_label_use_entry *next;
181 /* The binding level to which this entry is *currently* attached.
182 This is initially the binding level in which the goto appeared,
183 but is modified as scopes are closed. */
184 struct cp_binding_level *binding_level;
185 /* The head of the names list that was current when the goto appeared,
186 or the inner scope popped. These are the decls that will *not* be
187 skipped when jumping to the label. */
188 tree names_in_scope;
189 /* The location of the goto, for error reporting. */
190 location_t o_goto_locus;
191 /* True if an OpenMP structured block scope has been closed since
192 the goto appeared. This means that the branch from the label will
193 illegally exit an OpenMP scope. */
194 bool in_omp_scope;
197 /* A list of all LABEL_DECLs in the function that have names. Here so
198 we can clear out their names' definitions at the end of the
199 function, and so we can check the validity of jumps to these labels. */
201 struct named_label_entry GTY(())
203 /* The decl itself. */
204 tree label_decl;
206 /* The binding level to which the label is *currently* attached.
207 This is initially set to the binding level in which the label
208 is defined, but is modified as scopes are closed. */
209 struct cp_binding_level *binding_level;
210 /* The head of the names list that was current when the label was
211 defined, or the inner scope popped. These are the decls that will
212 be skipped when jumping to the label. */
213 tree names_in_scope;
214 /* A tree list of all decls from all binding levels that would be
215 crossed by a backward branch to the label. */
216 tree bad_decls;
218 /* A list of uses of the label, before the label is defined. */
219 struct named_label_use_entry *uses;
221 /* The following bits are set after the label is defined, and are
222 updated as scopes are popped. They indicate that a backward jump
223 to the label will illegally enter a scope of the given flavour. */
224 bool in_try_scope;
225 bool in_catch_scope;
226 bool in_omp_scope;
229 #define named_labels cp_function_chain->x_named_labels
231 /* The number of function bodies which we are currently processing.
232 (Zero if we are at namespace scope, one inside the body of a
233 function, two inside the body of a function in a local class, etc.) */
234 int function_depth;
236 /* States indicating how grokdeclarator() should handle declspecs marked
237 with __attribute__((deprecated)). An object declared as
238 __attribute__((deprecated)) suppresses warnings of uses of other
239 deprecated items. */
241 enum deprecated_states {
242 DEPRECATED_NORMAL,
243 DEPRECATED_SUPPRESS
246 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248 /* True if a declaration with an `extern' linkage specifier is being
249 processed. */
250 bool have_extern_spec;
253 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
254 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
255 time the VAR_DECL was declared, the type was incomplete. */
257 static GTY(()) tree incomplete_vars;
259 /* Returns the kind of template specialization we are currently
260 processing, given that it's declaration contained N_CLASS_SCOPES
261 explicit scope qualifications. */
263 tmpl_spec_kind
264 current_tmpl_spec_kind (int n_class_scopes)
266 int n_template_parm_scopes = 0;
267 int seen_specialization_p = 0;
268 int innermost_specialization_p = 0;
269 struct cp_binding_level *b;
271 /* Scan through the template parameter scopes. */
272 for (b = current_binding_level;
273 b->kind == sk_template_parms;
274 b = b->level_chain)
276 /* If we see a specialization scope inside a parameter scope,
277 then something is wrong. That corresponds to a declaration
278 like:
280 template <class T> template <> ...
282 which is always invalid since [temp.expl.spec] forbids the
283 specialization of a class member template if the enclosing
284 class templates are not explicitly specialized as well. */
285 if (b->explicit_spec_p)
287 if (n_template_parm_scopes == 0)
288 innermost_specialization_p = 1;
289 else
290 seen_specialization_p = 1;
292 else if (seen_specialization_p == 1)
293 return tsk_invalid_member_spec;
295 ++n_template_parm_scopes;
298 /* Handle explicit instantiations. */
299 if (processing_explicit_instantiation)
301 if (n_template_parm_scopes != 0)
302 /* We've seen a template parameter list during an explicit
303 instantiation. For example:
305 template <class T> template void f(int);
307 This is erroneous. */
308 return tsk_invalid_expl_inst;
309 else
310 return tsk_expl_inst;
313 if (n_template_parm_scopes < n_class_scopes)
314 /* We've not seen enough template headers to match all the
315 specialized classes present. For example:
317 template <class T> void R<T>::S<T>::f(int);
319 This is invalid; there needs to be one set of template
320 parameters for each class. */
321 return tsk_insufficient_parms;
322 else if (n_template_parm_scopes == n_class_scopes)
323 /* We're processing a non-template declaration (even though it may
324 be a member of a template class.) For example:
326 template <class T> void S<T>::f(int);
328 The `class T' maches the `S<T>', leaving no template headers
329 corresponding to the `f'. */
330 return tsk_none;
331 else if (n_template_parm_scopes > n_class_scopes + 1)
332 /* We've got too many template headers. For example:
334 template <> template <class T> void f (T);
336 There need to be more enclosing classes. */
337 return tsk_excessive_parms;
338 else
339 /* This must be a template. It's of the form:
341 template <class T> template <class U> void S<T>::f(U);
343 This is a specialization if the innermost level was a
344 specialization; otherwise it's just a definition of the
345 template. */
346 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
349 /* Exit the current scope. */
351 void
352 finish_scope (void)
354 poplevel (0, 0, 0);
357 /* When a label goes out of scope, check to see if that label was used
358 in a valid manner, and issue any appropriate warnings or errors. */
360 static void
361 pop_label (tree label, tree old_value)
363 if (!processing_template_decl)
365 if (DECL_INITIAL (label) == NULL_TREE)
367 location_t location;
369 error ("label %q+D used but not defined", label);
370 #ifdef USE_MAPPED_LOCATION
371 location = input_location; /* FIXME want (input_filename, (line)0) */
372 #else
373 location.file = input_filename;
374 location.line = 0;
375 #endif
376 /* Avoid crashing later. */
377 define_label (location, DECL_NAME (label));
379 else if (!TREE_USED (label))
380 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
383 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
386 /* At the end of a function, all labels declared within the function
387 go out of scope. BLOCK is the top-level block for the
388 function. */
390 static int
391 pop_labels_1 (void **slot, void *data)
393 struct named_label_entry *ent = (struct named_label_entry *) *slot;
394 tree block = (tree) data;
396 pop_label (ent->label_decl, NULL_TREE);
398 /* Put the labels into the "variables" of the top-level block,
399 so debugger can see them. */
400 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
401 BLOCK_VARS (block) = ent->label_decl;
403 htab_clear_slot (named_labels, slot);
405 return 1;
408 static void
409 pop_labels (tree block)
411 if (named_labels)
413 htab_traverse (named_labels, pop_labels_1, block);
414 named_labels = NULL;
418 /* At the end of a block with local labels, restore the outer definition. */
420 static void
421 pop_local_label (tree label, tree old_value)
423 struct named_label_entry dummy;
424 void **slot;
426 pop_label (label, old_value);
428 dummy.label_decl = label;
429 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
430 htab_clear_slot (named_labels, slot);
433 /* The following two routines are used to interface to Objective-C++.
434 The binding level is purposely treated as an opaque type. */
436 void *
437 objc_get_current_scope (void)
439 return current_binding_level;
442 /* The following routine is used by the NeXT-style SJLJ exceptions;
443 variables get marked 'volatile' so as to not be clobbered by
444 _setjmp()/_longjmp() calls. All variables in the current scope,
445 as well as parent scopes up to (but not including) ENCLOSING_BLK
446 shall be thusly marked. */
448 void
449 objc_mark_locals_volatile (void *enclosing_blk)
451 struct cp_binding_level *scope;
453 for (scope = current_binding_level;
454 scope && scope != enclosing_blk;
455 scope = scope->level_chain)
457 tree decl;
459 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
460 objc_volatilize_decl (decl);
462 /* Do not climb up past the current function. */
463 if (scope->kind == sk_function_parms)
464 break;
468 /* Update data for defined and undefined labels when leaving a scope. */
470 static int
471 poplevel_named_label_1 (void **slot, void *data)
473 struct named_label_entry *ent = (struct named_label_entry *) *slot;
474 struct cp_binding_level *bl = (struct cp_binding_level *) data;
475 struct cp_binding_level *obl = bl->level_chain;
477 if (ent->binding_level == bl)
479 tree decl;
481 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
482 if (decl_jump_unsafe (decl))
483 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
485 ent->binding_level = obl;
486 ent->names_in_scope = obl->names;
487 switch (bl->kind)
489 case sk_try:
490 ent->in_try_scope = true;
491 break;
492 case sk_catch:
493 ent->in_catch_scope = true;
494 break;
495 case sk_omp:
496 ent->in_omp_scope = true;
497 break;
498 default:
499 break;
502 else if (ent->uses)
504 struct named_label_use_entry *use;
506 for (use = ent->uses; use ; use = use->next)
507 if (use->binding_level == bl)
509 use->binding_level = obl;
510 use->names_in_scope = obl->names;
511 if (bl->kind == sk_omp)
512 use->in_omp_scope = true;
516 return 1;
519 /* Exit a binding level.
520 Pop the level off, and restore the state of the identifier-decl mappings
521 that were in effect when this level was entered.
523 If KEEP == 1, this level had explicit declarations, so
524 and create a "block" (a BLOCK node) for the level
525 to record its declarations and subblocks for symbol table output.
527 If FUNCTIONBODY is nonzero, this level is the body of a function,
528 so create a block as if KEEP were set and also clear out all
529 label names.
531 If REVERSE is nonzero, reverse the order of decls before putting
532 them into the BLOCK. */
534 tree
535 poplevel (int keep, int reverse, int functionbody)
537 tree link;
538 /* The chain of decls was accumulated in reverse order.
539 Put it into forward order, just for cleanliness. */
540 tree decls;
541 int tmp = functionbody;
542 int real_functionbody;
543 tree subblocks;
544 tree block;
545 tree decl;
546 int leaving_for_scope;
547 scope_kind kind;
549 timevar_push (TV_NAME_LOOKUP);
550 restart:
552 block = NULL_TREE;
554 gcc_assert (current_binding_level->kind != sk_class);
556 real_functionbody = (current_binding_level->kind == sk_cleanup
557 ? ((functionbody = 0), tmp) : functionbody);
558 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
560 gcc_assert (!VEC_length(cp_class_binding,
561 current_binding_level->class_shadowed));
563 /* We used to use KEEP == 2 to indicate that the new block should go
564 at the beginning of the list of blocks at this binding level,
565 rather than the end. This hack is no longer used. */
566 gcc_assert (keep == 0 || keep == 1);
568 if (current_binding_level->keep)
569 keep = 1;
571 /* Any uses of undefined labels, and any defined labels, now operate
572 under constraints of next binding contour. */
573 if (cfun && !functionbody && named_labels)
574 htab_traverse (named_labels, poplevel_named_label_1,
575 current_binding_level);
577 /* Get the decls in the order they were written.
578 Usually current_binding_level->names is in reverse order.
579 But parameter decls were previously put in forward order. */
581 if (reverse)
582 current_binding_level->names
583 = decls = nreverse (current_binding_level->names);
584 else
585 decls = current_binding_level->names;
587 /* If there were any declarations or structure tags in that level,
588 or if this level is a function body,
589 create a BLOCK to record them for the life of this function. */
590 block = NULL_TREE;
591 if (keep == 1 || functionbody)
592 block = make_node (BLOCK);
593 if (block != NULL_TREE)
595 BLOCK_VARS (block) = decls;
596 BLOCK_SUBBLOCKS (block) = subblocks;
599 /* In each subblock, record that this is its superior. */
600 if (keep >= 0)
601 for (link = subblocks; link; link = TREE_CHAIN (link))
602 BLOCK_SUPERCONTEXT (link) = block;
604 /* We still support the old for-scope rules, whereby the variables
605 in a for-init statement were in scope after the for-statement
606 ended. We only use the new rules if flag_new_for_scope is
607 nonzero. */
608 leaving_for_scope
609 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
611 /* Before we remove the declarations first check for unused variables. */
612 if (warn_unused_variable
613 && !processing_template_decl)
614 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
615 if (TREE_CODE (decl) == VAR_DECL
616 && ! TREE_USED (decl)
617 && ! DECL_IN_SYSTEM_HEADER (decl)
618 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
619 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
621 /* Remove declarations for all the DECLs in this level. */
622 for (link = decls; link; link = TREE_CHAIN (link))
624 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
625 && DECL_NAME (link))
627 tree name = DECL_NAME (link);
628 cxx_binding *ob;
629 tree ns_binding;
631 ob = outer_binding (name,
632 IDENTIFIER_BINDING (name),
633 /*class_p=*/true);
634 if (!ob)
635 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
636 else
637 ns_binding = NULL_TREE;
639 if (ob && ob->scope == current_binding_level->level_chain)
640 /* We have something like:
642 int i;
643 for (int i; ;);
645 and we are leaving the `for' scope. There's no reason to
646 keep the binding of the inner `i' in this case. */
647 pop_binding (name, link);
648 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
649 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
650 /* Here, we have something like:
652 typedef int I;
654 void f () {
655 for (int I; ;);
658 We must pop the for-scope binding so we know what's a
659 type and what isn't. */
660 pop_binding (name, link);
661 else
663 /* Mark this VAR_DECL as dead so that we can tell we left it
664 there only for backward compatibility. */
665 DECL_DEAD_FOR_LOCAL (link) = 1;
667 /* Keep track of what should have happened when we
668 popped the binding. */
669 if (ob && ob->value)
671 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
672 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
675 /* Add it to the list of dead variables in the next
676 outermost binding to that we can remove these when we
677 leave that binding. */
678 current_binding_level->level_chain->dead_vars_from_for
679 = tree_cons (NULL_TREE, link,
680 current_binding_level->level_chain->
681 dead_vars_from_for);
683 /* Although we don't pop the cxx_binding, we do clear
684 its SCOPE since the scope is going away now. */
685 IDENTIFIER_BINDING (name)->scope
686 = current_binding_level->level_chain;
689 else
691 tree name;
693 /* Remove the binding. */
694 decl = link;
696 if (TREE_CODE (decl) == TREE_LIST)
697 decl = TREE_VALUE (decl);
698 name = decl;
700 if (TREE_CODE (name) == OVERLOAD)
701 name = OVL_FUNCTION (name);
703 gcc_assert (DECL_P (name));
704 pop_binding (DECL_NAME (name), decl);
708 /* Remove declarations for any `for' variables from inner scopes
709 that we kept around. */
710 for (link = current_binding_level->dead_vars_from_for;
711 link; link = TREE_CHAIN (link))
712 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
714 /* Restore the IDENTIFIER_TYPE_VALUEs. */
715 for (link = current_binding_level->type_shadowed;
716 link; link = TREE_CHAIN (link))
717 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
719 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
720 for (link = current_binding_level->shadowed_labels;
721 link;
722 link = TREE_CHAIN (link))
723 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
725 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
726 list if a `using' declaration put them there. The debugging
727 back-ends won't understand OVERLOAD, so we remove them here.
728 Because the BLOCK_VARS are (temporarily) shared with
729 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
730 popped all the bindings. */
731 if (block)
733 tree* d;
735 for (d = &BLOCK_VARS (block); *d; )
737 if (TREE_CODE (*d) == TREE_LIST)
738 *d = TREE_CHAIN (*d);
739 else
740 d = &TREE_CHAIN (*d);
744 /* If the level being exited is the top level of a function,
745 check over all the labels. */
746 if (functionbody)
748 /* Since this is the top level block of a function, the vars are
749 the function's parameters. Don't leave them in the BLOCK
750 because they are found in the FUNCTION_DECL instead. */
751 BLOCK_VARS (block) = 0;
752 pop_labels (block);
755 kind = current_binding_level->kind;
756 if (kind == sk_cleanup)
758 tree stmt;
760 /* If this is a temporary binding created for a cleanup, then we'll
761 have pushed a statement list level. Pop that, create a new
762 BIND_EXPR for the block, and insert it into the stream. */
763 stmt = pop_stmt_list (current_binding_level->statement_list);
764 stmt = c_build_bind_expr (block, stmt);
765 add_stmt (stmt);
768 leave_scope ();
769 if (functionbody)
770 DECL_INITIAL (current_function_decl) = block;
771 else if (block)
772 current_binding_level->blocks
773 = chainon (current_binding_level->blocks, block);
775 /* If we did not make a block for the level just exited,
776 any blocks made for inner levels
777 (since they cannot be recorded as subblocks in that level)
778 must be carried forward so they will later become subblocks
779 of something else. */
780 else if (subblocks)
781 current_binding_level->blocks
782 = chainon (current_binding_level->blocks, subblocks);
784 /* Each and every BLOCK node created here in `poplevel' is important
785 (e.g. for proper debugging information) so if we created one
786 earlier, mark it as "used". */
787 if (block)
788 TREE_USED (block) = 1;
790 /* All temporary bindings created for cleanups are popped silently. */
791 if (kind == sk_cleanup)
792 goto restart;
794 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
797 /* Insert BLOCK at the end of the list of subblocks of the
798 current binding level. This is used when a BIND_EXPR is expanded,
799 to handle the BLOCK node inside the BIND_EXPR. */
801 void
802 insert_block (tree block)
804 TREE_USED (block) = 1;
805 current_binding_level->blocks
806 = chainon (current_binding_level->blocks, block);
809 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
810 itself, calling F for each. The DATA is passed to F as well. */
812 static int
813 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
815 int result = 0;
816 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
818 result |= (*f) (namespace, data);
820 for (; current; current = TREE_CHAIN (current))
821 result |= walk_namespaces_r (current, f, data);
823 return result;
826 /* Walk all the namespaces, calling F for each. The DATA is passed to
827 F as well. */
830 walk_namespaces (walk_namespaces_fn f, void* data)
832 return walk_namespaces_r (global_namespace, f, data);
835 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
836 DATA is non-NULL, this is the last time we will call
837 wrapup_global_declarations for this NAMESPACE. */
840 wrapup_globals_for_namespace (tree namespace, void* data)
842 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
843 VEC(tree,gc) *statics = level->static_decls;
844 tree *vec = VEC_address (tree, statics);
845 int len = VEC_length (tree, statics);
846 int last_time = (data != 0);
848 if (last_time)
850 check_global_declarations (vec, len);
851 emit_debug_global_declarations (vec, len);
852 return 0;
855 /* Write out any globals that need to be output. */
856 return wrapup_global_declarations (vec, len);
860 /* In C++, you don't have to write `struct S' to refer to `S'; you
861 can just use `S'. We accomplish this by creating a TYPE_DECL as
862 if the user had written `typedef struct S S'. Create and return
863 the TYPE_DECL for TYPE. */
865 tree
866 create_implicit_typedef (tree name, tree type)
868 tree decl;
870 decl = build_decl (TYPE_DECL, name, type);
871 DECL_ARTIFICIAL (decl) = 1;
872 /* There are other implicit type declarations, like the one *within*
873 a class that allows you to write `S::S'. We must distinguish
874 amongst these. */
875 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
876 TYPE_NAME (type) = decl;
878 return decl;
881 /* Remember a local name for name-mangling purposes. */
883 static void
884 push_local_name (tree decl)
886 size_t i, nelts;
887 tree t, name;
889 timevar_push (TV_NAME_LOOKUP);
891 name = DECL_NAME (decl);
893 nelts = VEC_length (tree, local_names);
894 for (i = 0; i < nelts; i++)
896 t = VEC_index (tree, local_names, i);
897 if (DECL_NAME (t) == name)
899 if (!DECL_LANG_SPECIFIC (decl))
900 retrofit_lang_decl (decl);
901 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
902 if (DECL_LANG_SPECIFIC (t))
903 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
904 else
905 DECL_DISCRIMINATOR (decl) = 1;
907 VEC_replace (tree, local_names, i, decl);
908 timevar_pop (TV_NAME_LOOKUP);
909 return;
913 VEC_safe_push (tree, gc, local_names, decl);
914 timevar_pop (TV_NAME_LOOKUP);
917 /* Subroutine of duplicate_decls: return truthvalue of whether
918 or not types of these decls match.
920 For C++, we must compare the parameter list so that `int' can match
921 `int&' in a parameter position, but `int&' is not confused with
922 `const int&'. */
925 decls_match (tree newdecl, tree olddecl)
927 int types_match;
929 if (newdecl == olddecl)
930 return 1;
932 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
933 /* If the two DECLs are not even the same kind of thing, we're not
934 interested in their types. */
935 return 0;
937 if (TREE_CODE (newdecl) == FUNCTION_DECL)
939 tree f1 = TREE_TYPE (newdecl);
940 tree f2 = TREE_TYPE (olddecl);
941 tree p1 = TYPE_ARG_TYPES (f1);
942 tree p2 = TYPE_ARG_TYPES (f2);
944 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
945 && ! (DECL_EXTERN_C_P (newdecl)
946 && DECL_EXTERN_C_P (olddecl)))
947 return 0;
949 if (TREE_CODE (f1) != TREE_CODE (f2))
950 return 0;
952 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
954 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
955 && (DECL_BUILT_IN (olddecl)
956 #ifndef NO_IMPLICIT_EXTERN_C
957 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
958 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
959 #endif
962 types_match = self_promoting_args_p (p1);
963 if (p1 == void_list_node)
964 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
966 #ifndef NO_IMPLICIT_EXTERN_C
967 else if (p1 == NULL_TREE
968 && (DECL_EXTERN_C_P (olddecl)
969 && DECL_IN_SYSTEM_HEADER (olddecl)
970 && !DECL_CLASS_SCOPE_P (olddecl))
971 && (DECL_EXTERN_C_P (newdecl)
972 && DECL_IN_SYSTEM_HEADER (newdecl)
973 && !DECL_CLASS_SCOPE_P (newdecl)))
975 types_match = self_promoting_args_p (p2);
976 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
978 #endif
979 else
980 types_match = compparms (p1, p2);
982 else
983 types_match = 0;
985 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
987 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
988 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
989 return 0;
991 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
992 DECL_TEMPLATE_PARMS (olddecl)))
993 return 0;
995 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
996 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
997 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
998 else
999 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1000 DECL_TEMPLATE_RESULT (newdecl));
1002 else
1004 /* Need to check scope for variable declaration (VAR_DECL).
1005 For typedef (TYPE_DECL), scope is ignored. */
1006 if (TREE_CODE (newdecl) == VAR_DECL
1007 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1008 return 0;
1010 if (TREE_TYPE (newdecl) == error_mark_node)
1011 types_match = TREE_TYPE (olddecl) == error_mark_node;
1012 else if (TREE_TYPE (olddecl) == NULL_TREE)
1013 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1014 else if (TREE_TYPE (newdecl) == NULL_TREE)
1015 types_match = 0;
1016 else
1017 types_match = comptypes (TREE_TYPE (newdecl),
1018 TREE_TYPE (olddecl),
1019 COMPARE_REDECLARATION);
1022 return types_match;
1025 /* If NEWDECL is `static' and an `extern' was seen previously,
1026 warn about it. OLDDECL is the previous declaration.
1028 Note that this does not apply to the C++ case of declaring
1029 a variable `extern const' and then later `const'.
1031 Don't complain about built-in functions, since they are beyond
1032 the user's control. */
1034 void
1035 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1037 tree name;
1039 if (TREE_CODE (newdecl) == TYPE_DECL
1040 || TREE_CODE (newdecl) == TEMPLATE_DECL
1041 || TREE_CODE (newdecl) == CONST_DECL
1042 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1043 return;
1045 /* Don't get confused by static member functions; that's a different
1046 use of `static'. */
1047 if (TREE_CODE (newdecl) == FUNCTION_DECL
1048 && DECL_STATIC_FUNCTION_P (newdecl))
1049 return;
1051 /* If the old declaration was `static', or the new one isn't, then
1052 then everything is OK. */
1053 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1054 return;
1056 /* It's OK to declare a builtin function as `static'. */
1057 if (TREE_CODE (olddecl) == FUNCTION_DECL
1058 && DECL_ARTIFICIAL (olddecl))
1059 return;
1061 name = DECL_ASSEMBLER_NAME (newdecl);
1062 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1063 pedwarn ("previous declaration of %q+D", olddecl);
1066 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1067 function templates. If their exception specifications do not
1068 match, issue an a diagnostic. */
1070 static void
1071 check_redeclaration_exception_specification (tree new_decl,
1072 tree old_decl)
1074 tree new_type;
1075 tree old_type;
1076 tree new_exceptions;
1077 tree old_exceptions;
1079 new_type = TREE_TYPE (new_decl);
1080 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1081 old_type = TREE_TYPE (old_decl);
1082 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1084 /* [except.spec]
1086 If any declaration of a function has an exception-specification,
1087 all declarations, including the definition and an explicit
1088 specialization, of that function shall have an
1089 exception-specification with the same set of type-ids. */
1090 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1091 && ! DECL_IS_BUILTIN (old_decl)
1092 && flag_exceptions
1093 && !comp_except_specs (new_exceptions, old_exceptions,
1094 /*exact=*/true))
1096 error ("declaration of %qF throws different exceptions", new_decl);
1097 error ("from previous declaration %q+F", old_decl);
1101 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1102 If the redeclaration is invalid, a diagnostic is issued, and the
1103 error_mark_node is returned. Otherwise, OLDDECL is returned.
1105 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1106 returned.
1108 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1110 tree
1111 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1113 unsigned olddecl_uid = DECL_UID (olddecl);
1114 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1115 int new_defines_function = 0;
1116 tree new_template;
1118 if (newdecl == olddecl)
1119 return olddecl;
1121 types_match = decls_match (newdecl, olddecl);
1123 /* If either the type of the new decl or the type of the old decl is an
1124 error_mark_node, then that implies that we have already issued an
1125 error (earlier) for some bogus type specification, and in that case,
1126 it is rather pointless to harass the user with yet more error message
1127 about the same declaration, so just pretend the types match here. */
1128 if (TREE_TYPE (newdecl) == error_mark_node
1129 || TREE_TYPE (olddecl) == error_mark_node)
1130 types_match = 1;
1132 if (DECL_P (olddecl)
1133 && TREE_CODE (newdecl) == FUNCTION_DECL
1134 && TREE_CODE (olddecl) == FUNCTION_DECL
1135 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1137 if (DECL_DECLARED_INLINE_P (newdecl)
1138 && DECL_UNINLINABLE (newdecl)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1140 /* Already warned elsewhere. */;
1141 else if (DECL_DECLARED_INLINE_P (olddecl)
1142 && DECL_UNINLINABLE (olddecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1144 /* Already warned. */;
1145 else if (DECL_DECLARED_INLINE_P (newdecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1149 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1150 newdecl);
1151 warning (OPT_Wattributes, "previous declaration of %q+D "
1152 "with attribute noinline", olddecl);
1154 else if (DECL_DECLARED_INLINE_P (olddecl)
1155 && DECL_UNINLINABLE (newdecl)
1156 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1158 warning (OPT_Wattributes, "function %q+D redeclared with "
1159 "attribute noinline", newdecl);
1160 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1161 olddecl);
1165 /* Check for redeclaration and other discrepancies. */
1166 if (TREE_CODE (olddecl) == FUNCTION_DECL
1167 && DECL_ARTIFICIAL (olddecl))
1169 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1170 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1172 /* Avoid warnings redeclaring built-ins which have not been
1173 explicitly declared. */
1174 if (DECL_ANTICIPATED (olddecl))
1175 return NULL_TREE;
1177 /* If you declare a built-in or predefined function name as static,
1178 the old definition is overridden, but optionally warn this was a
1179 bad choice of name. */
1180 if (! TREE_PUBLIC (newdecl))
1182 warning (OPT_Wshadow, "shadowing %s function %q#D",
1183 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1184 olddecl);
1185 /* Discard the old built-in function. */
1186 return NULL_TREE;
1188 /* If the built-in is not ansi, then programs can override
1189 it even globally without an error. */
1190 else if (! DECL_BUILT_IN (olddecl))
1191 warning (0, "library function %q#D redeclared as non-function %q#D",
1192 olddecl, newdecl);
1193 else
1195 error ("declaration of %q#D", newdecl);
1196 error ("conflicts with built-in declaration %q#D",
1197 olddecl);
1199 return NULL_TREE;
1201 else if (!types_match)
1203 /* Avoid warnings redeclaring built-ins which have not been
1204 explicitly declared. */
1205 if (DECL_ANTICIPATED (olddecl))
1207 /* Deal with fileptr_type_node. FILE type is not known
1208 at the time we create the builtins. */
1209 tree t1, t2;
1211 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1212 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1213 t1 || t2;
1214 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1215 if (!t1 || !t2)
1216 break;
1217 else if (TREE_VALUE (t2) == fileptr_type_node)
1219 tree t = TREE_VALUE (t1);
1221 if (TREE_CODE (t) == POINTER_TYPE
1222 && TYPE_NAME (TREE_TYPE (t))
1223 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1224 == get_identifier ("FILE")
1225 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1227 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1229 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1230 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1231 types_match = decls_match (newdecl, olddecl);
1232 if (types_match)
1233 return duplicate_decls (newdecl, olddecl,
1234 newdecl_is_friend);
1235 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1238 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1239 break;
1241 else if ((DECL_EXTERN_C_P (newdecl)
1242 && DECL_EXTERN_C_P (olddecl))
1243 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1244 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1246 /* A near match; override the builtin. */
1248 if (TREE_PUBLIC (newdecl))
1250 warning (0, "new declaration %q#D", newdecl);
1251 warning (0, "ambiguates built-in declaration %q#D",
1252 olddecl);
1254 else
1255 warning (OPT_Wshadow, "shadowing %s function %q#D",
1256 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1257 olddecl);
1259 else
1260 /* Discard the old built-in function. */
1261 return NULL_TREE;
1263 /* Replace the old RTL to avoid problems with inlining. */
1264 COPY_DECL_RTL (newdecl, olddecl);
1266 /* Even if the types match, prefer the new declarations type for
1267 built-ins which have not been explicitly declared, for
1268 exception lists, etc... */
1269 else if (DECL_ANTICIPATED (olddecl))
1271 tree type = TREE_TYPE (newdecl);
1272 tree attribs = (*targetm.merge_type_attributes)
1273 (TREE_TYPE (olddecl), type);
1275 type = cp_build_type_attribute_variant (type, attribs);
1276 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1279 /* Whether or not the builtin can throw exceptions has no
1280 bearing on this declarator. */
1281 TREE_NOTHROW (olddecl) = 0;
1283 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1285 /* If a builtin function is redeclared as `static', merge
1286 the declarations, but make the original one static. */
1287 DECL_THIS_STATIC (olddecl) = 1;
1288 TREE_PUBLIC (olddecl) = 0;
1290 /* Make the old declaration consistent with the new one so
1291 that all remnants of the builtin-ness of this function
1292 will be banished. */
1293 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1294 COPY_DECL_RTL (newdecl, olddecl);
1297 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1299 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1300 && TREE_CODE (newdecl) != TYPE_DECL
1301 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1302 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1303 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1304 && TREE_CODE (olddecl) != TYPE_DECL
1305 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1306 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1307 == TYPE_DECL))))
1309 /* We do nothing special here, because C++ does such nasty
1310 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1311 get shadowed, and know that if we need to find a TYPE_DECL
1312 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1313 slot of the identifier. */
1314 return NULL_TREE;
1317 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1318 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1319 || (TREE_CODE (olddecl) == FUNCTION_DECL
1320 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1321 return NULL_TREE;
1323 error ("%q#D redeclared as different kind of symbol", newdecl);
1324 if (TREE_CODE (olddecl) == TREE_LIST)
1325 olddecl = TREE_VALUE (olddecl);
1326 error ("previous declaration of %q+#D", olddecl);
1328 return error_mark_node;
1330 else if (!types_match)
1332 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1333 /* These are certainly not duplicate declarations; they're
1334 from different scopes. */
1335 return NULL_TREE;
1337 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1339 /* The name of a class template may not be declared to refer to
1340 any other template, class, function, object, namespace, value,
1341 or type in the same scope. */
1342 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1343 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1345 error ("declaration of template %q#D", newdecl);
1346 error ("conflicts with previous declaration %q+#D", olddecl);
1348 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1349 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1350 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1351 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1352 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1353 DECL_TEMPLATE_PARMS (olddecl))
1354 /* Template functions can be disambiguated by
1355 return type. */
1356 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1357 TREE_TYPE (TREE_TYPE (olddecl))))
1359 error ("new declaration %q#D", newdecl);
1360 error ("ambiguates old declaration %q+#D", olddecl);
1362 return NULL_TREE;
1364 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1366 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1368 error ("declaration of C function %q#D conflicts with",
1369 newdecl);
1370 error ("previous declaration %q+#D here", olddecl);
1372 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1373 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1375 error ("new declaration %q#D", newdecl);
1376 error ("ambiguates old declaration %q+#D", olddecl);
1378 else
1379 return NULL_TREE;
1381 else
1383 error ("conflicting declaration %q#D", newdecl);
1384 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1385 return error_mark_node;
1388 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1389 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1390 && (!DECL_TEMPLATE_INFO (newdecl)
1391 || (DECL_TI_TEMPLATE (newdecl)
1392 != DECL_TI_TEMPLATE (olddecl))))
1393 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1394 && (!DECL_TEMPLATE_INFO (olddecl)
1395 || (DECL_TI_TEMPLATE (olddecl)
1396 != DECL_TI_TEMPLATE (newdecl))))))
1397 /* It's OK to have a template specialization and a non-template
1398 with the same type, or to have specializations of two
1399 different templates with the same type. Note that if one is a
1400 specialization, and the other is an instantiation of the same
1401 template, that we do not exit at this point. That situation
1402 can occur if we instantiate a template class, and then
1403 specialize one of its methods. This situation is valid, but
1404 the declarations must be merged in the usual way. */
1405 return NULL_TREE;
1406 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1407 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1408 && !DECL_USE_TEMPLATE (newdecl))
1409 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1410 && !DECL_USE_TEMPLATE (olddecl))))
1411 /* One of the declarations is a template instantiation, and the
1412 other is not a template at all. That's OK. */
1413 return NULL_TREE;
1414 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1416 /* In [namespace.alias] we have:
1418 In a declarative region, a namespace-alias-definition can be
1419 used to redefine a namespace-alias declared in that declarative
1420 region to refer only to the namespace to which it already
1421 refers.
1423 Therefore, if we encounter a second alias directive for the same
1424 alias, we can just ignore the second directive. */
1425 if (DECL_NAMESPACE_ALIAS (newdecl)
1426 && (DECL_NAMESPACE_ALIAS (newdecl)
1427 == DECL_NAMESPACE_ALIAS (olddecl)))
1428 return olddecl;
1429 /* [namespace.alias]
1431 A namespace-name or namespace-alias shall not be declared as
1432 the name of any other entity in the same declarative region.
1433 A namespace-name defined at global scope shall not be
1434 declared as the name of any other entity in any global scope
1435 of the program. */
1436 error ("declaration of namespace %qD conflicts with", newdecl);
1437 error ("previous declaration of namespace %q+D here", olddecl);
1438 return error_mark_node;
1440 else
1442 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1443 if (errmsg)
1445 error (errmsg, newdecl);
1446 if (DECL_NAME (olddecl) != NULL_TREE)
1447 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1448 ? "%q+#D previously defined here"
1449 : "%q+#D previously declared here", olddecl);
1450 return error_mark_node;
1452 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1453 && DECL_INITIAL (olddecl) != NULL_TREE
1454 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1455 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1457 /* Prototype decl follows defn w/o prototype. */
1458 warning (0, "prototype for %q+#D", newdecl);
1459 warning (0, "%Jfollows non-prototype definition here", olddecl);
1461 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1462 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1464 /* extern "C" int foo ();
1465 int foo () { bar (); }
1466 is OK. */
1467 if (current_lang_depth () == 0)
1468 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1469 else
1471 error ("previous declaration of %q+#D with %qL linkage",
1472 olddecl, DECL_LANGUAGE (olddecl));
1473 error ("conflicts with new declaration with %qL linkage",
1474 DECL_LANGUAGE (newdecl));
1478 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1480 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1482 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1483 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1484 int i = 1;
1486 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1487 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1489 for (; t1 && t1 != void_list_node;
1490 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1491 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1493 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1494 TREE_PURPOSE (t2)))
1496 pedwarn ("default argument given for parameter %d of %q#D",
1497 i, newdecl);
1498 pedwarn ("after previous specification in %q+#D", olddecl);
1500 else
1502 error ("default argument given for parameter %d of %q#D",
1503 i, newdecl);
1504 error ("after previous specification in %q+#D",
1505 olddecl);
1509 if (DECL_DECLARED_INLINE_P (newdecl)
1510 && ! DECL_DECLARED_INLINE_P (olddecl)
1511 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1513 warning (0, "%q#D was used before it was declared inline", newdecl);
1514 warning (0, "%Jprevious non-inline declaration here", olddecl);
1519 /* Do not merge an implicit typedef with an explicit one. In:
1521 class A;
1523 typedef class A A __attribute__ ((foo));
1525 the attribute should apply only to the typedef. */
1526 if (TREE_CODE (olddecl) == TYPE_DECL
1527 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1528 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1529 return NULL_TREE;
1531 /* If new decl is `static' and an `extern' was seen previously,
1532 warn about it. */
1533 warn_extern_redeclared_static (newdecl, olddecl);
1535 /* We have committed to returning 1 at this point. */
1536 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1538 /* Now that functions must hold information normally held
1539 by field decls, there is extra work to do so that
1540 declaration information does not get destroyed during
1541 definition. */
1542 if (DECL_VINDEX (olddecl))
1543 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1544 if (DECL_CONTEXT (olddecl))
1545 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1546 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1547 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1548 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1549 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1550 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1551 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1552 SET_OVERLOADED_OPERATOR_CODE
1553 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1554 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1556 /* Optionally warn about more than one declaration for the same
1557 name, but don't warn about a function declaration followed by a
1558 definition. */
1559 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1560 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1561 /* Don't warn about extern decl followed by definition. */
1562 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1563 /* Don't warn about friends, let add_friend take care of it. */
1564 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1566 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1567 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1571 /* Deal with C++: must preserve virtual function table size. */
1572 if (TREE_CODE (olddecl) == TYPE_DECL)
1574 tree newtype = TREE_TYPE (newdecl);
1575 tree oldtype = TREE_TYPE (olddecl);
1577 if (newtype != error_mark_node && oldtype != error_mark_node
1578 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1579 CLASSTYPE_FRIEND_CLASSES (newtype)
1580 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1582 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1585 /* Copy all the DECL_... slots specified in the new decl
1586 except for any that we copy here from the old type. */
1587 DECL_ATTRIBUTES (newdecl)
1588 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1590 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1592 tree old_result;
1593 tree new_result;
1594 old_result = DECL_TEMPLATE_RESULT (olddecl);
1595 new_result = DECL_TEMPLATE_RESULT (newdecl);
1596 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1597 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1598 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1599 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1601 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1603 DECL_INLINE (old_result)
1604 |= DECL_INLINE (new_result);
1605 DECL_DECLARED_INLINE_P (old_result)
1606 |= DECL_DECLARED_INLINE_P (new_result);
1607 check_redeclaration_exception_specification (newdecl, olddecl);
1610 /* If the new declaration is a definition, update the file and
1611 line information on the declaration. */
1612 if (DECL_INITIAL (old_result) == NULL_TREE
1613 && DECL_INITIAL (new_result) != NULL_TREE)
1615 DECL_SOURCE_LOCATION (olddecl)
1616 = DECL_SOURCE_LOCATION (old_result)
1617 = DECL_SOURCE_LOCATION (newdecl);
1618 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1619 DECL_ARGUMENTS (old_result)
1620 = DECL_ARGUMENTS (new_result);
1623 return olddecl;
1626 if (types_match)
1628 /* Automatically handles default parameters. */
1629 tree oldtype = TREE_TYPE (olddecl);
1630 tree newtype;
1632 /* Merge the data types specified in the two decls. */
1633 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1635 /* If merge_types produces a non-typedef type, just use the old type. */
1636 if (TREE_CODE (newdecl) == TYPE_DECL
1637 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1638 newtype = oldtype;
1640 if (TREE_CODE (newdecl) == VAR_DECL)
1642 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1643 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1644 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1645 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1646 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1647 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1649 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1650 if (DECL_LANG_SPECIFIC (olddecl)
1651 && CP_DECL_THREADPRIVATE_P (olddecl))
1653 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1654 if (!DECL_LANG_SPECIFIC (newdecl))
1655 retrofit_lang_decl (newdecl);
1657 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1658 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1662 /* Do this after calling `merge_types' so that default
1663 parameters don't confuse us. */
1664 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1665 check_redeclaration_exception_specification (newdecl, olddecl);
1666 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1668 /* Lay the type out, unless already done. */
1669 if (! same_type_p (newtype, oldtype)
1670 && TREE_TYPE (newdecl) != error_mark_node
1671 && !(processing_template_decl && uses_template_parms (newdecl)))
1672 layout_type (TREE_TYPE (newdecl));
1674 if ((TREE_CODE (newdecl) == VAR_DECL
1675 || TREE_CODE (newdecl) == PARM_DECL
1676 || TREE_CODE (newdecl) == RESULT_DECL
1677 || TREE_CODE (newdecl) == FIELD_DECL
1678 || TREE_CODE (newdecl) == TYPE_DECL)
1679 && !(processing_template_decl && uses_template_parms (newdecl)))
1680 layout_decl (newdecl, 0);
1682 /* Merge the type qualifiers. */
1683 if (TREE_READONLY (newdecl))
1684 TREE_READONLY (olddecl) = 1;
1685 if (TREE_THIS_VOLATILE (newdecl))
1686 TREE_THIS_VOLATILE (olddecl) = 1;
1687 if (TREE_NOTHROW (newdecl))
1688 TREE_NOTHROW (olddecl) = 1;
1690 /* Merge deprecatedness. */
1691 if (TREE_DEPRECATED (newdecl))
1692 TREE_DEPRECATED (olddecl) = 1;
1694 /* Merge the initialization information. */
1695 if (DECL_INITIAL (newdecl) == NULL_TREE
1696 && DECL_INITIAL (olddecl) != NULL_TREE)
1698 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1699 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1700 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1701 && DECL_LANG_SPECIFIC (newdecl)
1702 && DECL_LANG_SPECIFIC (olddecl))
1704 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1705 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1709 /* Merge the section attribute.
1710 We want to issue an error if the sections conflict but that must be
1711 done later in decl_attributes since we are called before attributes
1712 are assigned. */
1713 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1714 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1716 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1718 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1719 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1720 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1721 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1722 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1723 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1724 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1725 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1726 /* Keep the old RTL. */
1727 COPY_DECL_RTL (olddecl, newdecl);
1729 else if (TREE_CODE (newdecl) == VAR_DECL
1730 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1732 /* Keep the old RTL. We cannot keep the old RTL if the old
1733 declaration was for an incomplete object and the new
1734 declaration is not since many attributes of the RTL will
1735 change. */
1736 COPY_DECL_RTL (olddecl, newdecl);
1739 /* If cannot merge, then use the new type and qualifiers,
1740 and don't preserve the old rtl. */
1741 else
1743 /* Clean out any memory we had of the old declaration. */
1744 tree oldstatic = value_member (olddecl, static_aggregates);
1745 if (oldstatic)
1746 TREE_VALUE (oldstatic) = error_mark_node;
1748 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1749 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1750 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1751 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1754 /* Merge the storage class information. */
1755 merge_weak (newdecl, olddecl);
1757 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1758 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1759 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1760 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1761 if (! DECL_EXTERNAL (olddecl))
1762 DECL_EXTERNAL (newdecl) = 0;
1764 new_template = NULL_TREE;
1765 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1767 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1768 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1769 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1770 DECL_TEMPLATE_INSTANTIATED (newdecl)
1771 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1773 /* If the OLDDECL is an instantiation and/or specialization,
1774 then the NEWDECL must be too. But, it may not yet be marked
1775 as such if the caller has created NEWDECL, but has not yet
1776 figured out that it is a redeclaration. */
1777 if (!DECL_USE_TEMPLATE (newdecl))
1778 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1780 /* Don't really know how much of the language-specific
1781 values we should copy from old to new. */
1782 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1783 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1784 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1785 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1786 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1787 if (DECL_TEMPLATE_INFO (newdecl))
1788 new_template = DECL_TI_TEMPLATE (newdecl);
1789 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1790 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1791 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1792 olddecl_friend = DECL_FRIEND_P (olddecl);
1793 hidden_friend = (DECL_ANTICIPATED (olddecl)
1794 && DECL_HIDDEN_FRIEND_P (olddecl)
1795 && newdecl_is_friend);
1797 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1798 if (TREE_CODE (newdecl) == FUNCTION_DECL
1799 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1801 DECL_BEFRIENDING_CLASSES (newdecl)
1802 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1803 DECL_BEFRIENDING_CLASSES (olddecl));
1804 /* DECL_THUNKS is only valid for virtual functions,
1805 otherwise it is a DECL_FRIEND_CONTEXT. */
1806 if (DECL_VIRTUAL_P (newdecl))
1807 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1811 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1814 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1816 /* If newdecl is not a specialization, then it is not a
1817 template-related function at all. And that means that we
1818 should have exited above, returning 0. */
1819 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1821 if (TREE_USED (olddecl))
1822 /* From [temp.expl.spec]:
1824 If a template, a member template or the member of a class
1825 template is explicitly specialized then that
1826 specialization shall be declared before the first use of
1827 that specialization that would cause an implicit
1828 instantiation to take place, in every translation unit in
1829 which such a use occurs. */
1830 error ("explicit specialization of %qD after first use",
1831 olddecl);
1833 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1835 /* [temp.expl.spec/14] We don't inline explicit specialization
1836 just because the primary template says so. */
1838 else
1840 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1841 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1843 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1845 /* If either decl says `inline', this fn is inline, unless
1846 its definition was passed already. */
1847 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1848 DECL_INLINE (olddecl) = 1;
1849 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1851 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1852 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1855 /* Preserve abstractness on cloned [cd]tors. */
1856 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1858 if (! types_match)
1860 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1861 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1862 COPY_DECL_RTL (newdecl, olddecl);
1864 if (! types_match || new_defines_function)
1866 /* These need to be copied so that the names are available.
1867 Note that if the types do match, we'll preserve inline
1868 info and other bits, but if not, we won't. */
1869 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1870 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1872 if (new_defines_function)
1873 /* If defining a function declared with other language
1874 linkage, use the previously declared language linkage. */
1875 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1876 else if (types_match)
1878 /* If redeclaring a builtin function, and not a definition,
1879 it stays built in. */
1880 if (DECL_BUILT_IN (olddecl))
1882 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1883 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1884 /* If we're keeping the built-in definition, keep the rtl,
1885 regardless of declaration matches. */
1886 COPY_DECL_RTL (olddecl, newdecl);
1889 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1890 /* Don't clear out the arguments if we're redefining a function. */
1891 if (DECL_ARGUMENTS (olddecl))
1892 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1895 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1896 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1898 /* Now preserve various other info from the definition. */
1899 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1900 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1901 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1902 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1904 /* Warn about conflicting visibility specifications. */
1905 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1906 && DECL_VISIBILITY_SPECIFIED (newdecl)
1907 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1909 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
1910 "because it", newdecl);
1911 warning (OPT_Wattributes, "%Jconflicts with previous "
1912 "declaration here", olddecl);
1914 /* Choose the declaration which specified visibility. */
1915 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1917 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1918 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1920 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
1921 so keep this behavior. */
1922 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
1924 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
1925 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
1928 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1929 with that from NEWDECL below. */
1930 if (DECL_LANG_SPECIFIC (olddecl))
1932 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1933 != DECL_LANG_SPECIFIC (newdecl));
1934 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1937 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1939 int function_size;
1941 function_size = sizeof (struct tree_decl_common);
1943 memcpy ((char *) olddecl + sizeof (struct tree_common),
1944 (char *) newdecl + sizeof (struct tree_common),
1945 function_size - sizeof (struct tree_common));
1947 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1948 (char *) newdecl + sizeof (struct tree_decl_common),
1949 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
1950 if (new_template)
1951 /* If newdecl is a template instantiation, it is possible that
1952 the following sequence of events has occurred:
1954 o A friend function was declared in a class template. The
1955 class template was instantiated.
1957 o The instantiation of the friend declaration was
1958 recorded on the instantiation list, and is newdecl.
1960 o Later, however, instantiate_class_template called pushdecl
1961 on the newdecl to perform name injection. But, pushdecl in
1962 turn called duplicate_decls when it discovered that another
1963 declaration of a global function with the same name already
1964 existed.
1966 o Here, in duplicate_decls, we decided to clobber newdecl.
1968 If we're going to do that, we'd better make sure that
1969 olddecl, and not newdecl, is on the list of
1970 instantiations so that if we try to do the instantiation
1971 again we won't get the clobbered declaration. */
1972 reregister_specialization (newdecl,
1973 new_template,
1974 olddecl);
1976 else
1978 size_t size = tree_code_size (TREE_CODE (olddecl));
1979 memcpy ((char *) olddecl + sizeof (struct tree_common),
1980 (char *) newdecl + sizeof (struct tree_common),
1981 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
1982 switch (TREE_CODE (olddecl))
1984 case LABEL_DECL:
1985 case VAR_DECL:
1986 case RESULT_DECL:
1987 case PARM_DECL:
1988 case FIELD_DECL:
1989 case TYPE_DECL:
1990 case CONST_DECL:
1992 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1993 (char *) newdecl + sizeof (struct tree_decl_common),
1994 size - sizeof (struct tree_decl_common)
1995 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1997 break;
1998 default:
1999 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2000 (char *) newdecl + sizeof (struct tree_decl_common),
2001 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2002 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2003 break;
2006 DECL_UID (olddecl) = olddecl_uid;
2007 if (olddecl_friend)
2008 DECL_FRIEND_P (olddecl) = 1;
2009 if (hidden_friend)
2011 DECL_ANTICIPATED (olddecl) = 1;
2012 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2015 /* NEWDECL contains the merged attribute lists.
2016 Update OLDDECL to be the same. */
2017 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2019 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2020 so that encode_section_info has a chance to look at the new decl
2021 flags and attributes. */
2022 if (DECL_RTL_SET_P (olddecl)
2023 && (TREE_CODE (olddecl) == FUNCTION_DECL
2024 || (TREE_CODE (olddecl) == VAR_DECL
2025 && TREE_STATIC (olddecl))))
2026 make_decl_rtl (olddecl);
2028 /* The NEWDECL will no longer be needed. Because every out-of-class
2029 declaration of a member results in a call to duplicate_decls,
2030 freeing these nodes represents in a significant savings. */
2031 ggc_free (newdecl);
2033 return olddecl;
2036 /* Return zero if the declaration NEWDECL is valid
2037 when the declaration OLDDECL (assumed to be for the same name)
2038 has already been seen.
2039 Otherwise return an error message format string with a %s
2040 where the identifier should go. */
2042 static const char *
2043 redeclaration_error_message (tree newdecl, tree olddecl)
2045 if (TREE_CODE (newdecl) == TYPE_DECL)
2047 /* Because C++ can put things into name space for free,
2048 constructs like "typedef struct foo { ... } foo"
2049 would look like an erroneous redeclaration. */
2050 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2051 return NULL;
2052 else
2053 return "redefinition of %q#D";
2055 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2057 /* If this is a pure function, its olddecl will actually be
2058 the original initialization to `0' (which we force to call
2059 abort()). Don't complain about redefinition in this case. */
2060 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2061 && DECL_INITIAL (olddecl) == NULL_TREE)
2062 return NULL;
2064 /* If both functions come from different namespaces, this is not
2065 a redeclaration - this is a conflict with a used function. */
2066 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2067 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2068 && ! decls_match (olddecl, newdecl))
2069 return "%qD conflicts with used function";
2071 /* We'll complain about linkage mismatches in
2072 warn_extern_redeclared_static. */
2074 /* Defining the same name twice is no good. */
2075 if (DECL_INITIAL (olddecl) != NULL_TREE
2076 && DECL_INITIAL (newdecl) != NULL_TREE)
2078 if (DECL_NAME (olddecl) == NULL_TREE)
2079 return "%q#D not declared in class";
2080 else
2081 return "redefinition of %q#D";
2083 return NULL;
2085 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2087 tree nt, ot;
2089 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2091 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2092 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2093 return "redefinition of %q#D";
2094 return NULL;
2097 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2098 || (DECL_TEMPLATE_RESULT (newdecl)
2099 == DECL_TEMPLATE_RESULT (olddecl)))
2100 return NULL;
2102 nt = DECL_TEMPLATE_RESULT (newdecl);
2103 if (DECL_TEMPLATE_INFO (nt))
2104 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2105 ot = DECL_TEMPLATE_RESULT (olddecl);
2106 if (DECL_TEMPLATE_INFO (ot))
2107 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2108 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2109 return "redefinition of %q#D";
2111 return NULL;
2113 else if (TREE_CODE (newdecl) == VAR_DECL
2114 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2115 && (! DECL_LANG_SPECIFIC (olddecl)
2116 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2117 || DECL_THREAD_LOCAL_P (newdecl)))
2119 /* Only variables can be thread-local, and all declarations must
2120 agree on this property. */
2121 if (DECL_THREAD_LOCAL_P (newdecl))
2122 return "thread-local declaration of %q#D follows "
2123 "non-thread-local declaration";
2124 else
2125 return "non-thread-local declaration of %q#D follows "
2126 "thread-local declaration";
2128 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2130 /* Objects declared at top level: */
2131 /* If at least one is a reference, it's ok. */
2132 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2133 return NULL;
2134 /* Reject two definitions. */
2135 return "redefinition of %q#D";
2137 else
2139 /* Objects declared with block scope: */
2140 /* Reject two definitions, and reject a definition
2141 together with an external reference. */
2142 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2143 return "redeclaration of %q#D";
2144 return NULL;
2148 /* Hash and equality functions for the named_label table. */
2150 static hashval_t
2151 named_label_entry_hash (const void *data)
2153 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2154 return DECL_UID (ent->label_decl);
2157 static int
2158 named_label_entry_eq (const void *a, const void *b)
2160 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2161 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2162 return ent_a->label_decl == ent_b->label_decl;
2165 /* Create a new label, named ID. */
2167 static tree
2168 make_label_decl (tree id, int local_p)
2170 struct named_label_entry *ent;
2171 void **slot;
2172 tree decl;
2174 decl = build_decl (LABEL_DECL, id, void_type_node);
2176 DECL_CONTEXT (decl) = current_function_decl;
2177 DECL_MODE (decl) = VOIDmode;
2178 C_DECLARED_LABEL_FLAG (decl) = local_p;
2180 /* Say where one reference is to the label, for the sake of the
2181 error if it is not defined. */
2182 DECL_SOURCE_LOCATION (decl) = input_location;
2184 /* Record the fact that this identifier is bound to this label. */
2185 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2187 /* Create the label htab for the function on demand. */
2188 if (!named_labels)
2189 named_labels = htab_create_ggc (13, named_label_entry_hash,
2190 named_label_entry_eq, NULL);
2192 /* Record this label on the list of labels used in this function.
2193 We do this before calling make_label_decl so that we get the
2194 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2195 ent = GGC_CNEW (struct named_label_entry);
2196 ent->label_decl = decl;
2198 slot = htab_find_slot (named_labels, ent, INSERT);
2199 gcc_assert (*slot == NULL);
2200 *slot = ent;
2202 return decl;
2205 /* Look for a label named ID in the current function. If one cannot
2206 be found, create one. (We keep track of used, but undefined,
2207 labels, and complain about them at the end of a function.) */
2209 tree
2210 lookup_label (tree id)
2212 tree decl;
2214 timevar_push (TV_NAME_LOOKUP);
2215 /* You can't use labels at global scope. */
2216 if (current_function_decl == NULL_TREE)
2218 error ("label %qE referenced outside of any function", id);
2219 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2222 /* See if we've already got this label. */
2223 decl = IDENTIFIER_LABEL_VALUE (id);
2224 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2225 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2227 decl = make_label_decl (id, /*local_p=*/0);
2228 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2231 /* Declare a local label named ID. */
2233 tree
2234 declare_local_label (tree id)
2236 tree decl, shadow;
2238 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2239 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2240 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2241 current_binding_level->shadowed_labels);
2242 current_binding_level->shadowed_labels = shadow;
2244 decl = make_label_decl (id, /*local_p=*/1);
2245 TREE_VALUE (shadow) = decl;
2247 return decl;
2250 /* Returns nonzero if it is ill-formed to jump past the declaration of
2251 DECL. Returns 2 if it's also a real problem. */
2253 static int
2254 decl_jump_unsafe (tree decl)
2256 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2257 || TREE_TYPE (decl) == error_mark_node)
2258 return 0;
2260 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2261 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2262 return 2;
2264 if (pod_type_p (TREE_TYPE (decl)))
2265 return 0;
2267 /* The POD stuff is just pedantry; why should it matter if the class
2268 contains a field of pointer to member type? */
2269 return 1;
2272 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2274 static void
2275 identify_goto (tree decl, const location_t *locus)
2277 if (decl)
2278 pedwarn ("jump to label %qD", decl);
2279 else
2280 pedwarn ("jump to case label");
2281 if (locus)
2282 pedwarn ("%H from here", locus);
2285 /* Check that a single previously seen jump to a newly defined label
2286 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2287 the jump context; NAMES are the names in scope in LEVEL at the jump
2288 context; LOCUS is the source position of the jump or 0. Returns
2289 true if all is well. */
2291 static bool
2292 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2293 bool exited_omp, const location_t *locus)
2295 struct cp_binding_level *b;
2296 bool identified = false, saw_eh = false, saw_omp = false;
2298 if (exited_omp)
2300 identify_goto (decl, locus);
2301 error (" exits OpenMP structured block");
2302 identified = saw_omp = true;
2305 for (b = current_binding_level; b ; b = b->level_chain)
2307 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2309 for (new_decls = b->names; new_decls != old_decls;
2310 new_decls = TREE_CHAIN (new_decls))
2312 int problem = decl_jump_unsafe (new_decls);
2313 if (! problem)
2314 continue;
2316 if (!identified)
2318 identify_goto (decl, locus);
2319 identified = true;
2321 if (problem > 1)
2322 error (" crosses initialization of %q+#D", new_decls);
2323 else
2324 pedwarn (" enters scope of non-POD %q+#D", new_decls);
2327 if (b == level)
2328 break;
2329 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2331 if (!identified)
2333 identify_goto (decl, locus);
2334 identified = true;
2336 if (b->kind == sk_try)
2337 error (" enters try block");
2338 else
2339 error (" enters catch block");
2340 saw_eh = true;
2342 if (b->kind == sk_omp && !saw_omp)
2344 if (!identified)
2346 identify_goto (decl, locus);
2347 identified = true;
2349 error (" enters OpenMP structured block");
2350 saw_omp = true;
2354 return !identified;
2357 static void
2358 check_previous_goto (tree decl, struct named_label_use_entry *use)
2360 check_previous_goto_1 (decl, use->binding_level,
2361 use->names_in_scope, use->in_omp_scope,
2362 &use->o_goto_locus);
2365 static bool
2366 check_switch_goto (struct cp_binding_level* level)
2368 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2371 /* Check that a new jump to a label DECL is OK. Called by
2372 finish_goto_stmt. */
2374 void
2375 check_goto (tree decl)
2377 struct named_label_entry *ent, dummy;
2378 bool saw_catch = false, identified = false;
2379 tree bad;
2381 /* We can't know where a computed goto is jumping.
2382 So we assume that it's OK. */
2383 if (TREE_CODE (decl) != LABEL_DECL)
2384 return;
2386 /* We didn't record any information about this label when we created it,
2387 and there's not much point since it's trivial to analyze as a return. */
2388 if (decl == cdtor_label)
2389 return;
2391 dummy.label_decl = decl;
2392 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2393 gcc_assert (ent != NULL);
2395 /* If the label hasn't been defined yet, defer checking. */
2396 if (! DECL_INITIAL (decl))
2398 struct named_label_use_entry *new_use;
2400 /* Don't bother creating another use if the last goto had the
2401 same data, and will therefore create the same set of errors. */
2402 if (ent->uses
2403 && ent->uses->names_in_scope == current_binding_level->names)
2404 return;
2406 new_use = GGC_NEW (struct named_label_use_entry);
2407 new_use->binding_level = current_binding_level;
2408 new_use->names_in_scope = current_binding_level->names;
2409 new_use->o_goto_locus = input_location;
2410 new_use->in_omp_scope = false;
2412 new_use->next = ent->uses;
2413 ent->uses = new_use;
2414 return;
2417 if (ent->in_try_scope || ent->in_catch_scope
2418 || ent->in_omp_scope || ent->bad_decls)
2420 pedwarn ("jump to label %q+D", decl);
2421 pedwarn (" from here");
2422 identified = true;
2425 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2427 tree b = TREE_VALUE (bad);
2428 int u = decl_jump_unsafe (b);
2430 if (u > 1 && DECL_ARTIFICIAL (b))
2432 /* Can't skip init of __exception_info. */
2433 error ("%J enters catch block", b);
2434 saw_catch = true;
2436 else if (u > 1)
2437 error (" skips initialization of %q+#D", b);
2438 else
2439 pedwarn (" enters scope of non-POD %q+#D", b);
2442 if (ent->in_try_scope)
2443 error (" enters try block");
2444 else if (ent->in_catch_scope && !saw_catch)
2445 error (" enters catch block");
2447 if (ent->in_omp_scope)
2448 error (" enters OpenMP structured block");
2449 else if (flag_openmp)
2451 struct cp_binding_level *b;
2452 for (b = current_binding_level; b ; b = b->level_chain)
2454 if (b == ent->binding_level)
2455 break;
2456 if (b->kind == sk_omp)
2458 if (!identified)
2460 pedwarn ("jump to label %q+D", decl);
2461 pedwarn (" from here");
2462 identified = true;
2464 error (" exits OpenMP structured block");
2465 break;
2471 /* Check that a return is ok wrt OpenMP structured blocks.
2472 Called by finish_return_stmt. Returns true if all is well. */
2474 bool
2475 check_omp_return (void)
2477 struct cp_binding_level *b;
2478 for (b = current_binding_level; b ; b = b->level_chain)
2479 if (b->kind == sk_omp)
2481 error ("invalid exit from OpenMP structured block");
2482 return false;
2484 return true;
2487 /* Define a label, specifying the location in the source file.
2488 Return the LABEL_DECL node for the label. */
2490 tree
2491 define_label (location_t location, tree name)
2493 struct named_label_entry *ent, dummy;
2494 struct cp_binding_level *p;
2495 tree decl;
2497 timevar_push (TV_NAME_LOOKUP);
2499 decl = lookup_label (name);
2501 dummy.label_decl = decl;
2502 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2503 gcc_assert (ent != NULL);
2505 /* After labels, make any new cleanups in the function go into their
2506 own new (temporary) binding contour. */
2507 for (p = current_binding_level;
2508 p->kind != sk_function_parms;
2509 p = p->level_chain)
2510 p->more_cleanups_ok = 0;
2512 if (name == get_identifier ("wchar_t"))
2513 pedwarn ("label named wchar_t");
2515 if (DECL_INITIAL (decl) != NULL_TREE)
2516 error ("duplicate label %qD", decl);
2517 else
2519 struct named_label_use_entry *use;
2521 /* Mark label as having been defined. */
2522 DECL_INITIAL (decl) = error_mark_node;
2523 /* Say where in the source. */
2524 DECL_SOURCE_LOCATION (decl) = location;
2526 ent->binding_level = current_binding_level;
2527 ent->names_in_scope = current_binding_level->names;
2529 for (use = ent->uses; use ; use = use->next)
2530 check_previous_goto (decl, use);
2531 ent->uses = NULL;
2534 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2537 struct cp_switch
2539 struct cp_binding_level *level;
2540 struct cp_switch *next;
2541 /* The SWITCH_STMT being built. */
2542 tree switch_stmt;
2543 /* A splay-tree mapping the low element of a case range to the high
2544 element, or NULL_TREE if there is no high element. Used to
2545 determine whether or not a new case label duplicates an old case
2546 label. We need a tree, rather than simply a hash table, because
2547 of the GNU case range extension. */
2548 splay_tree cases;
2551 /* A stack of the currently active switch statements. The innermost
2552 switch statement is on the top of the stack. There is no need to
2553 mark the stack for garbage collection because it is only active
2554 during the processing of the body of a function, and we never
2555 collect at that point. */
2557 static struct cp_switch *switch_stack;
2559 /* Called right after a switch-statement condition is parsed.
2560 SWITCH_STMT is the switch statement being parsed. */
2562 void
2563 push_switch (tree switch_stmt)
2565 struct cp_switch *p = XNEW (struct cp_switch);
2566 p->level = current_binding_level;
2567 p->next = switch_stack;
2568 p->switch_stmt = switch_stmt;
2569 p->cases = splay_tree_new (case_compare, NULL, NULL);
2570 switch_stack = p;
2573 void
2574 pop_switch (void)
2576 struct cp_switch *cs = switch_stack;
2577 location_t switch_location;
2579 /* Emit warnings as needed. */
2580 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2581 switch_location = EXPR_LOCATION (cs->switch_stmt);
2582 else
2583 switch_location = input_location;
2584 if (!processing_template_decl)
2585 c_do_switch_warnings (cs->cases, switch_location,
2586 SWITCH_STMT_TYPE (cs->switch_stmt),
2587 SWITCH_STMT_COND (cs->switch_stmt));
2589 splay_tree_delete (cs->cases);
2590 switch_stack = switch_stack->next;
2591 free (cs);
2594 /* Note that we've seen a definition of a case label, and complain if this
2595 is a bad place for one. */
2597 tree
2598 finish_case_label (tree low_value, tree high_value)
2600 tree cond, r;
2601 struct cp_binding_level *p;
2603 if (processing_template_decl)
2605 tree label;
2607 /* For templates, just add the case label; we'll do semantic
2608 analysis at instantiation-time. */
2609 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2610 return add_stmt (build_case_label (low_value, high_value, label));
2613 /* Find the condition on which this switch statement depends. */
2614 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2615 if (cond && TREE_CODE (cond) == TREE_LIST)
2616 cond = TREE_VALUE (cond);
2618 if (!check_switch_goto (switch_stack->level))
2619 return error_mark_node;
2621 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2622 low_value, high_value);
2624 /* After labels, make any new cleanups in the function go into their
2625 own new (temporary) binding contour. */
2626 for (p = current_binding_level;
2627 p->kind != sk_function_parms;
2628 p = p->level_chain)
2629 p->more_cleanups_ok = 0;
2631 return r;
2634 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2636 static hashval_t
2637 typename_hash (const void* k)
2639 hashval_t hash;
2640 tree t = (tree) k;
2642 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2643 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2645 return hash;
2648 typedef struct typename_info {
2649 tree scope;
2650 tree name;
2651 tree template_id;
2652 bool enum_p;
2653 bool class_p;
2654 } typename_info;
2656 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2658 static int
2659 typename_compare (const void * k1, const void * k2)
2661 tree t1;
2662 const typename_info *t2;
2664 t1 = (tree) k1;
2665 t2 = (const typename_info *) k2;
2667 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2668 && TYPE_CONTEXT (t1) == t2->scope
2669 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2670 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2671 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2674 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2675 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2677 Returns the new TYPENAME_TYPE. */
2679 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2681 static tree
2682 build_typename_type (tree context, tree name, tree fullname,
2683 enum tag_types tag_type)
2685 tree t;
2686 tree d;
2687 typename_info ti;
2688 void **e;
2689 hashval_t hash;
2691 if (typename_htab == NULL)
2692 typename_htab = htab_create_ggc (61, &typename_hash,
2693 &typename_compare, NULL);
2695 ti.scope = FROB_CONTEXT (context);
2696 ti.name = name;
2697 ti.template_id = fullname;
2698 ti.enum_p = tag_type == enum_type;
2699 ti.class_p = (tag_type == class_type
2700 || tag_type == record_type
2701 || tag_type == union_type);
2702 hash = (htab_hash_pointer (ti.scope)
2703 ^ htab_hash_pointer (ti.name));
2705 /* See if we already have this type. */
2706 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2707 if (*e)
2708 t = (tree) *e;
2709 else
2711 /* Build the TYPENAME_TYPE. */
2712 t = make_aggr_type (TYPENAME_TYPE);
2713 TYPE_CONTEXT (t) = ti.scope;
2714 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2715 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2716 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2718 /* Build the corresponding TYPE_DECL. */
2719 d = build_decl (TYPE_DECL, name, t);
2720 TYPE_NAME (TREE_TYPE (d)) = d;
2721 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2722 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2723 DECL_ARTIFICIAL (d) = 1;
2725 /* Store it in the hash table. */
2726 *e = t;
2729 return t;
2732 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2733 provided to name the type. Returns an appropriate type, unless an
2734 error occurs, in which case error_mark_node is returned. If we
2735 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2736 return that, rather than the _TYPE it corresponds to, in other
2737 cases we look through the type decl. If TF_ERROR is set, complain
2738 about errors, otherwise be quiet. */
2740 tree
2741 make_typename_type (tree context, tree name, enum tag_types tag_type,
2742 tsubst_flags_t complain)
2744 tree fullname;
2746 if (name == error_mark_node
2747 || context == NULL_TREE
2748 || context == error_mark_node)
2749 return error_mark_node;
2751 if (TYPE_P (name))
2753 if (!(TYPE_LANG_SPECIFIC (name)
2754 && (CLASSTYPE_IS_TEMPLATE (name)
2755 || CLASSTYPE_USE_TEMPLATE (name))))
2756 name = TYPE_IDENTIFIER (name);
2757 else
2758 /* Create a TEMPLATE_ID_EXPR for the type. */
2759 name = build_nt (TEMPLATE_ID_EXPR,
2760 CLASSTYPE_TI_TEMPLATE (name),
2761 CLASSTYPE_TI_ARGS (name));
2763 else if (TREE_CODE (name) == TYPE_DECL)
2764 name = DECL_NAME (name);
2766 fullname = name;
2768 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2770 name = TREE_OPERAND (name, 0);
2771 if (TREE_CODE (name) == TEMPLATE_DECL)
2772 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2774 if (TREE_CODE (name) == TEMPLATE_DECL)
2776 error ("%qD used without template parameters", name);
2777 return error_mark_node;
2779 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2780 gcc_assert (TYPE_P (context));
2782 if (!dependent_type_p (context)
2783 || currently_open_class (context))
2785 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2787 tree tmpl = NULL_TREE;
2788 if (IS_AGGR_TYPE (context))
2789 tmpl = lookup_field (context, name, 0, false);
2790 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2792 if (complain & tf_error)
2793 error ("no class template named %q#T in %q#T",
2794 name, context);
2795 return error_mark_node;
2798 if (complain & tf_error)
2799 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2801 return lookup_template_class (tmpl,
2802 TREE_OPERAND (fullname, 1),
2803 NULL_TREE, context,
2804 /*entering_scope=*/0,
2805 tf_warning_or_error | tf_user);
2807 else
2809 tree t;
2811 if (!IS_AGGR_TYPE (context))
2813 if (complain & tf_error)
2814 error ("no type named %q#T in %q#T", name, context);
2815 return error_mark_node;
2818 t = lookup_field (context, name, 0, true);
2819 if (t)
2821 if (TREE_CODE (t) != TYPE_DECL)
2823 if (complain & tf_error)
2824 error ("no type named %q#T in %q#T", name, context);
2825 return error_mark_node;
2828 if (complain & tf_error)
2829 perform_or_defer_access_check (TYPE_BINFO (context), t);
2831 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2832 t = TREE_TYPE (t);
2834 return t;
2839 /* If the CONTEXT is not a template type, then either the field is
2840 there now or its never going to be. */
2841 if (!dependent_type_p (context))
2843 if (complain & tf_error)
2844 error ("no type named %q#T in %q#T", name, context);
2845 return error_mark_node;
2848 return build_typename_type (context, name, fullname, tag_type);
2851 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2852 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2853 in which case error_mark_node is returned.
2855 If PARM_LIST is non-NULL, also make sure that the template parameter
2856 list of TEMPLATE_DECL matches.
2858 If COMPLAIN zero, don't complain about any errors that occur. */
2860 tree
2861 make_unbound_class_template (tree context, tree name, tree parm_list,
2862 tsubst_flags_t complain)
2864 tree t;
2865 tree d;
2867 if (TYPE_P (name))
2868 name = TYPE_IDENTIFIER (name);
2869 else if (DECL_P (name))
2870 name = DECL_NAME (name);
2871 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2873 if (!dependent_type_p (context)
2874 || currently_open_class (context))
2876 tree tmpl = NULL_TREE;
2878 if (IS_AGGR_TYPE (context))
2879 tmpl = lookup_field (context, name, 0, false);
2881 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2883 if (complain & tf_error)
2884 error ("no class template named %q#T in %q#T", name, context);
2885 return error_mark_node;
2888 if (parm_list
2889 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2891 if (complain & tf_error)
2893 error ("template parameters do not match template");
2894 error ("%q+D declared here", tmpl);
2896 return error_mark_node;
2899 if (complain & tf_error)
2900 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2902 return tmpl;
2905 /* Build the UNBOUND_CLASS_TEMPLATE. */
2906 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2907 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2908 TREE_TYPE (t) = NULL_TREE;
2910 /* Build the corresponding TEMPLATE_DECL. */
2911 d = build_decl (TEMPLATE_DECL, name, t);
2912 TYPE_NAME (TREE_TYPE (d)) = d;
2913 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2914 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2915 DECL_ARTIFICIAL (d) = 1;
2916 DECL_TEMPLATE_PARMS (d) = parm_list;
2918 return t;
2923 /* Push the declarations of builtin types into the namespace.
2924 RID_INDEX is the index of the builtin type in the array
2925 RID_POINTERS. NAME is the name used when looking up the builtin
2926 type. TYPE is the _TYPE node for the builtin type. */
2928 void
2929 record_builtin_type (enum rid rid_index,
2930 const char* name,
2931 tree type)
2933 tree rname = NULL_TREE, tname = NULL_TREE;
2934 tree tdecl = NULL_TREE;
2936 if ((int) rid_index < (int) RID_MAX)
2937 rname = ridpointers[(int) rid_index];
2938 if (name)
2939 tname = get_identifier (name);
2941 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2942 eliminated. Built-in types should not be looked up name; their
2943 names are keywords that the parser can recognize. However, there
2944 is code in c-common.c that uses identifier_global_value to look
2945 up built-in types by name. */
2946 if (tname)
2948 tdecl = build_decl (TYPE_DECL, tname, type);
2949 DECL_ARTIFICIAL (tdecl) = 1;
2950 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2952 if (rname)
2954 if (!tdecl)
2956 tdecl = build_decl (TYPE_DECL, rname, type);
2957 DECL_ARTIFICIAL (tdecl) = 1;
2959 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2962 if (!TYPE_NAME (type))
2963 TYPE_NAME (type) = tdecl;
2965 if (tdecl)
2966 debug_hooks->type_decl (tdecl, 0);
2969 /* Record one of the standard Java types.
2970 * Declare it as having the given NAME.
2971 * If SIZE > 0, it is the size of one of the integral types;
2972 * otherwise it is the negative of the size of one of the other types. */
2974 static tree
2975 record_builtin_java_type (const char* name, int size)
2977 tree type, decl;
2978 if (size > 0)
2979 type = make_signed_type (size);
2980 else if (size > -32)
2981 { /* "__java_char" or ""__java_boolean". */
2982 type = make_unsigned_type (-size);
2983 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2985 else
2986 { /* "__java_float" or ""__java_double". */
2987 type = make_node (REAL_TYPE);
2988 TYPE_PRECISION (type) = - size;
2989 layout_type (type);
2991 record_builtin_type (RID_MAX, name, type);
2992 decl = TYPE_NAME (type);
2994 /* Suppress generate debug symbol entries for these types,
2995 since for normal C++ they are just clutter.
2996 However, push_lang_context undoes this if extern "Java" is seen. */
2997 DECL_IGNORED_P (decl) = 1;
2999 TYPE_FOR_JAVA (type) = 1;
3000 return type;
3003 /* Push a type into the namespace so that the back-ends ignore it. */
3005 static void
3006 record_unknown_type (tree type, const char* name)
3008 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3009 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3010 DECL_IGNORED_P (decl) = 1;
3011 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3012 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3013 TYPE_ALIGN (type) = 1;
3014 TYPE_USER_ALIGN (type) = 0;
3015 TYPE_MODE (type) = TYPE_MODE (void_type_node);
3018 /* A string for which we should create an IDENTIFIER_NODE at
3019 startup. */
3021 typedef struct predefined_identifier
3023 /* The name of the identifier. */
3024 const char *const name;
3025 /* The place where the IDENTIFIER_NODE should be stored. */
3026 tree *const node;
3027 /* Nonzero if this is the name of a constructor or destructor. */
3028 const int ctor_or_dtor_p;
3029 } predefined_identifier;
3031 /* Create all the predefined identifiers. */
3033 static void
3034 initialize_predefined_identifiers (void)
3036 const predefined_identifier *pid;
3038 /* A table of identifiers to create at startup. */
3039 static const predefined_identifier predefined_identifiers[] = {
3040 { "C++", &lang_name_cplusplus, 0 },
3041 { "C", &lang_name_c, 0 },
3042 { "Java", &lang_name_java, 0 },
3043 /* Some of these names have a trailing space so that it is
3044 impossible for them to conflict with names written by users. */
3045 { "__ct ", &ctor_identifier, 1 },
3046 { "__base_ctor ", &base_ctor_identifier, 1 },
3047 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3048 { "__dt ", &dtor_identifier, 1 },
3049 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3050 { "__base_dtor ", &base_dtor_identifier, 1 },
3051 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3052 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3053 { "nelts", &nelts_identifier, 0 },
3054 { THIS_NAME, &this_identifier, 0 },
3055 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3056 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3057 { "_vptr", &vptr_identifier, 0 },
3058 { "__vtt_parm", &vtt_parm_identifier, 0 },
3059 { "::", &global_scope_name, 0 },
3060 { "std", &std_identifier, 0 },
3061 { NULL, NULL, 0 }
3064 for (pid = predefined_identifiers; pid->name; ++pid)
3066 *pid->node = get_identifier (pid->name);
3067 if (pid->ctor_or_dtor_p)
3068 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3072 /* Create the predefined scalar types of C,
3073 and some nodes representing standard constants (0, 1, (void *)0).
3074 Initialize the global binding level.
3075 Make definitions for built-in primitive functions. */
3077 void
3078 cxx_init_decl_processing (void)
3080 tree void_ftype;
3081 tree void_ftype_ptr;
3083 build_common_tree_nodes (flag_signed_char, false);
3085 /* Create all the identifiers we need. */
3086 initialize_predefined_identifiers ();
3088 /* Create the global variables. */
3089 push_to_top_level ();
3091 current_function_decl = NULL_TREE;
3092 current_binding_level = NULL;
3093 /* Enter the global namespace. */
3094 gcc_assert (global_namespace == NULL_TREE);
3095 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3096 void_type_node);
3097 begin_scope (sk_namespace, global_namespace);
3099 current_lang_name = NULL_TREE;
3101 /* Adjust various flags based on command-line settings. */
3102 if (!flag_permissive)
3103 flag_pedantic_errors = 1;
3104 if (!flag_no_inline)
3106 flag_inline_trees = 1;
3107 flag_no_inline = 1;
3109 if (flag_inline_functions)
3110 flag_inline_trees = 2;
3112 /* Force minimum function alignment if using the least significant
3113 bit of function pointers to store the virtual bit. */
3114 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
3115 && force_align_functions_log < 1)
3116 force_align_functions_log = 1;
3118 /* Initially, C. */
3119 current_lang_name = lang_name_c;
3121 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
3122 TREE_TYPE (error_mark_list) = error_mark_node;
3124 /* Create the `std' namespace. */
3125 push_namespace (std_identifier);
3126 std_node = current_namespace;
3127 pop_namespace ();
3129 c_common_nodes_and_builtins ();
3131 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3132 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3133 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3134 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3135 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3136 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3137 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3138 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3140 integer_two_node = build_int_cst (NULL_TREE, 2);
3141 integer_three_node = build_int_cst (NULL_TREE, 3);
3143 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3144 truthvalue_type_node = boolean_type_node;
3145 truthvalue_false_node = boolean_false_node;
3146 truthvalue_true_node = boolean_true_node;
3148 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3150 #if 0
3151 record_builtin_type (RID_MAX, NULL, string_type_node);
3152 #endif
3154 delta_type_node = ptrdiff_type_node;
3155 vtable_index_type = ptrdiff_type_node;
3157 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3158 void_ftype = build_function_type (void_type_node, void_list_node);
3159 void_ftype_ptr = build_function_type (void_type_node,
3160 tree_cons (NULL_TREE,
3161 ptr_type_node,
3162 void_list_node));
3163 void_ftype_ptr
3164 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3166 /* C++ extensions */
3168 unknown_type_node = make_node (UNKNOWN_TYPE);
3169 record_unknown_type (unknown_type_node, "unknown type");
3171 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3172 TREE_TYPE (unknown_type_node) = unknown_type_node;
3174 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3175 result. */
3176 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3177 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3180 /* Make sure we get a unique function type, so we can give
3181 its pointer type a name. (This wins for gdb.) */
3182 tree vfunc_type = make_node (FUNCTION_TYPE);
3183 TREE_TYPE (vfunc_type) = integer_type_node;
3184 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3185 layout_type (vfunc_type);
3187 vtable_entry_type = build_pointer_type (vfunc_type);
3189 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3191 vtbl_type_node
3192 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3193 layout_type (vtbl_type_node);
3194 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3195 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3196 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3197 layout_type (vtbl_ptr_type_node);
3198 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3200 push_namespace (get_identifier ("__cxxabiv1"));
3201 abi_node = current_namespace;
3202 pop_namespace ();
3204 global_type_node = make_node (LANG_TYPE);
3205 record_unknown_type (global_type_node, "global type");
3207 /* Now, C++. */
3208 current_lang_name = lang_name_cplusplus;
3211 tree bad_alloc_id;
3212 tree bad_alloc_type_node;
3213 tree bad_alloc_decl;
3214 tree newtype, deltype;
3215 tree ptr_ftype_sizetype;
3217 push_namespace (std_identifier);
3218 bad_alloc_id = get_identifier ("bad_alloc");
3219 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3220 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3221 bad_alloc_decl
3222 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3223 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3224 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3225 pop_namespace ();
3227 ptr_ftype_sizetype
3228 = build_function_type (ptr_type_node,
3229 tree_cons (NULL_TREE,
3230 size_type_node,
3231 void_list_node));
3232 newtype = build_exception_variant
3233 (ptr_ftype_sizetype, add_exception_specifier
3234 (NULL_TREE, bad_alloc_type_node, -1));
3235 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3236 push_cp_library_fn (NEW_EXPR, newtype);
3237 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3238 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3239 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3242 abort_fndecl
3243 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3245 /* Perform other language dependent initializations. */
3246 init_class_processing ();
3247 init_rtti_processing ();
3249 if (flag_exceptions)
3250 init_exception_processing ();
3252 if (! supports_one_only ())
3253 flag_weak = 0;
3255 make_fname_decl = cp_make_fname_decl;
3256 start_fname_decls ();
3258 /* Show we use EH for cleanups. */
3259 if (flag_exceptions)
3260 using_eh_for_cleanups ();
3263 /* Generate an initializer for a function naming variable from
3264 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3265 filled in with the type of the init. */
3267 tree
3268 cp_fname_init (const char* name, tree *type_p)
3270 tree domain = NULL_TREE;
3271 tree type;
3272 tree init = NULL_TREE;
3273 size_t length = 0;
3275 if (name)
3277 length = strlen (name);
3278 domain = build_index_type (size_int (length));
3279 init = build_string (length + 1, name);
3282 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3283 type = build_cplus_array_type (type, domain);
3285 *type_p = type;
3287 if (init)
3288 TREE_TYPE (init) = type;
3289 else
3290 init = error_mark_node;
3292 return init;
3295 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3296 decl, NAME is the initialization string and TYPE_DEP indicates whether
3297 NAME depended on the type of the function. We make use of that to detect
3298 __PRETTY_FUNCTION__ inside a template fn. This is being done
3299 lazily at the point of first use, so we mustn't push the decl now. */
3301 static tree
3302 cp_make_fname_decl (tree id, int type_dep)
3304 const char *const name = (type_dep && processing_template_decl
3305 ? NULL : fname_as_string (type_dep));
3306 tree type;
3307 tree init = cp_fname_init (name, &type);
3308 tree decl = build_decl (VAR_DECL, id, type);
3310 if (name)
3311 free ((char *) name);
3313 /* As we're using pushdecl_with_scope, we must set the context. */
3314 DECL_CONTEXT (decl) = current_function_decl;
3315 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3317 TREE_STATIC (decl) = 1;
3318 TREE_READONLY (decl) = 1;
3319 DECL_ARTIFICIAL (decl) = 1;
3320 DECL_INITIAL (decl) = init;
3322 TREE_USED (decl) = 1;
3324 if (current_function_decl)
3326 struct cp_binding_level *b = current_binding_level;
3327 while (b->level_chain->kind != sk_function_parms)
3328 b = b->level_chain;
3329 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3330 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3331 LOOKUP_ONLYCONVERTING);
3333 else
3334 pushdecl_top_level_and_finish (decl, init);
3336 return decl;
3339 /* Make a definition for a builtin function named NAME in the current
3340 namespace, whose data type is TYPE and whose context is CONTEXT.
3341 TYPE should be a function type with argument types.
3343 CLASS and CODE tell later passes how to compile calls to this function.
3344 See tree.h for possible values.
3346 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3347 the name to be called if we can't opencode the function.
3348 If ATTRS is nonzero, use that for the function's attribute
3349 list. */
3351 static tree
3352 builtin_function_1 (const char* name,
3353 tree type,
3354 tree context,
3355 enum built_in_function code,
3356 enum built_in_class class,
3357 const char* libname,
3358 tree attrs)
3360 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3361 DECL_BUILT_IN_CLASS (decl) = class;
3362 DECL_FUNCTION_CODE (decl) = code;
3363 DECL_CONTEXT (decl) = context;
3365 pushdecl (decl);
3367 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3368 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3369 function in the namespace. */
3370 if (libname)
3371 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3373 /* A function in the user's namespace should have an explicit
3374 declaration before it is used. Mark the built-in function as
3375 anticipated but not actually declared. */
3376 if (name[0] != '_' || name[1] != '_')
3377 DECL_ANTICIPATED (decl) = 1;
3379 /* Possibly apply some default attributes to this built-in function. */
3380 if (attrs)
3381 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3382 else
3383 decl_attributes (&decl, NULL_TREE, 0);
3385 return decl;
3388 /* Entry point for the benefit of c_common_nodes_and_builtins.
3390 Make a definition for a builtin function named NAME and whose data type
3391 is TYPE. TYPE should be a function type with argument types. This
3392 function places the anticipated declaration in the global namespace
3393 and additionally in the std namespace if appropriate.
3395 CLASS and CODE tell later passes how to compile calls to this function.
3396 See tree.h for possible values.
3398 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3399 the name to be called if we can't opencode the function.
3401 If ATTRS is nonzero, use that for the function's attribute
3402 list. */
3404 tree
3405 builtin_function (const char* name,
3406 tree type,
3407 int code,
3408 enum built_in_class cl,
3409 const char* libname,
3410 tree attrs)
3412 /* All builtins that don't begin with an '_' should additionally
3413 go in the 'std' namespace. */
3414 if (name[0] != '_')
3416 push_namespace (std_identifier);
3417 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3418 pop_namespace ();
3421 return builtin_function_1 (name, type, NULL_TREE, code,
3422 cl, libname, attrs);
3425 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3426 function. Not called directly. */
3428 static tree
3429 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3431 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3432 DECL_EXTERNAL (fn) = 1;
3433 TREE_PUBLIC (fn) = 1;
3434 DECL_ARTIFICIAL (fn) = 1;
3435 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3436 SET_DECL_LANGUAGE (fn, lang_c);
3437 /* Runtime library routines are, by definition, available in an
3438 external shared object. */
3439 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3440 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3441 return fn;
3444 /* Returns the _DECL for a library function with C linkage.
3445 We assume that such functions never throw; if this is incorrect,
3446 callers should unset TREE_NOTHROW. */
3448 tree
3449 build_library_fn (tree name, tree type)
3451 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3452 TREE_NOTHROW (fn) = 1;
3453 return fn;
3456 /* Returns the _DECL for a library function with C++ linkage. */
3458 static tree
3459 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3461 tree fn = build_library_fn_1 (name, operator_code, type);
3462 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3463 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3464 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3465 return fn;
3468 /* Like build_library_fn, but takes a C string instead of an
3469 IDENTIFIER_NODE. */
3471 tree
3472 build_library_fn_ptr (const char* name, tree type)
3474 return build_library_fn (get_identifier (name), type);
3477 /* Like build_cp_library_fn, but takes a C string instead of an
3478 IDENTIFIER_NODE. */
3480 tree
3481 build_cp_library_fn_ptr (const char* name, tree type)
3483 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3486 /* Like build_library_fn, but also pushes the function so that we will
3487 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3489 tree
3490 push_library_fn (tree name, tree type)
3492 tree fn = build_library_fn (name, type);
3493 pushdecl_top_level (fn);
3494 return fn;
3497 /* Like build_cp_library_fn, but also pushes the function so that it
3498 will be found by normal lookup. */
3500 static tree
3501 push_cp_library_fn (enum tree_code operator_code, tree type)
3503 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3504 operator_code,
3505 type);
3506 pushdecl (fn);
3507 return fn;
3510 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3511 a FUNCTION_TYPE. */
3513 tree
3514 push_void_library_fn (tree name, tree parmtypes)
3516 tree type = build_function_type (void_type_node, parmtypes);
3517 return push_library_fn (name, type);
3520 /* Like push_library_fn, but also note that this function throws
3521 and does not return. Used for __throw_foo and the like. */
3523 tree
3524 push_throw_library_fn (tree name, tree type)
3526 tree fn = push_library_fn (name, type);
3527 TREE_THIS_VOLATILE (fn) = 1;
3528 TREE_NOTHROW (fn) = 0;
3529 return fn;
3532 /* When we call finish_struct for an anonymous union, we create
3533 default copy constructors and such. But, an anonymous union
3534 shouldn't have such things; this function undoes the damage to the
3535 anonymous union type T.
3537 (The reason that we create the synthesized methods is that we don't
3538 distinguish `union { int i; }' from `typedef union { int i; } U'.
3539 The first is an anonymous union; the second is just an ordinary
3540 union type.) */
3542 void
3543 fixup_anonymous_aggr (tree t)
3545 tree *q;
3547 /* Wipe out memory of synthesized methods. */
3548 TYPE_HAS_CONSTRUCTOR (t) = 0;
3549 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3550 TYPE_HAS_INIT_REF (t) = 0;
3551 TYPE_HAS_CONST_INIT_REF (t) = 0;
3552 TYPE_HAS_ASSIGN_REF (t) = 0;
3553 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3555 /* Splice the implicitly generated functions out of the TYPE_METHODS
3556 list. */
3557 q = &TYPE_METHODS (t);
3558 while (*q)
3560 if (DECL_ARTIFICIAL (*q))
3561 *q = TREE_CHAIN (*q);
3562 else
3563 q = &TREE_CHAIN (*q);
3566 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3567 if (TYPE_METHODS (t))
3568 error ("%Jan anonymous union cannot have function members",
3569 TYPE_MAIN_DECL (t));
3571 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3572 assignment operators (because they cannot have these methods themselves).
3573 For anonymous unions this is already checked because they are not allowed
3574 in any union, otherwise we have to check it. */
3575 if (TREE_CODE (t) != UNION_TYPE)
3577 tree field, type;
3579 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3580 if (TREE_CODE (field) == FIELD_DECL)
3582 type = TREE_TYPE (field);
3583 if (CLASS_TYPE_P (type))
3585 if (TYPE_NEEDS_CONSTRUCTING (type))
3586 error ("member %q+#D with constructor not allowed "
3587 "in anonymous aggregate", field);
3588 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3589 error ("member %q+#D with destructor not allowed "
3590 "in anonymous aggregate", field);
3591 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3592 error ("member %q+#D with copy assignment operator "
3593 "not allowed in anonymous aggregate", field);
3599 /* Make sure that a declaration with no declarator is well-formed, i.e.
3600 just declares a tagged type or anonymous union.
3602 Returns the type declared; or NULL_TREE if none. */
3604 tree
3605 check_tag_decl (cp_decl_specifier_seq *declspecs)
3607 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3608 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3609 /* If a class, struct, or enum type is declared by the DECLSPECS
3610 (i.e, if a class-specifier, enum-specifier, or non-typename
3611 elaborated-type-specifier appears in the DECLSPECS),
3612 DECLARED_TYPE is set to the corresponding type. */
3613 tree declared_type = NULL_TREE;
3614 bool error_p = false;
3616 if (declspecs->multiple_types_p)
3617 error ("multiple types in one declaration");
3618 else if (declspecs->redefined_builtin_type)
3620 if (!in_system_header)
3621 pedwarn ("redeclaration of C++ built-in type %qT",
3622 declspecs->redefined_builtin_type);
3623 return NULL_TREE;
3626 if (declspecs->type
3627 && TYPE_P (declspecs->type)
3628 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3629 && IS_AGGR_TYPE (declspecs->type))
3630 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3631 declared_type = declspecs->type;
3632 else if (declspecs->type == error_mark_node)
3633 error_p = true;
3634 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3635 pedwarn ("declaration does not declare anything");
3636 /* Check for an anonymous union. */
3637 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3638 && TYPE_ANONYMOUS_P (declared_type))
3640 /* 7/3 In a simple-declaration, the optional init-declarator-list
3641 can be omitted only when declaring a class (clause 9) or
3642 enumeration (7.2), that is, when the decl-specifier-seq contains
3643 either a class-specifier, an elaborated-type-specifier with
3644 a class-key (9.1), or an enum-specifier. In these cases and
3645 whenever a class-specifier or enum-specifier is present in the
3646 decl-specifier-seq, the identifiers in these specifiers are among
3647 the names being declared by the declaration (as class-name,
3648 enum-names, or enumerators, depending on the syntax). In such
3649 cases, and except for the declaration of an unnamed bit-field (9.6),
3650 the decl-specifier-seq shall introduce one or more names into the
3651 program, or shall redeclare a name introduced by a previous
3652 declaration. [Example:
3653 enum { }; // ill-formed
3654 typedef class { }; // ill-formed
3655 --end example] */
3656 if (saw_typedef)
3658 error ("missing type-name in typedef-declaration");
3659 return NULL_TREE;
3661 /* Anonymous unions are objects, so they can have specifiers. */;
3662 SET_ANON_AGGR_TYPE_P (declared_type);
3664 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3665 && !in_system_header)
3666 pedwarn ("ISO C++ prohibits anonymous structs");
3669 else
3671 if (declspecs->specs[(int)ds_inline]
3672 || declspecs->specs[(int)ds_virtual])
3673 error ("%qs can only be specified for functions",
3674 declspecs->specs[(int)ds_inline]
3675 ? "inline" : "virtual");
3676 else if (saw_friend
3677 && (!current_class_type
3678 || current_scope () != current_class_type))
3679 error ("%<friend%> can only be specified inside a class");
3680 else if (declspecs->specs[(int)ds_explicit])
3681 error ("%<explicit%> can only be specified for constructors");
3682 else if (declspecs->storage_class)
3683 error ("a storage class can only be specified for objects "
3684 "and functions");
3685 else if (declspecs->specs[(int)ds_const]
3686 || declspecs->specs[(int)ds_volatile]
3687 || declspecs->specs[(int)ds_restrict]
3688 || declspecs->specs[(int)ds_thread])
3689 error ("qualifiers can only be specified for objects "
3690 "and functions");
3693 return declared_type;
3696 /* Called when a declaration is seen that contains no names to declare.
3697 If its type is a reference to a structure, union or enum inherited
3698 from a containing scope, shadow that tag name for the current scope
3699 with a forward reference.
3700 If its type defines a new named structure or union
3701 or defines an enum, it is valid but we need not do anything here.
3702 Otherwise, it is an error.
3704 C++: may have to grok the declspecs to learn about static,
3705 complain for anonymous unions.
3707 Returns the TYPE declared -- or NULL_TREE if none. */
3709 tree
3710 shadow_tag (cp_decl_specifier_seq *declspecs)
3712 tree t = check_tag_decl (declspecs);
3714 if (!t)
3715 return NULL_TREE;
3717 if (declspecs->attributes)
3719 warning (0, "attribute ignored in declaration of %q+#T", t);
3720 warning (0, "attribute for %q+#T must follow the %qs keyword",
3721 t, class_key_or_enum_as_string (t));
3725 maybe_process_partial_specialization (t);
3727 /* This is where the variables in an anonymous union are
3728 declared. An anonymous union declaration looks like:
3729 union { ... } ;
3730 because there is no declarator after the union, the parser
3731 sends that declaration here. */
3732 if (ANON_AGGR_TYPE_P (t))
3734 fixup_anonymous_aggr (t);
3736 if (TYPE_FIELDS (t))
3738 tree decl = grokdeclarator (/*declarator=*/NULL,
3739 declspecs, NORMAL, 0, NULL);
3740 finish_anon_union (decl);
3744 return t;
3747 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3749 tree
3750 groktypename (cp_decl_specifier_seq *type_specifiers,
3751 const cp_declarator *declarator)
3753 tree attrs;
3754 tree type;
3755 attrs = type_specifiers->attributes;
3756 type_specifiers->attributes = NULL_TREE;
3757 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3758 if (attrs)
3759 cplus_decl_attributes (&type, attrs, 0);
3760 return type;
3763 /* Decode a declarator in an ordinary declaration or data definition.
3764 This is called as soon as the type information and variable name
3765 have been parsed, before parsing the initializer if any.
3766 Here we create the ..._DECL node, fill in its type,
3767 and put it on the list of decls for the current context.
3768 The ..._DECL node is returned as the value.
3770 Exception: for arrays where the length is not specified,
3771 the type is left null, to be filled in by `cp_finish_decl'.
3773 Function definitions do not come here; they go to start_function
3774 instead. However, external and forward declarations of functions
3775 do go through here. Structure field declarations are done by
3776 grokfield and not through here. */
3778 tree
3779 start_decl (const cp_declarator *declarator,
3780 cp_decl_specifier_seq *declspecs,
3781 int initialized,
3782 tree attributes,
3783 tree prefix_attributes,
3784 tree *pushed_scope_p)
3786 tree decl;
3787 tree type, tem;
3788 tree context;
3790 *pushed_scope_p = NULL_TREE;
3792 /* This should only be done once on the top most decl. */
3793 if (have_extern_spec)
3795 declspecs->storage_class = sc_extern;
3796 have_extern_spec = false;
3799 /* An object declared as __attribute__((deprecated)) suppresses
3800 warnings of uses of other deprecated items. */
3801 if (lookup_attribute ("deprecated", attributes))
3802 deprecated_state = DEPRECATED_SUPPRESS;
3804 attributes = chainon (attributes, prefix_attributes);
3806 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3807 &attributes);
3809 deprecated_state = DEPRECATED_NORMAL;
3811 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3812 || decl == error_mark_node)
3813 return error_mark_node;
3815 type = TREE_TYPE (decl);
3817 context = DECL_CONTEXT (decl);
3819 if (context)
3821 *pushed_scope_p = push_scope (context);
3823 /* We are only interested in class contexts, later. */
3824 if (TREE_CODE (context) == NAMESPACE_DECL)
3825 context = NULL_TREE;
3828 if (initialized)
3829 /* Is it valid for this decl to have an initializer at all?
3830 If not, set INITIALIZED to zero, which will indirectly
3831 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3832 switch (TREE_CODE (decl))
3834 case TYPE_DECL:
3835 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3836 initialized = 0;
3837 break;
3839 case FUNCTION_DECL:
3840 error ("function %q#D is initialized like a variable", decl);
3841 initialized = 0;
3842 break;
3844 default:
3845 break;
3848 if (initialized)
3850 if (! toplevel_bindings_p ()
3851 && DECL_EXTERNAL (decl))
3852 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3853 decl);
3854 DECL_EXTERNAL (decl) = 0;
3855 if (toplevel_bindings_p ())
3856 TREE_STATIC (decl) = 1;
3858 /* Tell `pushdecl' this is an initialized decl
3859 even though we don't yet have the initializer expression.
3860 Also tell `cp_finish_decl' it may store the real initializer. */
3861 DECL_INITIAL (decl) = error_mark_node;
3864 /* Set attributes here so if duplicate decl, will have proper attributes. */
3865 cplus_decl_attributes (&decl, attributes, 0);
3867 /* If #pragma weak was used, mark the decl weak now. */
3868 maybe_apply_pragma_weak (decl);
3870 if (TREE_CODE (decl) == FUNCTION_DECL
3871 && DECL_DECLARED_INLINE_P (decl)
3872 && DECL_UNINLINABLE (decl)
3873 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3874 warning (0, "inline function %q+D given attribute noinline", decl);
3876 if (context && COMPLETE_TYPE_P (complete_type (context)))
3878 if (TREE_CODE (decl) == VAR_DECL)
3880 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3881 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3882 error ("%q#D is not a static member of %q#T", decl, context);
3883 else
3885 if (DECL_CONTEXT (field) != context)
3887 if (!same_type_p (DECL_CONTEXT (field), context))
3888 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3889 "to be defined as %<%T::%D%>",
3890 DECL_CONTEXT (field), DECL_NAME (decl),
3891 context, DECL_NAME (decl));
3892 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3894 if (processing_specialization
3895 && template_class_depth (context) == 0
3896 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3897 error ("template header not allowed in member definition "
3898 "of explicitly specialized class");
3899 /* Static data member are tricky; an in-class initialization
3900 still doesn't provide a definition, so the in-class
3901 declaration will have DECL_EXTERNAL set, but will have an
3902 initialization. Thus, duplicate_decls won't warn
3903 about this situation, and so we check here. */
3904 if (DECL_INITIAL (decl)
3905 && DECL_INITIALIZED_IN_CLASS_P (field))
3906 error ("duplicate initialization of %qD", decl);
3907 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
3908 decl = field;
3911 else
3913 tree field = check_classfn (context, decl,
3914 (processing_template_decl
3915 > template_class_depth (context))
3916 ? current_template_parms
3917 : NULL_TREE);
3918 if (field && duplicate_decls (decl, field,
3919 /*newdecl_is_friend=*/false))
3920 decl = field;
3923 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3924 DECL_IN_AGGR_P (decl) = 0;
3925 /* Do not mark DECL as an explicit specialization if it was not
3926 already marked as an instantiation; a declaration should
3927 never be marked as a specialization unless we know what
3928 template is being specialized. */
3929 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3931 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3933 /* [temp.expl.spec] An explicit specialization of a static data
3934 member of a template is a definition if the declaration
3935 includes an initializer; otherwise, it is a declaration.
3937 We check for processing_specialization so this only applies
3938 to the new specialization syntax. */
3939 if (!DECL_INITIAL (decl)
3940 && processing_specialization)
3941 DECL_EXTERNAL (decl) = 1;
3944 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3945 pedwarn ("declaration of %q#D outside of class is not definition",
3946 decl);
3949 /* Enter this declaration into the symbol table. */
3950 tem = maybe_push_decl (decl);
3952 if (processing_template_decl)
3953 tem = push_template_decl (tem);
3954 if (tem == error_mark_node)
3955 return error_mark_node;
3957 /* Tell the back-end to use or not use .common as appropriate. If we say
3958 -fconserve-space, we want this to save .data space, at the expense of
3959 wrong semantics. If we say -fno-conserve-space, we want this to
3960 produce errors about redefs; to do this we force variables into the
3961 data segment. */
3962 if (flag_conserve_space
3963 && TREE_CODE (tem) == VAR_DECL
3964 && TREE_PUBLIC (tem)
3965 && !DECL_THREAD_LOCAL_P (tem)
3966 && !have_global_bss_p ())
3967 DECL_COMMON (tem) = 1;
3969 if (! processing_template_decl)
3970 start_decl_1 (tem);
3972 return tem;
3975 void
3976 start_decl_1 (tree decl)
3978 tree type = TREE_TYPE (decl);
3979 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3981 if (type == error_mark_node)
3982 return;
3984 if (initialized)
3985 /* Is it valid for this decl to have an initializer at all?
3986 If not, set INITIALIZED to zero, which will indirectly
3987 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3989 /* Don't allow initializations for incomplete types except for
3990 arrays which might be completed by the initialization. */
3991 if (COMPLETE_TYPE_P (complete_type (type)))
3992 ; /* A complete type is ok. */
3993 else if (TREE_CODE (type) != ARRAY_TYPE)
3995 error ("variable %q#D has initializer but incomplete type", decl);
3996 initialized = 0;
3997 type = TREE_TYPE (decl) = error_mark_node;
3999 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4001 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4002 error ("elements of array %q#D have incomplete type", decl);
4003 /* else we already gave an error in start_decl. */
4004 initialized = 0;
4008 if (!initialized
4009 && TREE_CODE (decl) != TYPE_DECL
4010 && TREE_CODE (decl) != TEMPLATE_DECL
4011 && type != error_mark_node
4012 && IS_AGGR_TYPE (type)
4013 && ! DECL_EXTERNAL (decl))
4015 if ((! processing_template_decl || ! uses_template_parms (type))
4016 && !COMPLETE_TYPE_P (complete_type (type)))
4018 error ("aggregate %q#D has incomplete type and cannot be defined",
4019 decl);
4020 /* Change the type so that assemble_variable will give
4021 DECL an rtl we can live with: (mem (const_int 0)). */
4022 type = TREE_TYPE (decl) = error_mark_node;
4024 else
4026 /* If any base type in the hierarchy of TYPE needs a constructor,
4027 then we set initialized to 1. This way any nodes which are
4028 created for the purposes of initializing this aggregate
4029 will live as long as it does. This is necessary for global
4030 aggregates which do not have their initializers processed until
4031 the end of the file. */
4032 initialized = TYPE_NEEDS_CONSTRUCTING (type);
4036 if (! initialized)
4037 DECL_INITIAL (decl) = NULL_TREE;
4039 /* Create a new scope to hold this declaration if necessary.
4040 Whether or not a new scope is necessary cannot be determined
4041 until after the type has been completed; if the type is a
4042 specialization of a class template it is not until after
4043 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4044 will be set correctly. */
4045 maybe_push_cleanup_level (type);
4048 /* Handle initialization of references. DECL, TYPE, and INIT have the
4049 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4050 but will be set to a new CLEANUP_STMT if a temporary is created
4051 that must be destroyed subsequently.
4053 Returns an initializer expression to use to initialize DECL, or
4054 NULL if the initialization can be performed statically.
4056 Quotes on semantics can be found in ARM 8.4.3. */
4058 static tree
4059 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4061 tree tmp;
4063 if (init == NULL_TREE)
4065 if ((DECL_LANG_SPECIFIC (decl) == 0
4066 || DECL_IN_AGGR_P (decl) == 0)
4067 && ! DECL_THIS_EXTERN (decl))
4068 error ("%qD declared as reference but not initialized", decl);
4069 return NULL_TREE;
4072 if (TREE_CODE (init) == CONSTRUCTOR)
4074 error ("ISO C++ forbids use of initializer list to "
4075 "initialize reference %qD", decl);
4076 return NULL_TREE;
4079 if (TREE_CODE (init) == TREE_LIST)
4080 init = build_x_compound_expr_from_list (init, "initializer");
4082 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4083 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4084 /* Note: default conversion is only called in very special cases. */
4085 init = decay_conversion (init);
4087 /* Convert INIT to the reference type TYPE. This may involve the
4088 creation of a temporary, whose lifetime must be the same as that
4089 of the reference. If so, a DECL_EXPR for the temporary will be
4090 added just after the DECL_EXPR for DECL. That's why we don't set
4091 DECL_INITIAL for local references (instead assigning to them
4092 explicitly); we need to allow the temporary to be initialized
4093 first. */
4094 tmp = initialize_reference (type, init, decl, cleanup);
4096 if (tmp == error_mark_node)
4097 return NULL_TREE;
4098 else if (tmp == NULL_TREE)
4100 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4101 return NULL_TREE;
4104 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4105 return tmp;
4107 DECL_INITIAL (decl) = tmp;
4109 return NULL_TREE;
4112 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4113 array until we finish parsing the initializer. If that's the
4114 situation we're in, update DECL accordingly. */
4116 static void
4117 maybe_deduce_size_from_array_init (tree decl, tree init)
4119 tree type = TREE_TYPE (decl);
4121 if (TREE_CODE (type) == ARRAY_TYPE
4122 && TYPE_DOMAIN (type) == NULL_TREE
4123 && TREE_CODE (decl) != TYPE_DECL)
4125 /* do_default is really a C-ism to deal with tentative definitions.
4126 But let's leave it here to ease the eventual merge. */
4127 int do_default = !DECL_EXTERNAL (decl);
4128 tree initializer = init ? init : DECL_INITIAL (decl);
4129 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4130 do_default);
4132 if (failure == 1)
4133 error ("initializer fails to determine size of %qD", decl);
4135 if (failure == 2)
4137 if (do_default)
4138 error ("array size missing in %qD", decl);
4139 /* If a `static' var's size isn't known, make it extern as
4140 well as static, so it does not get allocated. If it's not
4141 `static', then don't mark it extern; finish_incomplete_decl
4142 will give it a default size and it will get allocated. */
4143 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4144 DECL_EXTERNAL (decl) = 1;
4147 if (failure == 3)
4148 error ("zero-size array %qD", decl);
4150 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4152 layout_decl (decl, 0);
4156 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4157 any appropriate error messages regarding the layout. */
4159 static void
4160 layout_var_decl (tree decl)
4162 tree type = TREE_TYPE (decl);
4164 /* If we haven't already layed out this declaration, do so now.
4165 Note that we must not call complete type for an external object
4166 because it's type might involve templates that we are not
4167 supposed to instantiate yet. (And it's perfectly valid to say
4168 `extern X x' for some incomplete type `X'.) */
4169 if (!DECL_EXTERNAL (decl))
4170 complete_type (type);
4171 if (!DECL_SIZE (decl)
4172 && TREE_TYPE (decl) != error_mark_node
4173 && (COMPLETE_TYPE_P (type)
4174 || (TREE_CODE (type) == ARRAY_TYPE
4175 && !TYPE_DOMAIN (type)
4176 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4177 layout_decl (decl, 0);
4179 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4181 /* An automatic variable with an incomplete type: that is an error.
4182 Don't talk about array types here, since we took care of that
4183 message in grokdeclarator. */
4184 error ("storage size of %qD isn't known", decl);
4185 TREE_TYPE (decl) = error_mark_node;
4187 #if 0
4188 /* Keep this code around in case we later want to control debug info
4189 based on whether a type is "used". (jason 1999-11-11) */
4191 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4192 /* Let debugger know it should output info for this type. */
4193 note_debug_info_needed (ttype);
4195 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4196 note_debug_info_needed (DECL_CONTEXT (decl));
4197 #endif
4199 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4200 && DECL_SIZE (decl) != NULL_TREE
4201 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4203 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4204 constant_expression_warning (DECL_SIZE (decl));
4205 else
4206 error ("storage size of %qD isn't constant", decl);
4209 if (TREE_STATIC (decl)
4210 && !DECL_ARTIFICIAL (decl)
4211 && current_function_decl
4212 && DECL_CONTEXT (decl) == current_function_decl)
4213 push_local_name (decl);
4216 /* If a local static variable is declared in an inline function, or if
4217 we have a weak definition, we must endeavor to create only one
4218 instance of the variable at link-time. */
4220 static void
4221 maybe_commonize_var (tree decl)
4223 /* Static data in a function with comdat linkage also has comdat
4224 linkage. */
4225 if (TREE_STATIC (decl)
4226 /* Don't mess with __FUNCTION__. */
4227 && ! DECL_ARTIFICIAL (decl)
4228 && DECL_FUNCTION_SCOPE_P (decl)
4229 /* Unfortunately, import_export_decl has not always been called
4230 before the function is processed, so we cannot simply check
4231 DECL_COMDAT. */
4232 && (DECL_COMDAT (DECL_CONTEXT (decl))
4233 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4234 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4235 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4237 if (flag_weak)
4239 /* With weak symbols, we simply make the variable COMDAT;
4240 that will cause copies in multiple translations units to
4241 be merged. */
4242 comdat_linkage (decl);
4244 else
4246 if (DECL_INITIAL (decl) == NULL_TREE
4247 || DECL_INITIAL (decl) == error_mark_node)
4249 /* Without weak symbols, we can use COMMON to merge
4250 uninitialized variables. */
4251 TREE_PUBLIC (decl) = 1;
4252 DECL_COMMON (decl) = 1;
4254 else
4256 /* While for initialized variables, we must use internal
4257 linkage -- which means that multiple copies will not
4258 be merged. */
4259 TREE_PUBLIC (decl) = 0;
4260 DECL_COMMON (decl) = 0;
4261 warning (0, "sorry: semantics of inline function static "
4262 "data %q+#D are wrong (you'll wind up "
4263 "with multiple copies)", decl);
4264 warning (0, "%J you can work around this by removing "
4265 "the initializer",
4266 decl);
4270 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4271 /* Set it up again; we might have set DECL_INITIAL since the last
4272 time. */
4273 comdat_linkage (decl);
4276 /* Issue an error message if DECL is an uninitialized const variable. */
4278 static void
4279 check_for_uninitialized_const_var (tree decl)
4281 tree type = TREE_TYPE (decl);
4283 /* ``Unless explicitly declared extern, a const object does not have
4284 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4285 7.1.6 */
4286 if (TREE_CODE (decl) == VAR_DECL
4287 && TREE_CODE (type) != REFERENCE_TYPE
4288 && CP_TYPE_CONST_P (type)
4289 && !TYPE_NEEDS_CONSTRUCTING (type)
4290 && !DECL_INITIAL (decl))
4291 error ("uninitialized const %qD", decl);
4295 /* Structure holding the current initializer being processed by reshape_init.
4296 CUR is a pointer to the current element being processed, END is a pointer
4297 after the last element present in the initializer. */
4298 typedef struct reshape_iterator_t
4300 constructor_elt *cur;
4301 constructor_elt *end;
4302 } reshape_iter;
4304 static tree reshape_init_r (tree, reshape_iter *, bool);
4306 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4307 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4308 initialized. If there are no more such fields, the return value
4309 will be NULL. */
4311 static tree
4312 next_initializable_field (tree field)
4314 while (field
4315 && (TREE_CODE (field) != FIELD_DECL
4316 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4317 || DECL_ARTIFICIAL (field)))
4318 field = TREE_CHAIN (field);
4320 return field;
4323 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4324 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4325 INTEGER_CST representing the size of the array minus one (the maximum index),
4326 or NULL_TREE if the array was declared without specifying the size. D is
4327 the iterator within the constructor. */
4329 static tree
4330 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4332 tree new_init;
4333 bool sized_array_p = (max_index != NULL_TREE);
4334 unsigned HOST_WIDE_INT max_index_cst = 0;
4335 unsigned HOST_WIDE_INT index;
4337 /* The initializer for an array is always a CONSTRUCTOR. */
4338 new_init = build_constructor (NULL_TREE, NULL);
4340 if (sized_array_p)
4342 /* Minus 1 is used for zero sized arrays. */
4343 if (integer_all_onesp (max_index))
4344 return new_init;
4346 if (host_integerp (max_index, 1))
4347 max_index_cst = tree_low_cst (max_index, 1);
4348 /* sizetype is sign extended, not zero extended. */
4349 else
4350 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4354 /* Loop until there are no more initializers. */
4355 for (index = 0;
4356 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4357 ++index)
4359 tree elt_init;
4361 if (d->cur->index)
4363 /* Handle array designated initializers (GNU extension). */
4364 if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
4366 error ("name %qD used in a GNU-style designated "
4367 "initializer for an array", d->cur->index);
4369 else
4370 gcc_unreachable ();
4373 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4374 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4377 return new_init;
4380 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4381 Parameters are the same of reshape_init_r. */
4383 static tree
4384 reshape_init_array (tree type, reshape_iter *d)
4386 tree max_index = NULL_TREE;
4388 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4390 if (TYPE_DOMAIN (type))
4391 max_index = array_type_nelts (type);
4393 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4396 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4397 Parameters are the same of reshape_init_r. */
4399 static tree
4400 reshape_init_vector (tree type, reshape_iter *d)
4402 tree max_index = NULL_TREE;
4403 tree rtype;
4405 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4407 if (COMPOUND_LITERAL_P (d->cur->value))
4409 tree value = d->cur->value;
4410 if (!same_type_p (TREE_TYPE (value), type))
4412 error ("invalid type %qT as initializer for a vector of type %qT",
4413 TREE_TYPE (d->cur->value), type);
4414 value = error_mark_node;
4416 ++d->cur;
4417 return value;
4420 /* For a vector, the representation type is a struct
4421 containing a single member which is an array of the
4422 appropriate size. */
4423 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4424 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4425 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4427 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4430 /* Subroutine of reshape_init_r, processes the initializers for classes
4431 or union. Parameters are the same of reshape_init_r. */
4433 static tree
4434 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4436 tree field;
4437 tree new_init;
4439 gcc_assert (CLASS_TYPE_P (type));
4441 /* The initializer for a class is always a CONSTRUCTOR. */
4442 new_init = build_constructor (NULL_TREE, NULL);
4443 field = next_initializable_field (TYPE_FIELDS (type));
4445 if (!field)
4447 /* [dcl.init.aggr]
4449 An initializer for an aggregate member that is an
4450 empty class shall have the form of an empty
4451 initializer-list {}. */
4452 if (!first_initializer_p)
4454 error ("initializer for %qT must be brace-enclosed", type);
4455 return error_mark_node;
4457 return new_init;
4460 /* Loop through the initializable fields, gathering initializers. */
4461 while (d->cur != d->end)
4463 tree field_init;
4465 /* Handle designated initializers, as an extension. */
4466 if (d->cur->index)
4468 if (pedantic)
4469 pedwarn ("ISO C++ does not allow designated initializers");
4471 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4473 if (!field || TREE_CODE (field) != FIELD_DECL)
4474 error ("%qT has no non-static data member named %qD", type,
4475 d->cur->index);
4478 /* If we processed all the member of the class, we are done. */
4479 if (!field)
4480 break;
4482 field_init = reshape_init_r (TREE_TYPE (field), d,
4483 /*first_initializer_p=*/false);
4484 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4486 /* [dcl.init.aggr]
4488 When a union is initialized with a brace-enclosed
4489 initializer, the braces shall only contain an
4490 initializer for the first member of the union. */
4491 if (TREE_CODE (type) == UNION_TYPE)
4492 break;
4494 field = next_initializable_field (TREE_CHAIN (field));
4497 return new_init;
4500 /* Subroutine of reshape_init, which processes a single initializer (part of
4501 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4502 iterator within the CONSTRUCTOR which points to the initializer to process.
4503 FIRST_INITIALIZER_P is true if this is the first initializer of the
4504 CONSTRUCTOR node. */
4506 static tree
4507 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4509 tree init = d->cur->value;
4511 /* A non-aggregate type is always initialized with a single
4512 initializer. */
4513 if (!CP_AGGREGATE_TYPE_P (type))
4515 /* It is invalid to initialize a non-aggregate type with a
4516 brace-enclosed initializer.
4517 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4518 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4519 a CONSTRUCTOR (with a record type). */
4520 if (TREE_CODE (init) == CONSTRUCTOR
4521 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4523 error ("braces around scalar initializer for type %qT", type);
4524 init = error_mark_node;
4527 d->cur++;
4528 return init;
4531 /* [dcl.init.aggr]
4533 All implicit type conversions (clause _conv_) are considered when
4534 initializing the aggregate member with an initializer from an
4535 initializer-list. If the initializer can initialize a member,
4536 the member is initialized. Otherwise, if the member is itself a
4537 non-empty subaggregate, brace elision is assumed and the
4538 initializer is considered for the initialization of the first
4539 member of the subaggregate. */
4540 if (TREE_CODE (init) != CONSTRUCTOR
4541 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4543 d->cur++;
4544 return init;
4547 /* [dcl.init.string]
4549 A char array (whether plain char, signed char, or unsigned char)
4550 can be initialized by a string-literal (optionally enclosed in
4551 braces); a wchar_t array can be initialized by a wide
4552 string-literal (optionally enclosed in braces). */
4553 if (TREE_CODE (type) == ARRAY_TYPE
4554 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4556 tree str_init = init;
4558 /* Strip one level of braces if and only if they enclose a single
4559 element (as allowed by [dcl.init.string]). */
4560 if (!first_initializer_p
4561 && TREE_CODE (str_init) == CONSTRUCTOR
4562 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4564 str_init = VEC_index (constructor_elt,
4565 CONSTRUCTOR_ELTS (str_init), 0)->value;
4568 /* If it's a string literal, then it's the initializer for the array
4569 as a whole. Otherwise, continue with normal initialization for
4570 array types (one value per array element). */
4571 if (TREE_CODE (str_init) == STRING_CST)
4573 d->cur++;
4574 return str_init;
4578 /* The following cases are about aggregates. If we are not within a full
4579 initializer already, and there is not a CONSTRUCTOR, it means that there
4580 is a missing set of braces (that is, we are processing the case for
4581 which reshape_init exists). */
4582 if (!first_initializer_p)
4584 if (TREE_CODE (init) == CONSTRUCTOR)
4586 /* For a nested compound literal, there is no need to reshape since
4587 brace elision is not allowed. Even if we decided to allow it,
4588 we should add a call to reshape_init in finish_compound_literal,
4589 before calling digest_init, so changing this code would still
4590 not be necessary. */
4591 if (!COMPOUND_LITERAL_P (init))
4593 ++d->cur;
4594 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4595 return reshape_init (type, init);
4597 else
4598 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4601 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4602 type);
4605 /* Dispatch to specialized routines. */
4606 if (CLASS_TYPE_P (type))
4607 return reshape_init_class (type, d, first_initializer_p);
4608 else if (TREE_CODE (type) == ARRAY_TYPE)
4609 return reshape_init_array (type, d);
4610 else if (TREE_CODE (type) == VECTOR_TYPE)
4611 return reshape_init_vector (type, d);
4612 else
4613 gcc_unreachable();
4616 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4617 brace-enclosed aggregate initializer.
4619 INIT is the CONSTRUCTOR containing the list of initializers describing
4620 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4621 It may not presently match the shape of the TYPE; for example:
4623 struct S { int a; int b; };
4624 struct S a[] = { 1, 2, 3, 4 };
4626 Here INIT will hold a VEC of four elements, rather than a
4627 VEC of two elements, each itself a VEC of two elements. This
4628 routine transforms INIT from the former form into the latter. The
4629 revised CONSTRUCTOR node is returned. */
4631 tree
4632 reshape_init (tree type, tree init)
4634 VEC(constructor_elt, gc) *v;
4635 reshape_iter d;
4636 tree new_init;
4638 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4640 v = CONSTRUCTOR_ELTS (init);
4642 /* An empty constructor does not need reshaping, and it is always a valid
4643 initializer. */
4644 if (VEC_empty (constructor_elt, v))
4645 return init;
4647 /* Recurse on this CONSTRUCTOR. */
4648 d.cur = VEC_index (constructor_elt, v, 0);
4649 d.end = d.cur + VEC_length (constructor_elt, v);
4651 new_init = reshape_init_r (type, &d, true);
4653 /* Make sure all the element of the constructor were used. Otherwise,
4654 issue an error about exceeding initializers. */
4655 if (d.cur != d.end)
4656 error ("too many initializers for %qT", type);
4658 return new_init;
4661 /* Verify INIT (the initializer for DECL), and record the
4662 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4663 grok_reference_init.
4665 If the return value is non-NULL, it is an expression that must be
4666 evaluated dynamically to initialize DECL. */
4668 static tree
4669 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4671 tree type = TREE_TYPE (decl);
4672 tree init_code = NULL;
4674 /* If `start_decl' didn't like having an initialization, ignore it now. */
4675 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4676 init = NULL_TREE;
4678 /* If an initializer is present, DECL_INITIAL has been
4679 error_mark_node, to indicate that an as-of-yet unevaluated
4680 initialization will occur. From now on, DECL_INITIAL reflects
4681 the static initialization -- if any -- of DECL. */
4682 DECL_INITIAL (decl) = NULL_TREE;
4684 /* Things that are going to be initialized need to have complete
4685 type. */
4686 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4688 if (type == error_mark_node)
4689 /* We will have already complained. */
4690 init = NULL_TREE;
4691 else if (init && COMPLETE_TYPE_P (type)
4692 && !TREE_CONSTANT (TYPE_SIZE (type)))
4694 error ("variable-sized object %qD may not be initialized", decl);
4695 init = NULL_TREE;
4697 else if (TREE_CODE (type) == ARRAY_TYPE
4698 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4700 error ("elements of array %q#D have incomplete type", decl);
4701 init = NULL_TREE;
4703 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4705 error ("%qD has incomplete type", decl);
4706 TREE_TYPE (decl) = error_mark_node;
4707 init = NULL_TREE;
4710 if (TREE_CODE (decl) == CONST_DECL)
4712 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
4714 DECL_INITIAL (decl) = init;
4716 gcc_assert (init != NULL_TREE);
4717 init = NULL_TREE;
4719 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4720 init = grok_reference_init (decl, type, init, cleanup);
4721 else if (init)
4723 /* Do not reshape constructors of vectors (they don't need to be
4724 reshaped. */
4725 if (TREE_CODE (init) == CONSTRUCTOR
4726 && !COMPOUND_LITERAL_P (init)
4727 && !TREE_TYPE (init)) /* ptrmemfunc */
4729 init = reshape_init (type, init);
4731 if ((*targetm.vector_opaque_p) (type))
4733 error ("opaque vector types cannot be initialized");
4734 init = error_mark_node;
4738 /* If DECL has an array type without a specific bound, deduce the
4739 array size from the initializer. */
4740 maybe_deduce_size_from_array_init (decl, init);
4741 type = TREE_TYPE (decl);
4743 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4745 if (TREE_CODE (type) == ARRAY_TYPE)
4746 goto initialize_aggr;
4747 else if (TREE_CODE (init) == CONSTRUCTOR)
4749 if (TYPE_NON_AGGREGATE_CLASS (type))
4751 error ("%qD must be initialized by constructor, "
4752 "not by %<{...}%>",
4753 decl);
4754 init = error_mark_node;
4756 else
4757 goto dont_use_constructor;
4759 else
4761 int saved_stmts_are_full_exprs_p;
4763 initialize_aggr:
4764 saved_stmts_are_full_exprs_p = 0;
4765 if (building_stmt_tree ())
4767 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4768 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4770 init = build_aggr_init (decl, init, flags);
4771 if (building_stmt_tree ())
4772 current_stmt_tree ()->stmts_are_full_exprs_p =
4773 saved_stmts_are_full_exprs_p;
4774 return init;
4777 else
4779 dont_use_constructor:
4780 if (TREE_CODE (init) != TREE_VEC)
4782 init_code = store_init_value (decl, init);
4783 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4784 && DECL_INITIAL (decl)
4785 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4786 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4787 warning (0, "array %qD initialized by parenthesized string literal %qE",
4788 decl, DECL_INITIAL (decl));
4789 init = NULL;
4793 else if (DECL_EXTERNAL (decl))
4795 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4796 goto initialize_aggr;
4797 else if (IS_AGGR_TYPE (type))
4799 tree core_type = strip_array_types (type);
4801 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4802 error ("structure %qD with uninitialized const members", decl);
4803 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4804 error ("structure %qD with uninitialized reference members", decl);
4806 check_for_uninitialized_const_var (decl);
4808 else
4809 check_for_uninitialized_const_var (decl);
4811 if (init && init != error_mark_node)
4812 init_code = build2 (INIT_EXPR, type, decl, init);
4814 return init_code;
4817 /* If DECL is not a local variable, give it RTL. */
4819 static void
4820 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4822 int toplev = toplevel_bindings_p ();
4823 int defer_p;
4824 const char *filename;
4826 /* Set the DECL_ASSEMBLER_NAME for the object. */
4827 if (asmspec)
4829 /* The `register' keyword, when used together with an
4830 asm-specification, indicates that the variable should be
4831 placed in a particular register. */
4832 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4834 set_user_assembler_name (decl, asmspec);
4835 DECL_HARD_REGISTER (decl) = 1;
4837 else
4839 if (TREE_CODE (decl) == FUNCTION_DECL
4840 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4841 set_builtin_user_assembler_name (decl, asmspec);
4842 set_user_assembler_name (decl, asmspec);
4846 /* Handle non-variables up front. */
4847 if (TREE_CODE (decl) != VAR_DECL)
4849 rest_of_decl_compilation (decl, toplev, at_eof);
4850 return;
4853 /* If we see a class member here, it should be a static data
4854 member. */
4855 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4857 gcc_assert (TREE_STATIC (decl));
4858 /* An in-class declaration of a static data member should be
4859 external; it is only a declaration, and not a definition. */
4860 if (init == NULL_TREE)
4861 gcc_assert (DECL_EXTERNAL (decl));
4864 /* We don't create any RTL for local variables. */
4865 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4866 return;
4868 /* We defer emission of local statics until the corresponding
4869 DECL_EXPR is expanded. */
4870 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4872 /* We try to defer namespace-scope static constants so that they are
4873 not emitted into the object file unnecessarily. */
4874 filename = input_filename;
4875 if (!DECL_VIRTUAL_P (decl)
4876 && TREE_READONLY (decl)
4877 && DECL_INITIAL (decl) != NULL_TREE
4878 && DECL_INITIAL (decl) != error_mark_node
4879 && filename != NULL
4880 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4881 && toplev
4882 && !TREE_PUBLIC (decl))
4884 /* Fool with the linkage of static consts according to #pragma
4885 interface. */
4886 struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
4887 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4889 TREE_PUBLIC (decl) = 1;
4890 DECL_EXTERNAL (decl) = finfo->interface_only;
4893 defer_p = 1;
4895 /* Likewise for template instantiations. */
4896 else if (DECL_LANG_SPECIFIC (decl)
4897 && DECL_IMPLICIT_INSTANTIATION (decl))
4898 defer_p = 1;
4900 /* If we're not deferring, go ahead and assemble the variable. */
4901 if (!defer_p)
4902 rest_of_decl_compilation (decl, toplev, at_eof);
4905 /* Generate code to initialize DECL (a local variable). */
4907 static void
4908 initialize_local_var (tree decl, tree init)
4910 tree type = TREE_TYPE (decl);
4911 tree cleanup;
4913 gcc_assert (TREE_CODE (decl) == VAR_DECL
4914 || TREE_CODE (decl) == RESULT_DECL);
4915 gcc_assert (!TREE_STATIC (decl));
4917 if (DECL_SIZE (decl) == NULL_TREE)
4919 /* If we used it already as memory, it must stay in memory. */
4920 DECL_INITIAL (decl) = NULL_TREE;
4921 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4924 if (DECL_SIZE (decl) && type != error_mark_node)
4926 int already_used;
4928 /* Compute and store the initial value. */
4929 already_used = TREE_USED (decl) || TREE_USED (type);
4931 /* Perform the initialization. */
4932 if (init)
4934 int saved_stmts_are_full_exprs_p;
4936 gcc_assert (building_stmt_tree ());
4937 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4938 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4939 finish_expr_stmt (init);
4940 current_stmt_tree ()->stmts_are_full_exprs_p =
4941 saved_stmts_are_full_exprs_p;
4944 /* Set this to 0 so we can tell whether an aggregate which was
4945 initialized was ever used. Don't do this if it has a
4946 destructor, so we don't complain about the 'resource
4947 allocation is initialization' idiom. Now set
4948 attribute((unused)) on types so decls of that type will be
4949 marked used. (see TREE_USED, above.) */
4950 if (TYPE_NEEDS_CONSTRUCTING (type)
4951 && ! already_used
4952 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4953 && DECL_NAME (decl))
4954 TREE_USED (decl) = 0;
4955 else if (already_used)
4956 TREE_USED (decl) = 1;
4959 /* Generate a cleanup, if necessary. */
4960 cleanup = cxx_maybe_build_cleanup (decl);
4961 if (DECL_SIZE (decl) && cleanup)
4962 finish_decl_cleanup (decl, cleanup);
4965 /* DECL is a VAR_DECL for a compiler-generated variable with static
4966 storage duration (like a virtual table) whose initializer is a
4967 compile-time constant. INIT must be either a TREE_LIST of values,
4968 or a CONSTRUCTOR. Initialize the variable and provide it to the
4969 back end. */
4971 void
4972 initialize_artificial_var (tree decl, tree init)
4974 if (TREE_CODE (init) == TREE_LIST)
4975 init = build_constructor_from_list (NULL_TREE, init);
4976 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
4977 DECL_INITIAL (decl) = init;
4978 DECL_INITIALIZED_P (decl) = 1;
4979 determine_visibility (decl);
4980 layout_var_decl (decl);
4981 maybe_commonize_var (decl);
4982 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4985 /* Finish processing of a declaration;
4986 install its line number and initial value.
4987 If the length of an array type is not known before,
4988 it must be determined now, from the initial value, or it is an error.
4990 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
4991 true, then INIT is an integral constant expression.
4993 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4994 if the (init) syntax was used. */
4996 void
4997 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
4998 tree asmspec_tree, int flags)
5000 tree type;
5001 tree cleanup;
5002 const char *asmspec = NULL;
5003 int was_readonly = 0;
5004 bool var_definition_p = false;
5006 if (decl == error_mark_node)
5007 return;
5008 else if (! decl)
5010 if (init)
5011 error ("assignment (not initialization) in declaration");
5012 return;
5015 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5017 /* Assume no cleanup is required. */
5018 cleanup = NULL_TREE;
5020 /* If a name was specified, get the string. */
5021 if (global_scope_p (current_binding_level))
5022 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5023 if (asmspec_tree)
5024 asmspec = TREE_STRING_POINTER (asmspec_tree);
5026 if (init && TREE_CODE (init) == NAMESPACE_DECL)
5028 error ("cannot initialize %qD to namespace %qD", decl, init);
5029 init = NULL_TREE;
5032 if (current_class_type
5033 && CP_DECL_CONTEXT (decl) == current_class_type
5034 && TYPE_BEING_DEFINED (current_class_type)
5035 && (DECL_INITIAL (decl) || init))
5036 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5038 type = TREE_TYPE (decl);
5040 if (type == error_mark_node)
5041 goto finish_end;
5043 if (processing_template_decl)
5045 /* Add this declaration to the statement-tree. */
5046 if (at_function_scope_p ())
5047 add_decl_expr (decl);
5049 if (init && DECL_INITIAL (decl))
5051 DECL_INITIAL (decl) = init;
5052 if (init_const_expr_p)
5054 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5055 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5056 TREE_CONSTANT (decl) = 1;
5060 if (TREE_CODE (decl) == VAR_DECL
5061 && !DECL_PRETTY_FUNCTION_P (decl)
5062 && !dependent_type_p (TREE_TYPE (decl)))
5063 maybe_deduce_size_from_array_init (decl, init);
5065 goto finish_end;
5068 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5069 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5071 /* Take care of TYPE_DECLs up front. */
5072 if (TREE_CODE (decl) == TYPE_DECL)
5074 if (type != error_mark_node
5075 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
5077 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5078 warning (0, "shadowing previous type declaration of %q#D", decl);
5079 set_identifier_type_value (DECL_NAME (decl), decl);
5082 /* If we have installed this as the canonical typedef for this
5083 type, and that type has not been defined yet, delay emitting
5084 the debug information for it, as we will emit it later. */
5085 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5086 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5087 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5089 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5090 at_eof);
5091 goto finish_end;
5094 /* A reference will be modified here, as it is initialized. */
5095 if (! DECL_EXTERNAL (decl)
5096 && TREE_READONLY (decl)
5097 && TREE_CODE (type) == REFERENCE_TYPE)
5099 was_readonly = 1;
5100 TREE_READONLY (decl) = 0;
5103 if (TREE_CODE (decl) == VAR_DECL)
5105 /* Only PODs can have thread-local storage. Other types may require
5106 various kinds of non-trivial initialization. */
5107 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5108 error ("%qD cannot be thread-local because it has non-POD type %qT",
5109 decl, TREE_TYPE (decl));
5110 /* Convert the initializer to the type of DECL, if we have not
5111 already initialized DECL. */
5112 if (!DECL_INITIALIZED_P (decl)
5113 /* If !DECL_EXTERNAL then DECL is being defined. In the
5114 case of a static data member initialized inside the
5115 class-specifier, there can be an initializer even if DECL
5116 is *not* defined. */
5117 && (!DECL_EXTERNAL (decl) || init))
5119 if (init)
5121 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5122 if (init_const_expr_p)
5124 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5125 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5126 TREE_CONSTANT (decl) = 1;
5129 init = check_initializer (decl, init, flags, &cleanup);
5130 /* Thread-local storage cannot be dynamically initialized. */
5131 if (DECL_THREAD_LOCAL_P (decl) && init)
5133 error ("%qD is thread-local and so cannot be dynamically "
5134 "initialized", decl);
5135 init = NULL_TREE;
5138 /* Check that the initializer for a static data member was a
5139 constant. Although we check in the parser that the
5140 initializer is an integral constant expression, we do not
5141 simplify division-by-zero at the point at which it
5142 occurs. Therefore, in:
5144 struct S { static const int i = 7 / 0; };
5146 we issue an error at this point. It would
5147 probably be better to forbid division by zero in
5148 integral constant expressions. */
5149 if (DECL_EXTERNAL (decl) && init)
5151 error ("%qD cannot be initialized by a non-constant expression"
5152 " when being declared", decl);
5153 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5154 init = NULL_TREE;
5157 /* Handle:
5159 [dcl.init]
5161 The memory occupied by any object of static storage
5162 duration is zero-initialized at program startup before
5163 any other initialization takes place.
5165 We cannot create an appropriate initializer until after
5166 the type of DECL is finalized. If DECL_INITIAL is set,
5167 then the DECL is statically initialized, and any
5168 necessary zero-initialization has already been performed. */
5169 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5170 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5171 /*nelts=*/NULL_TREE,
5172 /*static_storage_p=*/true);
5173 /* Remember that the initialization for this variable has
5174 taken place. */
5175 DECL_INITIALIZED_P (decl) = 1;
5176 /* This declaration is the definition of this variable,
5177 unless we are initializing a static data member within
5178 the class specifier. */
5179 if (!DECL_EXTERNAL (decl))
5180 var_definition_p = true;
5182 /* If the variable has an array type, lay out the type, even if
5183 there is no initializer. It is valid to index through the
5184 array, and we must get TYPE_ALIGN set correctly on the array
5185 type. */
5186 else if (TREE_CODE (type) == ARRAY_TYPE)
5187 layout_type (type);
5190 /* Add this declaration to the statement-tree. This needs to happen
5191 after the call to check_initializer so that the DECL_EXPR for a
5192 reference temp is added before the DECL_EXPR for the reference itself. */
5193 if (at_function_scope_p ())
5194 add_decl_expr (decl);
5196 if (TREE_CODE (decl) == VAR_DECL)
5197 layout_var_decl (decl);
5199 /* Output the assembler code and/or RTL code for variables and functions,
5200 unless the type is an undefined structure or union.
5201 If not, it will get done when the type is completed. */
5202 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
5204 if (TREE_CODE (decl) == VAR_DECL)
5205 maybe_commonize_var (decl);
5207 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5209 /* Check for abstractness of the type. Notice that there is no
5210 need to strip array types here since the check for those types
5211 is already done within create_array_type_for_decl. */
5212 if (TREE_CODE (type) == FUNCTION_TYPE
5213 || TREE_CODE (type) == METHOD_TYPE)
5214 abstract_virtuals_error (decl, TREE_TYPE (type));
5215 else
5216 abstract_virtuals_error (decl, type);
5218 if (TREE_CODE (decl) == FUNCTION_DECL
5219 || TREE_TYPE (decl) == error_mark_node)
5220 /* No initialization required. */
5222 else if (DECL_EXTERNAL (decl)
5223 && ! (DECL_LANG_SPECIFIC (decl)
5224 && DECL_NOT_REALLY_EXTERN (decl)))
5226 if (init)
5227 DECL_INITIAL (decl) = init;
5229 else
5231 /* A variable definition. */
5232 if (DECL_FUNCTION_SCOPE_P (decl))
5234 /* Initialize the local variable. */
5235 if (processing_template_decl)
5237 if (init || DECL_INITIAL (decl) == error_mark_node)
5238 DECL_INITIAL (decl) = init;
5240 else if (!TREE_STATIC (decl))
5241 initialize_local_var (decl, init);
5244 /* The variable is being defined, so determine its visibility.
5245 This needs to happen after the linkage is set. */
5246 determine_visibility (decl);
5248 /* If a variable is defined, and then a subsequent
5249 definition with external linkage is encountered, we will
5250 get here twice for the same variable. We want to avoid
5251 calling expand_static_init more than once. For variables
5252 that are not static data members, we can call
5253 expand_static_init only when we actually process the
5254 initializer. It is not legal to redeclare a static data
5255 member, so this issue does not arise in that case. */
5256 if (var_definition_p && TREE_STATIC (decl))
5257 expand_static_init (decl, init);
5261 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5262 reference, insert it in the statement-tree now. */
5263 if (cleanup)
5264 push_cleanup (decl, cleanup, false);
5266 finish_end:
5268 if (was_readonly)
5269 TREE_READONLY (decl) = 1;
5271 /* If this was marked 'used', be sure it will be output. */
5272 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5273 mark_decl_referenced (decl);
5276 /* This is here for a midend callback from c-common.c. */
5278 void
5279 finish_decl (tree decl, tree init, tree asmspec_tree)
5281 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5284 /* Returns a declaration for a VAR_DECL as if:
5286 extern "C" TYPE NAME;
5288 had been seen. Used to create compiler-generated global
5289 variables. */
5291 static tree
5292 declare_global_var (tree name, tree type)
5294 tree decl;
5296 push_to_top_level ();
5297 decl = build_decl (VAR_DECL, name, type);
5298 TREE_PUBLIC (decl) = 1;
5299 DECL_EXTERNAL (decl) = 1;
5300 DECL_ARTIFICIAL (decl) = 1;
5301 /* If the user has explicitly declared this variable (perhaps
5302 because the code we are compiling is part of a low-level runtime
5303 library), then it is possible that our declaration will be merged
5304 with theirs by pushdecl. */
5305 decl = pushdecl (decl);
5306 finish_decl (decl, NULL_TREE, NULL_TREE);
5307 pop_from_top_level ();
5309 return decl;
5312 /* Returns a pointer to the `atexit' function. Note that if
5313 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5314 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5316 static tree
5317 get_atexit_node (void)
5319 tree atexit_fndecl;
5320 tree arg_types;
5321 tree fn_type;
5322 tree fn_ptr_type;
5323 const char *name;
5324 bool use_aeabi_atexit;
5326 if (atexit_node)
5327 return atexit_node;
5329 if (flag_use_cxa_atexit)
5331 /* The declaration for `__cxa_atexit' is:
5333 int __cxa_atexit (void (*)(void *), void *, void *)
5335 We build up the argument types and then then function type
5336 itself. */
5338 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5339 /* First, build the pointer-to-function type for the first
5340 argument. */
5341 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5342 fn_type = build_function_type (void_type_node, arg_types);
5343 fn_ptr_type = build_pointer_type (fn_type);
5344 /* Then, build the rest of the argument types. */
5345 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5346 if (use_aeabi_atexit)
5348 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5349 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5351 else
5353 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5354 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5356 /* And the final __cxa_atexit type. */
5357 fn_type = build_function_type (integer_type_node, arg_types);
5358 fn_ptr_type = build_pointer_type (fn_type);
5359 if (use_aeabi_atexit)
5360 name = "__aeabi_atexit";
5361 else
5362 name = "__cxa_atexit";
5364 else
5366 /* The declaration for `atexit' is:
5368 int atexit (void (*)());
5370 We build up the argument types and then then function type
5371 itself. */
5372 fn_type = build_function_type (void_type_node, void_list_node);
5373 fn_ptr_type = build_pointer_type (fn_type);
5374 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5375 /* Build the final atexit type. */
5376 fn_type = build_function_type (integer_type_node, arg_types);
5377 name = "atexit";
5380 /* Now, build the function declaration. */
5381 push_lang_context (lang_name_c);
5382 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5383 mark_used (atexit_fndecl);
5384 pop_lang_context ();
5385 atexit_node = decay_conversion (atexit_fndecl);
5387 return atexit_node;
5390 /* Returns the __dso_handle VAR_DECL. */
5392 static tree
5393 get_dso_handle_node (void)
5395 if (dso_handle_node)
5396 return dso_handle_node;
5398 /* Declare the variable. */
5399 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5400 ptr_type_node);
5402 return dso_handle_node;
5405 /* Begin a new function with internal linkage whose job will be simply
5406 to destroy some particular variable. */
5408 static GTY(()) int start_cleanup_cnt;
5410 static tree
5411 start_cleanup_fn (void)
5413 char name[32];
5414 tree parmtypes;
5415 tree fntype;
5416 tree fndecl;
5418 push_to_top_level ();
5420 /* No need to mangle this. */
5421 push_lang_context (lang_name_c);
5423 /* Build the parameter-types. */
5424 parmtypes = void_list_node;
5425 /* Functions passed to __cxa_atexit take an additional parameter.
5426 We'll just ignore it. After we implement the new calling
5427 convention for destructors, we can eliminate the use of
5428 additional cleanup functions entirely in the -fnew-abi case. */
5429 if (flag_use_cxa_atexit)
5430 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5431 /* Build the function type itself. */
5432 fntype = build_function_type (void_type_node, parmtypes);
5433 /* Build the name of the function. */
5434 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5435 /* Build the function declaration. */
5436 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5437 /* It's a function with internal linkage, generated by the
5438 compiler. */
5439 TREE_PUBLIC (fndecl) = 0;
5440 DECL_ARTIFICIAL (fndecl) = 1;
5441 /* Make the function `inline' so that it is only emitted if it is
5442 actually needed. It is unlikely that it will be inlined, since
5443 it is only called via a function pointer, but we avoid unnecessary
5444 emissions this way. */
5445 DECL_INLINE (fndecl) = 1;
5446 DECL_DECLARED_INLINE_P (fndecl) = 1;
5447 DECL_INTERFACE_KNOWN (fndecl) = 1;
5448 /* Build the parameter. */
5449 if (flag_use_cxa_atexit)
5451 tree parmdecl;
5453 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5454 DECL_CONTEXT (parmdecl) = fndecl;
5455 TREE_USED (parmdecl) = 1;
5456 DECL_ARGUMENTS (fndecl) = parmdecl;
5459 pushdecl (fndecl);
5460 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5462 pop_lang_context ();
5464 return current_function_decl;
5467 /* Finish the cleanup function begun by start_cleanup_fn. */
5469 static void
5470 end_cleanup_fn (void)
5472 expand_or_defer_fn (finish_function (0));
5474 pop_from_top_level ();
5477 /* Generate code to handle the destruction of DECL, an object with
5478 static storage duration. */
5480 tree
5481 register_dtor_fn (tree decl)
5483 tree cleanup;
5484 tree compound_stmt;
5485 tree args;
5486 tree fcall;
5488 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5489 return void_zero_node;
5491 /* Call build_cleanup before we enter the anonymous function so that
5492 any access checks will be done relative to the current scope,
5493 rather than the scope of the anonymous function. */
5494 build_cleanup (decl);
5496 /* Now start the function. */
5497 cleanup = start_cleanup_fn ();
5499 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5500 to the original function, rather than the anonymous one. That
5501 will make the back-end think that nested functions are in use,
5502 which causes confusion. */
5504 push_deferring_access_checks (dk_no_check);
5505 fcall = build_cleanup (decl);
5506 pop_deferring_access_checks ();
5508 /* Create the body of the anonymous function. */
5509 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5510 finish_expr_stmt (fcall);
5511 finish_compound_stmt (compound_stmt);
5512 end_cleanup_fn ();
5514 /* Call atexit with the cleanup function. */
5515 cxx_mark_addressable (cleanup);
5516 mark_used (cleanup);
5517 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5518 if (flag_use_cxa_atexit)
5520 args = tree_cons (NULL_TREE,
5521 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5522 NULL_TREE);
5523 if (targetm.cxx.use_aeabi_atexit ())
5525 args = tree_cons (NULL_TREE, cleanup, args);
5526 args = tree_cons (NULL_TREE, null_pointer_node, args);
5528 else
5530 args = tree_cons (NULL_TREE, null_pointer_node, args);
5531 args = tree_cons (NULL_TREE, cleanup, args);
5534 else
5535 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5536 return build_function_call (get_atexit_node (), args);
5539 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5540 is its initializer. Generate code to handle the construction
5541 and destruction of DECL. */
5543 static void
5544 expand_static_init (tree decl, tree init)
5546 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5547 gcc_assert (TREE_STATIC (decl));
5549 /* Some variables require no initialization. */
5550 if (!init
5551 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5552 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5553 return;
5555 if (DECL_FUNCTION_SCOPE_P (decl))
5557 /* Emit code to perform this initialization but once. */
5558 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5559 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5560 tree guard, guard_addr, guard_addr_list;
5561 tree acquire_fn, release_fn, abort_fn;
5562 tree flag, begin;
5564 /* Emit code to perform this initialization but once. This code
5565 looks like:
5567 static <type> guard;
5568 if (!guard.first_byte) {
5569 if (__cxa_guard_acquire (&guard)) {
5570 bool flag = false;
5571 try {
5572 // Do initialization.
5573 flag = true; __cxa_guard_release (&guard);
5574 // Register variable for destruction at end of program.
5575 } catch {
5576 if (!flag) __cxa_guard_abort (&guard);
5580 Note that the `flag' variable is only set to 1 *after* the
5581 initialization is complete. This ensures that an exception,
5582 thrown during the construction, will cause the variable to
5583 reinitialized when we pass through this code again, as per:
5585 [stmt.dcl]
5587 If the initialization exits by throwing an exception, the
5588 initialization is not complete, so it will be tried again
5589 the next time control enters the declaration.
5591 This process should be thread-safe, too; multiple threads
5592 should not be able to initialize the variable more than
5593 once. */
5595 /* Create the guard variable. */
5596 guard = get_guard (decl);
5598 /* This optimization isn't safe on targets with relaxed memory
5599 consistency. On such targets we force synchronization in
5600 __cxa_guard_acquire. */
5601 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5603 /* Begin the conditional initialization. */
5604 if_stmt = begin_if_stmt ();
5605 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5606 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5609 if (flag_threadsafe_statics)
5611 guard_addr = build_address (guard);
5612 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5614 acquire_fn = get_identifier ("__cxa_guard_acquire");
5615 release_fn = get_identifier ("__cxa_guard_release");
5616 abort_fn = get_identifier ("__cxa_guard_abort");
5617 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5619 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5620 void_list_node);
5621 tree vfntype = build_function_type (void_type_node, argtypes);
5622 acquire_fn = push_library_fn
5623 (acquire_fn, build_function_type (integer_type_node, argtypes));
5624 release_fn = push_library_fn (release_fn, vfntype);
5625 abort_fn = push_library_fn (abort_fn, vfntype);
5627 else
5629 release_fn = identifier_global_value (release_fn);
5630 abort_fn = identifier_global_value (abort_fn);
5633 inner_if_stmt = begin_if_stmt ();
5634 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5635 inner_if_stmt);
5637 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5638 begin = get_target_expr (boolean_false_node);
5639 flag = TARGET_EXPR_SLOT (begin);
5641 TARGET_EXPR_CLEANUP (begin)
5642 = build3 (COND_EXPR, void_type_node, flag,
5643 void_zero_node,
5644 build_call (abort_fn, guard_addr_list));
5645 CLEANUP_EH_ONLY (begin) = 1;
5647 /* Do the initialization itself. */
5648 init = add_stmt_to_compound (begin, init);
5649 init = add_stmt_to_compound
5650 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5651 init = add_stmt_to_compound
5652 (init, build_call (release_fn, guard_addr_list));
5654 else
5655 init = add_stmt_to_compound (init, set_guard (guard));
5657 /* Use atexit to register a function for destroying this static
5658 variable. */
5659 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5661 finish_expr_stmt (init);
5663 if (flag_threadsafe_statics)
5665 finish_compound_stmt (inner_then_clause);
5666 finish_then_clause (inner_if_stmt);
5667 finish_if_stmt (inner_if_stmt);
5670 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5672 finish_compound_stmt (then_clause);
5673 finish_then_clause (if_stmt);
5674 finish_if_stmt (if_stmt);
5677 else
5678 static_aggregates = tree_cons (init, decl, static_aggregates);
5682 /* Make TYPE a complete type based on INITIAL_VALUE.
5683 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5684 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5685 3 if the initializer list is empty (in pedantic mode). */
5688 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5690 int failure;
5691 tree type, elt_type;
5693 if (initial_value)
5695 /* An array of character type can be initialized from a
5696 brace-enclosed string constant.
5698 FIXME: this code is duplicated from reshape_init. Probably
5699 we should just call reshape_init here? */
5700 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5701 && TREE_CODE (initial_value) == CONSTRUCTOR
5702 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5704 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5705 tree value = VEC_index (constructor_elt, v, 0)->value;
5707 if (TREE_CODE (value) == STRING_CST
5708 && VEC_length (constructor_elt, v) == 1)
5709 initial_value = value;
5713 failure = complete_array_type (ptype, initial_value, do_default);
5715 /* We can create the array before the element type is complete, which
5716 means that we didn't have these two bits set in the original type
5717 either. In completing the type, we are expected to propagate these
5718 bits. See also complete_type which does the same thing for arrays
5719 of fixed size. */
5720 type = *ptype;
5721 if (TYPE_DOMAIN (type))
5723 elt_type = TREE_TYPE (type);
5724 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5725 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5726 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5729 return failure;
5732 /* Return zero if something is declared to be a member of type
5733 CTYPE when in the context of CUR_TYPE. STRING is the error
5734 message to print in that case. Otherwise, quietly return 1. */
5736 static int
5737 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5739 if (ctype && ctype != cur_type)
5741 if (flags == DTOR_FLAG)
5742 error ("destructor for alien class %qT cannot be a member", ctype);
5743 else
5744 error ("constructor for alien class %qT cannot be a member", ctype);
5745 return 0;
5747 return 1;
5750 /* Subroutine of `grokdeclarator'. */
5752 /* Generate errors possibly applicable for a given set of specifiers.
5753 This is for ARM $7.1.2. */
5755 static void
5756 bad_specifiers (tree object,
5757 const char* type,
5758 int virtualp,
5759 int quals,
5760 int inlinep,
5761 int friendp,
5762 int raises)
5764 if (virtualp)
5765 error ("%qD declared as a %<virtual%> %s", object, type);
5766 if (inlinep)
5767 error ("%qD declared as an %<inline%> %s", object, type);
5768 if (quals)
5769 error ("%<const%> and %<volatile%> function specifiers on "
5770 "%qD invalid in %s declaration",
5771 object, type);
5772 if (friendp)
5773 error ("%q+D declared as a friend", object);
5774 if (raises
5775 && (TREE_CODE (object) == TYPE_DECL
5776 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5777 && !TYPE_REFFN_P (TREE_TYPE (object))
5778 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5779 error ("%q+D declared with an exception specification", object);
5782 /* DECL is a member function or static data member and is presently
5783 being defined. Check that the definition is taking place in a
5784 valid namespace. */
5786 static void
5787 check_class_member_definition_namespace (tree decl)
5789 /* These checks only apply to member functions and static data
5790 members. */
5791 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5792 || TREE_CODE (decl) == VAR_DECL);
5793 /* We check for problems with specializations in pt.c in
5794 check_specialization_namespace, where we can issue better
5795 diagnostics. */
5796 if (processing_specialization)
5797 return;
5798 /* There are no restrictions on the placement of
5799 explicit instantiations. */
5800 if (processing_explicit_instantiation)
5801 return;
5802 /* [class.mfct]
5804 A member function definition that appears outside of the
5805 class definition shall appear in a namespace scope enclosing
5806 the class definition.
5808 [class.static.data]
5810 The definition for a static data member shall appear in a
5811 namespace scope enclosing the member's class definition. */
5812 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5813 pedwarn ("definition of %qD is not in namespace enclosing %qT",
5814 decl, DECL_CONTEXT (decl));
5817 /* CTYPE is class type, or null if non-class.
5818 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5819 or METHOD_TYPE.
5820 DECLARATOR is the function's name.
5821 PARMS is a chain of PARM_DECLs for the function.
5822 VIRTUALP is truthvalue of whether the function is virtual or not.
5823 FLAGS are to be passed through to `grokclassfn'.
5824 QUALS are qualifiers indicating whether the function is `const'
5825 or `volatile'.
5826 RAISES is a list of exceptions that this function can raise.
5827 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5828 not look, and -1 if we should not call `grokclassfn' at all.
5830 SFK is the kind of special function (if any) for the new function.
5832 Returns `NULL_TREE' if something goes wrong, after issuing
5833 applicable error messages. */
5835 static tree
5836 grokfndecl (tree ctype,
5837 tree type,
5838 tree declarator,
5839 tree parms,
5840 tree orig_declarator,
5841 int virtualp,
5842 enum overload_flags flags,
5843 cp_cv_quals quals,
5844 tree raises,
5845 int check,
5846 int friendp,
5847 int publicp,
5848 int inlinep,
5849 special_function_kind sfk,
5850 bool funcdef_flag,
5851 int template_count,
5852 tree in_namespace,
5853 tree* attrlist)
5855 tree decl;
5856 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5857 tree t;
5859 if (raises)
5860 type = build_exception_variant (type, raises);
5862 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5863 DECL_ARGUMENTS (decl) = parms;
5864 /* Propagate volatile out from type to decl. */
5865 if (TYPE_VOLATILE (type))
5866 TREE_THIS_VOLATILE (decl) = 1;
5868 if (friendp
5869 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5871 if (funcdef_flag)
5872 error
5873 ("defining explicit specialization %qD in friend declaration",
5874 orig_declarator);
5875 else
5877 tree fns = TREE_OPERAND (orig_declarator, 0);
5878 tree args = TREE_OPERAND (orig_declarator, 1);
5880 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5882 /* Something like `template <class T> friend void f<T>()'. */
5883 error ("invalid use of template-id %qD in declaration "
5884 "of primary template",
5885 orig_declarator);
5886 return NULL_TREE;
5890 /* A friend declaration of the form friend void f<>(). Record
5891 the information in the TEMPLATE_ID_EXPR. */
5892 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5894 if (TREE_CODE (fns) == COMPONENT_REF)
5896 /* Due to bison parser ickiness, we will have already looked
5897 up an operator_name or PFUNCNAME within the current class
5898 (see template_id in parse.y). If the current class contains
5899 such a name, we'll get a COMPONENT_REF here. Undo that. */
5901 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5902 == current_class_type);
5903 fns = TREE_OPERAND (fns, 1);
5905 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5906 || TREE_CODE (fns) == OVERLOAD);
5907 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5909 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5910 if (TREE_PURPOSE (t)
5911 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5913 error ("default arguments are not allowed in declaration "
5914 "of friend template specialization %qD",
5915 decl);
5916 return NULL_TREE;
5919 if (inlinep)
5921 error ("%<inline%> is not allowed in declaration of friend "
5922 "template specialization %qD",
5923 decl);
5924 return NULL_TREE;
5929 /* If this decl has namespace scope, set that up. */
5930 if (in_namespace)
5931 set_decl_namespace (decl, in_namespace, friendp);
5932 else if (!ctype)
5933 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5935 /* `main' and builtins have implicit 'C' linkage. */
5936 if ((MAIN_NAME_P (declarator)
5937 || (IDENTIFIER_LENGTH (declarator) > 10
5938 && IDENTIFIER_POINTER (declarator)[0] == '_'
5939 && IDENTIFIER_POINTER (declarator)[1] == '_'
5940 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5941 && current_lang_name == lang_name_cplusplus
5942 && ctype == NULL_TREE
5943 /* NULL_TREE means global namespace. */
5944 && DECL_CONTEXT (decl) == NULL_TREE)
5945 SET_DECL_LANGUAGE (decl, lang_c);
5947 /* Should probably propagate const out from type to decl I bet (mrs). */
5948 if (staticp)
5950 DECL_STATIC_FUNCTION_P (decl) = 1;
5951 DECL_CONTEXT (decl) = ctype;
5954 if (ctype)
5956 DECL_CONTEXT (decl) = ctype;
5957 if (funcdef_flag)
5958 check_class_member_definition_namespace (decl);
5961 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5963 if (processing_template_decl)
5964 error ("cannot declare %<::main%> to be a template");
5965 if (inlinep)
5966 error ("cannot declare %<::main%> to be inline");
5967 if (!publicp)
5968 error ("cannot declare %<::main%> to be static");
5969 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5970 integer_type_node))
5972 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
5973 tree newtype;
5974 error ("%<::main%> must return %<int%>");
5975 newtype = build_function_type (integer_type_node,
5976 oldtypeargs);
5977 TREE_TYPE (decl) = newtype;
5979 inlinep = 0;
5980 publicp = 1;
5983 /* Members of anonymous types and local classes have no linkage; make
5984 them internal. If a typedef is made later, this will be changed. */
5985 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5986 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5987 publicp = 0;
5989 if (publicp)
5991 /* [basic.link]: A name with no linkage (notably, the name of a class
5992 or enumeration declared in a local scope) shall not be used to
5993 declare an entity with linkage.
5995 Only check this for public decls for now. See core 319, 389. */
5996 t = no_linkage_check (TREE_TYPE (decl),
5997 /*relaxed_p=*/false);
5998 if (t)
6000 if (TYPE_ANONYMOUS_P (t))
6002 if (DECL_EXTERN_C_P (decl))
6003 /* Allow this; it's pretty common in C. */;
6004 else
6006 pedwarn ("non-local function %q#D uses anonymous type",
6007 decl);
6008 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6009 pedwarn ("%q+#D does not refer to the unqualified "
6010 "type, so it is not used for linkage",
6011 TYPE_NAME (t));
6014 else
6015 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6019 TREE_PUBLIC (decl) = publicp;
6020 if (! publicp)
6022 DECL_INTERFACE_KNOWN (decl) = 1;
6023 DECL_NOT_REALLY_EXTERN (decl) = 1;
6026 /* If the declaration was declared inline, mark it as such. */
6027 if (inlinep)
6028 DECL_DECLARED_INLINE_P (decl) = 1;
6029 /* We inline functions that are explicitly declared inline, or, when
6030 the user explicitly asks us to, all functions. */
6031 if (DECL_DECLARED_INLINE_P (decl)
6032 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6033 DECL_INLINE (decl) = 1;
6035 DECL_EXTERNAL (decl) = 1;
6036 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6038 error ("%smember function %qD cannot have cv-qualifier",
6039 (ctype ? "static " : "non-"), decl);
6040 quals = TYPE_UNQUALIFIED;
6043 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
6044 grok_op_properties (decl, /*complain=*/true);
6046 if (ctype && decl_function_context (decl))
6047 DECL_NO_STATIC_CHAIN (decl) = 1;
6049 if (funcdef_flag)
6050 /* Make the init_value nonzero so pushdecl knows this is not
6051 tentative. error_mark_node is replaced later with the BLOCK. */
6052 DECL_INITIAL (decl) = error_mark_node;
6054 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6055 TREE_NOTHROW (decl) = 1;
6057 /* Caller will do the rest of this. */
6058 if (check < 0)
6059 return decl;
6061 if (ctype != NULL_TREE)
6063 if (sfk == sfk_constructor)
6064 DECL_CONSTRUCTOR_P (decl) = 1;
6066 grokclassfn (ctype, decl, flags, quals);
6069 decl = check_explicit_specialization (orig_declarator, decl,
6070 template_count,
6071 2 * funcdef_flag +
6072 4 * (friendp != 0));
6073 if (decl == error_mark_node)
6074 return NULL_TREE;
6076 if (attrlist)
6078 cplus_decl_attributes (&decl, *attrlist, 0);
6079 *attrlist = NULL_TREE;
6082 if (ctype != NULL_TREE
6083 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6084 && check)
6086 tree old_decl;
6088 old_decl = check_classfn (ctype, decl,
6089 (processing_template_decl
6090 > template_class_depth (ctype))
6091 ? current_template_parms
6092 : NULL_TREE);
6093 if (old_decl)
6095 tree ok;
6096 tree pushed_scope;
6098 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6099 /* Because grokfndecl is always supposed to return a
6100 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6101 here. We depend on our callers to figure out that its
6102 really a template that's being returned. */
6103 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6105 if (DECL_STATIC_FUNCTION_P (old_decl)
6106 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6107 /* Remove the `this' parm added by grokclassfn.
6108 XXX Isn't this done in start_function, too? */
6109 revert_static_member_fn (decl);
6110 if (DECL_ARTIFICIAL (old_decl))
6111 error ("definition of implicitly-declared %qD", old_decl);
6113 /* Since we've smashed OLD_DECL to its
6114 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6115 if (TREE_CODE (decl) == TEMPLATE_DECL)
6116 decl = DECL_TEMPLATE_RESULT (decl);
6118 /* Attempt to merge the declarations. This can fail, in
6119 the case of some invalid specialization declarations. */
6120 pushed_scope = push_scope (ctype);
6121 ok = duplicate_decls (decl, old_decl, friendp);
6122 if (pushed_scope)
6123 pop_scope (pushed_scope);
6124 if (!ok)
6126 error ("no %q#D member function declared in class %qT",
6127 decl, ctype);
6128 return NULL_TREE;
6130 return old_decl;
6134 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6135 return NULL_TREE;
6137 if (ctype == NULL_TREE || check)
6138 return decl;
6140 if (virtualp)
6141 DECL_VIRTUAL_P (decl) = 1;
6143 return decl;
6146 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6147 the linkage that DECL will receive in the object file. */
6149 static void
6150 set_linkage_for_static_data_member (tree decl)
6152 /* A static data member always has static storage duration and
6153 external linkage. Note that static data members are forbidden in
6154 local classes -- the only situation in which a class has
6155 non-external linkage. */
6156 TREE_PUBLIC (decl) = 1;
6157 TREE_STATIC (decl) = 1;
6158 /* For non-template classes, static data members are always put
6159 out in exactly those files where they are defined, just as
6160 with ordinary namespace-scope variables. */
6161 if (!processing_template_decl)
6162 DECL_INTERFACE_KNOWN (decl) = 1;
6165 /* Create a VAR_DECL named NAME with the indicated TYPE.
6167 If SCOPE is non-NULL, it is the class type or namespace containing
6168 the variable. If SCOPE is NULL, the variable should is created in
6169 the innermost enclosings scope. */
6171 static tree
6172 grokvardecl (tree type,
6173 tree name,
6174 const cp_decl_specifier_seq *declspecs,
6175 int initialized,
6176 int constp,
6177 tree scope)
6179 tree decl;
6180 tree explicit_scope;
6182 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6184 /* Compute the scope in which to place the variable, but remember
6185 whether or not that scope was explicitly specified by the user. */
6186 explicit_scope = scope;
6187 if (!scope)
6189 /* An explicit "extern" specifier indicates a namespace-scope
6190 variable. */
6191 if (declspecs->storage_class == sc_extern)
6192 scope = current_namespace;
6193 else if (!at_function_scope_p ())
6194 scope = current_scope ();
6197 if (scope
6198 && (/* If the variable is a namespace-scope variable declared in a
6199 template, we need DECL_LANG_SPECIFIC. */
6200 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6201 /* Similarly for namespace-scope variables with language linkage
6202 other than C++. */
6203 || (TREE_CODE (scope) == NAMESPACE_DECL
6204 && current_lang_name != lang_name_cplusplus)
6205 /* Similarly for static data members. */
6206 || TYPE_P (scope)))
6207 decl = build_lang_decl (VAR_DECL, name, type);
6208 else
6209 decl = build_decl (VAR_DECL, name, type);
6211 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6212 set_decl_namespace (decl, explicit_scope, 0);
6213 else
6214 DECL_CONTEXT (decl) = scope;
6216 if (declspecs->storage_class == sc_extern)
6218 DECL_THIS_EXTERN (decl) = 1;
6219 DECL_EXTERNAL (decl) = !initialized;
6222 if (DECL_CLASS_SCOPE_P (decl))
6224 set_linkage_for_static_data_member (decl);
6225 /* This function is only called with out-of-class definitions. */
6226 DECL_EXTERNAL (decl) = 0;
6227 check_class_member_definition_namespace (decl);
6229 /* At top level, either `static' or no s.c. makes a definition
6230 (perhaps tentative), and absence of `static' makes it public. */
6231 else if (toplevel_bindings_p ())
6233 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6234 && (DECL_THIS_EXTERN (decl) || ! constp));
6235 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6237 /* Not at top level, only `static' makes a static definition. */
6238 else
6240 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6241 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6244 if (declspecs->specs[(int)ds_thread])
6246 if (targetm.have_tls)
6247 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6248 else
6249 /* A mere warning is sure to result in improper semantics
6250 at runtime. Don't bother to allow this to compile. */
6251 error ("thread-local storage not supported for this target");
6254 if (TREE_PUBLIC (decl))
6256 /* [basic.link]: A name with no linkage (notably, the name of a class
6257 or enumeration declared in a local scope) shall not be used to
6258 declare an entity with linkage.
6260 Only check this for public decls for now. */
6261 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6262 if (t)
6264 if (TYPE_ANONYMOUS_P (t))
6266 if (DECL_EXTERN_C_P (decl))
6267 /* Allow this; it's pretty common in C. */
6269 else
6271 /* DRs 132, 319 and 389 seem to indicate types with
6272 no linkage can only be used to declare extern "C"
6273 entities. Since it's not always an error in the
6274 ISO C++ 90 Standard, we only issue a warning. */
6275 warning (0, "non-local variable %q#D uses anonymous type",
6276 decl);
6277 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6278 warning (0, "%q+#D does not refer to the unqualified "
6279 "type, so it is not used for linkage",
6280 TYPE_NAME (t));
6283 else
6284 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6287 else
6288 DECL_INTERFACE_KNOWN (decl) = 1;
6290 return decl;
6293 /* Create and return a canonical pointer to member function type, for
6294 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
6296 tree
6297 build_ptrmemfunc_type (tree type)
6299 tree field, fields;
6300 tree t;
6301 tree unqualified_variant = NULL_TREE;
6303 if (type == error_mark_node)
6304 return type;
6306 /* If a canonical type already exists for this type, use it. We use
6307 this method instead of type_hash_canon, because it only does a
6308 simple equality check on the list of field members. */
6310 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6311 return t;
6313 /* Make sure that we always have the unqualified pointer-to-member
6314 type first. */
6315 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6316 unqualified_variant
6317 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6319 t = make_aggr_type (RECORD_TYPE);
6320 xref_basetypes (t, NULL_TREE);
6322 /* Let the front-end know this is a pointer to member function... */
6323 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6324 /* ... and not really an aggregate. */
6325 SET_IS_AGGR_TYPE (t, 0);
6327 field = build_decl (FIELD_DECL, pfn_identifier, type);
6328 fields = field;
6330 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6331 TREE_CHAIN (field) = fields;
6332 fields = field;
6334 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6336 /* Zap out the name so that the back-end will give us the debugging
6337 information for this anonymous RECORD_TYPE. */
6338 TYPE_NAME (t) = NULL_TREE;
6340 /* If this is not the unqualified form of this pointer-to-member
6341 type, set the TYPE_MAIN_VARIANT for this type to be the
6342 unqualified type. Since they are actually RECORD_TYPEs that are
6343 not variants of each other, we must do this manually. */
6344 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6346 t = build_qualified_type (t, cp_type_quals (type));
6347 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6348 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6349 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6352 /* Cache this pointer-to-member type so that we can find it again
6353 later. */
6354 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6356 return t;
6359 /* Create and return a pointer to data member type. */
6361 tree
6362 build_ptrmem_type (tree class_type, tree member_type)
6364 if (TREE_CODE (member_type) == METHOD_TYPE)
6366 tree arg_types;
6368 arg_types = TYPE_ARG_TYPES (member_type);
6369 class_type = (cp_build_qualified_type
6370 (class_type,
6371 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6372 member_type
6373 = build_method_type_directly (class_type,
6374 TREE_TYPE (member_type),
6375 TREE_CHAIN (arg_types));
6376 return build_ptrmemfunc_type (build_pointer_type (member_type));
6378 else
6380 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6381 return build_offset_type (class_type, member_type);
6385 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6386 Check to see that the definition is valid. Issue appropriate error
6387 messages. Return 1 if the definition is particularly bad, or 0
6388 otherwise. */
6391 check_static_variable_definition (tree decl, tree type)
6393 /* Motion 10 at San Diego: If a static const integral data member is
6394 initialized with an integral constant expression, the initializer
6395 may appear either in the declaration (within the class), or in
6396 the definition, but not both. If it appears in the class, the
6397 member is a member constant. The file-scope definition is always
6398 required. */
6399 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6401 error ("invalid in-class initialization of static data member "
6402 "of non-integral type %qT",
6403 type);
6404 /* If we just return the declaration, crashes will sometimes
6405 occur. We therefore return void_type_node, as if this were a
6406 friend declaration, to cause callers to completely ignore
6407 this declaration. */
6408 return 1;
6410 else if (!CP_TYPE_CONST_P (type))
6411 error ("ISO C++ forbids in-class initialization of non-const "
6412 "static member %qD",
6413 decl);
6414 else if (pedantic && !INTEGRAL_TYPE_P (type))
6415 pedwarn ("ISO C++ forbids initialization of member constant "
6416 "%qD of non-integral type %qT", decl, type);
6418 return 0;
6421 /* Given the SIZE (i.e., number of elements) in an array, compute an
6422 appropriate index type for the array. If non-NULL, NAME is the
6423 name of the thing being declared. */
6425 tree
6426 compute_array_index_type (tree name, tree size)
6428 tree type;
6429 tree itype;
6431 if (error_operand_p (size))
6432 return error_mark_node;
6434 type = TREE_TYPE (size);
6435 /* The array bound must be an integer type. */
6436 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6438 if (name)
6439 error ("size of array %qD has non-integral type %qT", name, type);
6440 else
6441 error ("size of array has non-integral type %qT", type);
6442 size = integer_one_node;
6443 type = TREE_TYPE (size);
6446 if (abi_version_at_least (2)
6447 /* We should only handle value dependent expressions specially. */
6448 ? value_dependent_expression_p (size)
6449 /* But for abi-1, we handled all instances in templates. This
6450 effects the manglings produced. */
6451 : processing_template_decl)
6452 return build_index_type (build_min (MINUS_EXPR, sizetype,
6453 size, integer_one_node));
6455 /* The size might be the result of a cast. */
6456 STRIP_TYPE_NOPS (size);
6458 /* It might be a const variable or enumeration constant. */
6459 size = integral_constant_value (size);
6461 /* Normally, the array-bound will be a constant. */
6462 if (TREE_CODE (size) == INTEGER_CST)
6464 /* Check to see if the array bound overflowed. Make that an
6465 error, no matter how generous we're being. */
6466 int old_flag_pedantic_errors = flag_pedantic_errors;
6467 int old_pedantic = pedantic;
6468 pedantic = flag_pedantic_errors = 1;
6469 constant_expression_warning (size);
6470 pedantic = old_pedantic;
6471 flag_pedantic_errors = old_flag_pedantic_errors;
6473 /* An array must have a positive number of elements. */
6474 if (INT_CST_LT (size, integer_zero_node))
6476 if (name)
6477 error ("size of array %qD is negative", name);
6478 else
6479 error ("size of array is negative");
6480 size = integer_one_node;
6482 /* As an extension we allow zero-sized arrays. We always allow
6483 them in system headers because glibc uses them. */
6484 else if (integer_zerop (size) && pedantic && !in_system_header)
6486 if (name)
6487 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6488 else
6489 pedwarn ("ISO C++ forbids zero-size array");
6492 else if (TREE_CONSTANT (size))
6494 /* `(int) &fn' is not a valid array bound. */
6495 if (name)
6496 error ("size of array %qD is not an integral constant-expression",
6497 name);
6498 else
6499 error ("size of array is not an integral constant-expression");
6500 size = integer_one_node;
6502 else if (pedantic)
6504 if (name)
6505 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6506 else
6507 pedwarn ("ISO C++ forbids variable-size array");
6510 if (processing_template_decl && !TREE_CONSTANT (size))
6511 /* A variable sized array. */
6512 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6513 else
6515 HOST_WIDE_INT saved_processing_template_decl;
6517 /* Compute the index of the largest element in the array. It is
6518 one less than the number of elements in the array. We save
6519 and restore PROCESSING_TEMPLATE_DECL so that computations in
6520 cp_build_binary_op will be appropriately folded. */
6521 saved_processing_template_decl = processing_template_decl;
6522 processing_template_decl = 0;
6523 itype = cp_build_binary_op (MINUS_EXPR,
6524 cp_convert (ssizetype, size),
6525 cp_convert (ssizetype, integer_one_node));
6526 itype = fold (itype);
6527 processing_template_decl = saved_processing_template_decl;
6529 if (!TREE_CONSTANT (itype))
6530 /* A variable sized array. */
6531 itype = variable_size (itype);
6532 /* Make sure that there was no overflow when creating to a signed
6533 index type. (For example, on a 32-bit machine, an array with
6534 size 2^32 - 1 is too big.) */
6535 else if (TREE_CODE (itype) == INTEGER_CST
6536 && TREE_OVERFLOW (itype))
6538 error ("overflow in array dimension");
6539 TREE_OVERFLOW (itype) = 0;
6543 /* Create and return the appropriate index type. */
6544 return build_index_type (itype);
6547 /* Returns the scope (if any) in which the entity declared by
6548 DECLARATOR will be located. If the entity was declared with an
6549 unqualified name, NULL_TREE is returned. */
6551 tree
6552 get_scope_of_declarator (const cp_declarator *declarator)
6554 while (declarator && declarator->kind != cdk_id)
6555 declarator = declarator->declarator;
6557 /* If the declarator-id is a SCOPE_REF, the scope in which the
6558 declaration occurs is the first operand. */
6559 if (declarator
6560 && declarator->u.id.qualifying_scope)
6561 return declarator->u.id.qualifying_scope;
6563 /* Otherwise, the declarator is not a qualified name; the entity will
6564 be declared in the current scope. */
6565 return NULL_TREE;
6568 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6569 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6570 with this type. */
6572 static tree
6573 create_array_type_for_decl (tree name, tree type, tree size)
6575 tree itype = NULL_TREE;
6576 const char* error_msg;
6578 /* If things have already gone awry, bail now. */
6579 if (type == error_mark_node || size == error_mark_node)
6580 return error_mark_node;
6582 /* Assume that everything will go OK. */
6583 error_msg = NULL;
6585 /* There are some types which cannot be array elements. */
6586 switch (TREE_CODE (type))
6588 case VOID_TYPE:
6589 error_msg = "array of void";
6590 break;
6592 case FUNCTION_TYPE:
6593 error_msg = "array of functions";
6594 break;
6596 case REFERENCE_TYPE:
6597 error_msg = "array of references";
6598 break;
6600 case METHOD_TYPE:
6601 error_msg = "array of function members";
6602 break;
6604 default:
6605 break;
6608 /* If something went wrong, issue an error-message and return. */
6609 if (error_msg)
6611 if (name)
6612 error ("declaration of %qD as %s", name, error_msg);
6613 else
6614 error ("creating %s", error_msg);
6616 return error_mark_node;
6619 /* [dcl.array]
6621 The constant expressions that specify the bounds of the arrays
6622 can be omitted only for the first member of the sequence. */
6623 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6625 if (name)
6626 error ("declaration of %qD as multidimensional array must "
6627 "have bounds for all dimensions except the first",
6628 name);
6629 else
6630 error ("multidimensional array must have bounds for all "
6631 "dimensions except the first");
6633 return error_mark_node;
6636 /* Figure out the index type for the array. */
6637 if (size)
6638 itype = compute_array_index_type (name, size);
6640 /* [dcl.array]
6641 T is called the array element type; this type shall not be [...] an
6642 abstract class type. */
6643 abstract_virtuals_error (name, type);
6645 return build_cplus_array_type (type, itype);
6648 /* Check that it's OK to declare a function with the indicated TYPE.
6649 SFK indicates the kind of special function (if any) that this
6650 function is. OPTYPE is the type given in a conversion operator
6651 declaration, or the class type for a constructor/destructor.
6652 Returns the actual return type of the function; that
6653 may be different than TYPE if an error occurs, or for certain
6654 special functions. */
6656 static tree
6657 check_special_function_return_type (special_function_kind sfk,
6658 tree type,
6659 tree optype)
6661 switch (sfk)
6663 case sfk_constructor:
6664 if (type)
6665 error ("return type specification for constructor invalid");
6667 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6668 type = build_pointer_type (optype);
6669 else
6670 type = void_type_node;
6671 break;
6673 case sfk_destructor:
6674 if (type)
6675 error ("return type specification for destructor invalid");
6676 /* We can't use the proper return type here because we run into
6677 problems with ambiguous bases and covariant returns.
6678 Java classes are left unchanged because (void *) isn't a valid
6679 Java type, and we don't want to change the Java ABI. */
6680 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6681 type = build_pointer_type (void_type_node);
6682 else
6683 type = void_type_node;
6684 break;
6686 case sfk_conversion:
6687 if (type && !same_type_p (type, optype))
6688 error ("operator %qT declared to return %qT", optype, type);
6689 else if (type)
6690 pedwarn ("return type specified for %<operator %T%>", optype);
6691 type = optype;
6692 break;
6694 default:
6695 gcc_unreachable ();
6698 return type;
6701 /* A variable or data member (whose unqualified name is IDENTIFIER)
6702 has been declared with the indicated TYPE. If the TYPE is not
6703 acceptable, issue an error message and return a type to use for
6704 error-recovery purposes. */
6706 tree
6707 check_var_type (tree identifier, tree type)
6709 if (VOID_TYPE_P (type))
6711 if (!identifier)
6712 error ("unnamed variable or field declared void");
6713 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6715 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6716 error ("variable or field %qE declared void", identifier);
6718 else
6719 error ("variable or field declared void");
6720 type = integer_type_node;
6723 return type;
6726 /* Given declspecs and a declarator (abstract or otherwise), determine
6727 the name and type of the object declared and construct a DECL node
6728 for it.
6730 DECLSPECS is a chain of tree_list nodes whose value fields
6731 are the storage classes and type specifiers.
6733 DECL_CONTEXT says which syntactic context this declaration is in:
6734 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6735 FUNCDEF for a function definition. Like NORMAL but a few different
6736 error messages in each case. Return value may be zero meaning
6737 this definition is too screwy to try to parse.
6738 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6739 handle member functions (which have FIELD context).
6740 Return value may be zero meaning this definition is too screwy to
6741 try to parse.
6742 PARM for a parameter declaration (either within a function prototype
6743 or before a function body). Make a PARM_DECL, or return void_type_node.
6744 CATCHPARM for a parameter declaration before a catch clause.
6745 TYPENAME if for a typename (in a cast or sizeof).
6746 Don't make a DECL node; just return the ..._TYPE node.
6747 FIELD for a struct or union field; make a FIELD_DECL.
6748 BITFIELD for a field with specified width.
6749 INITIALIZED is 1 if the decl has an initializer.
6751 ATTRLIST is a pointer to the list of attributes, which may be NULL
6752 if there are none; *ATTRLIST may be modified if attributes from inside
6753 the declarator should be applied to the declaration.
6755 When this function is called, scoping variables (such as
6756 CURRENT_CLASS_TYPE) should reflect the scope in which the
6757 declaration occurs, not the scope in which the new declaration will
6758 be placed. For example, on:
6760 void S::f() { ... }
6762 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6763 should not be `S'. */
6765 tree
6766 grokdeclarator (const cp_declarator *declarator,
6767 const cp_decl_specifier_seq *declspecs,
6768 enum decl_context decl_context,
6769 int initialized,
6770 tree* attrlist)
6772 tree type = NULL_TREE;
6773 int longlong = 0;
6774 int type_quals;
6775 int virtualp, explicitp, friendp, inlinep, staticp;
6776 int explicit_int = 0;
6777 int explicit_char = 0;
6778 int defaulted_int = 0;
6779 tree dependant_name = NULL_TREE;
6781 tree typedef_decl = NULL_TREE;
6782 const char *name = NULL;
6783 tree typedef_type = NULL_TREE;
6784 /* True if this declarator is a function definition. */
6785 bool funcdef_flag = false;
6786 cp_declarator_kind innermost_code = cdk_error;
6787 int bitfield = 0;
6788 #if 0
6789 /* See the code below that used this. */
6790 tree decl_attr = NULL_TREE;
6791 #endif
6793 /* Keep track of what sort of function is being processed
6794 so that we can warn about default return values, or explicit
6795 return values which do not match prescribed defaults. */
6796 special_function_kind sfk = sfk_none;
6798 tree dname = NULL_TREE;
6799 tree ctor_return_type = NULL_TREE;
6800 enum overload_flags flags = NO_SPECIAL;
6801 cp_cv_quals quals = TYPE_UNQUALIFIED;
6802 tree raises = NULL_TREE;
6803 int template_count = 0;
6804 tree returned_attrs = NULL_TREE;
6805 tree parms = NULL_TREE;
6806 const cp_declarator *id_declarator;
6807 /* The unqualified name of the declarator; either an
6808 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6809 tree unqualified_id;
6810 /* The class type, if any, in which this entity is located,
6811 or NULL_TREE if none. Note that this value may be different from
6812 the current class type; for example if an attempt is made to declare
6813 "A::f" inside "B", this value will be "A". */
6814 tree ctype = current_class_type;
6815 /* The NAMESPACE_DECL for the namespace in which this entity is
6816 located. If an unqualified name is used to declare the entity,
6817 this value will be NULL_TREE, even if the entity is located at
6818 namespace scope. */
6819 tree in_namespace = NULL_TREE;
6820 cp_storage_class storage_class;
6821 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6822 bool type_was_error_mark_node = false;
6824 signed_p = declspecs->specs[(int)ds_signed];
6825 unsigned_p = declspecs->specs[(int)ds_unsigned];
6826 short_p = declspecs->specs[(int)ds_short];
6827 long_p = declspecs->specs[(int)ds_long];
6828 longlong = declspecs->specs[(int)ds_long] >= 2;
6829 thread_p = declspecs->specs[(int)ds_thread];
6831 if (decl_context == FUNCDEF)
6832 funcdef_flag = true, decl_context = NORMAL;
6833 else if (decl_context == MEMFUNCDEF)
6834 funcdef_flag = true, decl_context = FIELD;
6835 else if (decl_context == BITFIELD)
6836 bitfield = 1, decl_context = FIELD;
6838 /* Look inside a declarator for the name being declared
6839 and get it as a string, for an error message. */
6840 for (id_declarator = declarator;
6841 id_declarator;
6842 id_declarator = id_declarator->declarator)
6844 if (id_declarator->kind != cdk_id)
6845 innermost_code = id_declarator->kind;
6847 switch (id_declarator->kind)
6849 case cdk_function:
6850 if (id_declarator->declarator
6851 && id_declarator->declarator->kind == cdk_id)
6853 sfk = id_declarator->declarator->u.id.sfk;
6854 if (sfk == sfk_destructor)
6855 flags = DTOR_FLAG;
6857 break;
6859 case cdk_id:
6861 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6862 tree decl = id_declarator->u.id.unqualified_name;
6863 if (!decl)
6864 break;
6865 if (qualifying_scope)
6867 if (TYPE_P (qualifying_scope))
6869 ctype = qualifying_scope;
6870 if (innermost_code != cdk_function
6871 && current_class_type
6872 && !UNIQUELY_DERIVED_FROM_P (ctype,
6873 current_class_type))
6875 error ("type %qT is not derived from type %qT",
6876 ctype, current_class_type);
6877 return error_mark_node;
6880 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6881 in_namespace = qualifying_scope;
6883 switch (TREE_CODE (decl))
6885 case BIT_NOT_EXPR:
6887 tree type;
6889 if (innermost_code != cdk_function)
6891 error ("declaration of %qD as non-function", decl);
6892 return error_mark_node;
6894 else if (!qualifying_scope
6895 && !(current_class_type && at_class_scope_p ()))
6897 error ("declaration of %qD as non-member", decl);
6898 return error_mark_node;
6901 type = TREE_OPERAND (decl, 0);
6902 name = IDENTIFIER_POINTER (constructor_name (type));
6903 dname = decl;
6905 break;
6907 case TEMPLATE_ID_EXPR:
6909 tree fns = TREE_OPERAND (decl, 0);
6911 dname = fns;
6912 if (TREE_CODE (dname) == COMPONENT_REF)
6913 dname = TREE_OPERAND (dname, 1);
6914 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6916 gcc_assert (is_overloaded_fn (dname));
6917 dname = DECL_NAME (get_first_fn (dname));
6920 /* Fall through. */
6922 case IDENTIFIER_NODE:
6923 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6924 dname = decl;
6926 if (C_IS_RESERVED_WORD (dname))
6928 error ("declarator-id missing; using reserved word %qD",
6929 dname);
6930 name = IDENTIFIER_POINTER (dname);
6932 else if (!IDENTIFIER_TYPENAME_P (dname))
6933 name = IDENTIFIER_POINTER (dname);
6934 else
6936 gcc_assert (flags == NO_SPECIAL);
6937 flags = TYPENAME_FLAG;
6938 ctor_return_type = TREE_TYPE (dname);
6939 sfk = sfk_conversion;
6940 if (is_typename_at_global_scope (dname))
6941 name = IDENTIFIER_POINTER (dname);
6942 else
6943 name = "<invalid operator>";
6945 break;
6947 default:
6948 gcc_unreachable ();
6950 break;
6952 case cdk_array:
6953 case cdk_pointer:
6954 case cdk_reference:
6955 case cdk_ptrmem:
6956 break;
6958 case cdk_error:
6959 return error_mark_node;
6961 default:
6962 gcc_unreachable ();
6965 if (id_declarator->kind == cdk_id)
6966 break;
6969 /* [dcl.fct.edf]
6971 The declarator in a function-definition shall have the form
6972 D1 ( parameter-declaration-clause) ... */
6973 if (funcdef_flag && innermost_code != cdk_function)
6975 error ("function definition does not declare parameters");
6976 return error_mark_node;
6979 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6980 && innermost_code != cdk_function
6981 && ! (ctype && !declspecs->any_specifiers_p))
6983 error ("declaration of %qD as non-function", dname);
6984 return error_mark_node;
6987 /* Anything declared one level down from the top level
6988 must be one of the parameters of a function
6989 (because the body is at least two levels down). */
6991 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6992 by not allowing C++ class definitions to specify their parameters
6993 with xdecls (must be spec.d in the parmlist).
6995 Since we now wait to push a class scope until we are sure that
6996 we are in a legitimate method context, we must set oldcname
6997 explicitly (since current_class_name is not yet alive).
6999 We also want to avoid calling this a PARM if it is in a namespace. */
7001 if (decl_context == NORMAL && !toplevel_bindings_p ())
7003 struct cp_binding_level *b = current_binding_level;
7004 current_binding_level = b->level_chain;
7005 if (current_binding_level != 0 && toplevel_bindings_p ())
7006 decl_context = PARM;
7007 current_binding_level = b;
7010 if (name == NULL)
7011 name = decl_context == PARM ? "parameter" : "type name";
7013 /* If there were multiple types specified in the decl-specifier-seq,
7014 issue an error message. */
7015 if (declspecs->multiple_types_p)
7016 error ("two or more data types in declaration of %qs", name);
7017 /* Extract the basic type from the decl-specifier-seq. */
7018 type = declspecs->type;
7019 if (type == error_mark_node)
7021 type = NULL_TREE;
7022 type_was_error_mark_node = true;
7024 /* If the entire declaration is itself tagged as deprecated then
7025 suppress reports of deprecated items. */
7026 if (type && TREE_DEPRECATED (type)
7027 && deprecated_state != DEPRECATED_SUPPRESS)
7028 warn_deprecated_use (type);
7029 if (type && TREE_CODE (type) == TYPE_DECL)
7031 typedef_decl = type;
7032 type = TREE_TYPE (typedef_decl);
7034 /* No type at all: default to `int', and set DEFAULTED_INT
7035 because it was not a user-defined typedef. */
7036 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7038 /* These imply 'int'. */
7039 type = integer_type_node;
7040 defaulted_int = 1;
7042 /* Gather flags. */
7043 explicit_int = declspecs->explicit_int_p;
7044 explicit_char = declspecs->explicit_char_p;
7046 #if 0
7047 /* See the code below that used this. */
7048 if (typedef_decl)
7049 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7050 #endif
7051 typedef_type = type;
7054 if (sfk != sfk_conversion)
7055 ctor_return_type = ctype;
7057 if (sfk != sfk_none)
7058 type = check_special_function_return_type (sfk, type,
7059 ctor_return_type);
7060 else if (type == NULL_TREE)
7062 int is_main;
7064 explicit_int = -1;
7066 /* We handle `main' specially here, because 'main () { }' is so
7067 common. With no options, it is allowed. With -Wreturn-type,
7068 it is a warning. It is only an error with -pedantic-errors. */
7069 is_main = (funcdef_flag
7070 && dname && MAIN_NAME_P (dname)
7071 && ctype == NULL_TREE
7072 && in_namespace == NULL_TREE
7073 && current_namespace == global_namespace);
7075 if (type_was_error_mark_node)
7076 /* We've already issued an error, don't complain more. */;
7077 else if (in_system_header || flag_ms_extensions)
7078 /* Allow it, sigh. */;
7079 else if (pedantic || ! is_main)
7080 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7081 else if (warn_return_type)
7082 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7084 type = integer_type_node;
7087 ctype = NULL_TREE;
7089 /* Now process the modifiers that were specified
7090 and check for invalid combinations. */
7092 /* Long double is a special combination. */
7093 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7095 long_p = false;
7096 type = build_qualified_type (long_double_type_node,
7097 cp_type_quals (type));
7100 /* Check all other uses of type modifiers. */
7102 if (unsigned_p || signed_p || long_p || short_p)
7104 int ok = 0;
7106 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7107 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7108 else if (signed_p && unsigned_p)
7109 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7110 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7111 error ("%<long long%> invalid for %qs", name);
7112 else if (long_p && TREE_CODE (type) == REAL_TYPE)
7113 error ("%<long%> invalid for %qs", name);
7114 else if (short_p && TREE_CODE (type) == REAL_TYPE)
7115 error ("%<short%> invalid for %qs", name);
7116 else if ((long_p || short_p) && explicit_char)
7117 error ("%<long%> or %<short%> specified with char for %qs", name);
7118 else if (long_p && short_p)
7119 error ("%<long%> and %<short%> specified together for %qs", name);
7120 else
7122 ok = 1;
7123 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7125 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7126 name);
7127 if (flag_pedantic_errors)
7128 ok = 0;
7132 /* Discard the type modifiers if they are invalid. */
7133 if (! ok)
7135 unsigned_p = false;
7136 signed_p = false;
7137 long_p = false;
7138 short_p = false;
7139 longlong = 0;
7143 /* Decide whether an integer type is signed or not.
7144 Optionally treat bitfields as signed by default. */
7145 if (unsigned_p
7146 /* [class.bit]
7148 It is implementation-defined whether a plain (neither
7149 explicitly signed or unsigned) char, short, int, or long
7150 bit-field is signed or unsigned.
7152 Naturally, we extend this to long long as well. Note that
7153 this does not include wchar_t. */
7154 || (bitfield && !flag_signed_bitfields
7155 && !signed_p
7156 /* A typedef for plain `int' without `signed' can be
7157 controlled just like plain `int', but a typedef for
7158 `signed int' cannot be so controlled. */
7159 && !(typedef_decl
7160 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7161 && TREE_CODE (type) == INTEGER_TYPE
7162 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7164 if (longlong)
7165 type = long_long_unsigned_type_node;
7166 else if (long_p)
7167 type = long_unsigned_type_node;
7168 else if (short_p)
7169 type = short_unsigned_type_node;
7170 else if (type == char_type_node)
7171 type = unsigned_char_type_node;
7172 else if (typedef_decl)
7173 type = c_common_unsigned_type (type);
7174 else
7175 type = unsigned_type_node;
7177 else if (signed_p && type == char_type_node)
7178 type = signed_char_type_node;
7179 else if (longlong)
7180 type = long_long_integer_type_node;
7181 else if (long_p)
7182 type = long_integer_type_node;
7183 else if (short_p)
7184 type = short_integer_type_node;
7186 if (declspecs->specs[(int)ds_complex])
7188 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7189 error ("complex invalid for %qs", name);
7190 /* If we just have "complex", it is equivalent to
7191 "complex double", but if any modifiers at all are specified it is
7192 the complex form of TYPE. E.g, "complex short" is
7193 "complex short int". */
7195 else if (defaulted_int && ! longlong
7196 && ! (long_p || short_p || signed_p || unsigned_p))
7197 type = complex_double_type_node;
7198 else if (type == integer_type_node)
7199 type = complex_integer_type_node;
7200 else if (type == float_type_node)
7201 type = complex_float_type_node;
7202 else if (type == double_type_node)
7203 type = complex_double_type_node;
7204 else if (type == long_double_type_node)
7205 type = complex_long_double_type_node;
7206 else
7207 type = build_complex_type (type);
7210 type_quals = TYPE_UNQUALIFIED;
7211 if (declspecs->specs[(int)ds_const])
7212 type_quals |= TYPE_QUAL_CONST;
7213 if (declspecs->specs[(int)ds_volatile])
7214 type_quals |= TYPE_QUAL_VOLATILE;
7215 if (declspecs->specs[(int)ds_restrict])
7216 type_quals |= TYPE_QUAL_RESTRICT;
7217 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7218 error ("qualifiers are not allowed on declaration of %<operator %T%>",
7219 ctor_return_type);
7221 if (TREE_CODE (type) == FUNCTION_TYPE
7222 && type_quals != TYPE_UNQUALIFIED)
7224 /* This was an error in C++98 (cv-qualifiers cannot be added to
7225 a function type), but DR 295 makes the code well-formed by
7226 dropping the extra qualifiers. */
7227 if (pedantic)
7229 tree bad_type = build_qualified_type (type, type_quals);
7230 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7231 bad_type, type);
7233 type_quals = TYPE_UNQUALIFIED;
7235 type_quals |= cp_type_quals (type);
7236 type = cp_build_qualified_type_real
7237 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7238 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7239 /* We might have ignored or rejected some of the qualifiers. */
7240 type_quals = cp_type_quals (type);
7242 staticp = 0;
7243 inlinep = !! declspecs->specs[(int)ds_inline];
7244 virtualp = !! declspecs->specs[(int)ds_virtual];
7245 explicitp = !! declspecs->specs[(int)ds_explicit];
7247 storage_class = declspecs->storage_class;
7248 if (storage_class == sc_static)
7249 staticp = 1 + (decl_context == FIELD);
7251 if (virtualp && staticp == 2)
7253 error ("member %qD cannot be declared both virtual and static", dname);
7254 storage_class = sc_none;
7255 staticp = 0;
7257 friendp = !! declspecs->specs[(int)ds_friend];
7259 if (dependant_name && !friendp)
7261 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
7262 return void_type_node;
7265 /* Issue errors about use of storage classes for parameters. */
7266 if (decl_context == PARM)
7268 if (declspecs->specs[(int)ds_typedef])
7269 error ("typedef declaration invalid in parameter declaration");
7270 else if (storage_class == sc_static
7271 || storage_class == sc_extern
7272 || thread_p)
7273 error ("storage class specifiers invalid in parameter declarations");
7276 /* Give error if `virtual' is used outside of class declaration. */
7277 if (virtualp
7278 && (current_class_name == NULL_TREE || decl_context != FIELD))
7280 error ("virtual outside class declaration");
7281 virtualp = 0;
7284 /* Static anonymous unions are dealt with here. */
7285 if (staticp && decl_context == TYPENAME
7286 && declspecs->type
7287 && ANON_AGGR_TYPE_P (declspecs->type))
7288 decl_context = FIELD;
7290 /* Warn about storage classes that are invalid for certain
7291 kinds of declarations (parameters, typenames, etc.). */
7292 if (declspecs->multiple_storage_classes_p)
7294 error ("multiple storage classes in declaration of %qs", name);
7295 storage_class = sc_none;
7297 else if (thread_p
7298 && ((storage_class
7299 && storage_class != sc_extern
7300 && storage_class != sc_static)
7301 || declspecs->specs[(int)ds_typedef]))
7303 error ("multiple storage classes in declaration of %qs", name);
7304 thread_p = false;
7306 else if (decl_context != NORMAL
7307 && ((storage_class != sc_none
7308 && storage_class != sc_mutable)
7309 || thread_p))
7311 if ((decl_context == PARM || decl_context == CATCHPARM)
7312 && (storage_class == sc_register
7313 || storage_class == sc_auto))
7315 else if (declspecs->specs[(int)ds_typedef])
7317 else if (decl_context == FIELD
7318 /* C++ allows static class elements. */
7319 && storage_class == sc_static)
7320 /* C++ also allows inlines and signed and unsigned elements,
7321 but in those cases we don't come in here. */
7323 else
7325 if (decl_context == FIELD)
7326 error ("storage class specified for %qs", name);
7327 else
7329 if (decl_context == PARM || decl_context == CATCHPARM)
7330 error ("storage class specified for parameter %qs", name);
7331 else
7332 error ("storage class specified for typename");
7334 if (storage_class == sc_register
7335 || storage_class == sc_auto
7336 || storage_class == sc_extern
7337 || thread_p)
7338 storage_class = sc_none;
7341 else if (storage_class == sc_extern && initialized
7342 && !funcdef_flag)
7344 if (toplevel_bindings_p ())
7346 /* It's common practice (and completely valid) to have a const
7347 be initialized and declared extern. */
7348 if (!(type_quals & TYPE_QUAL_CONST))
7349 warning (0, "%qs initialized and declared %<extern%>", name);
7351 else
7352 error ("%qs has both %<extern%> and initializer", name);
7354 else if (storage_class == sc_extern && funcdef_flag
7355 && ! toplevel_bindings_p ())
7356 error ("nested function %qs declared %<extern%>", name);
7357 else if (toplevel_bindings_p ())
7359 if (storage_class == sc_auto)
7360 error ("top-level declaration of %qs specifies %<auto%>", name);
7362 else if (thread_p
7363 && storage_class != sc_extern
7364 && storage_class != sc_static)
7366 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7367 name);
7368 thread_p = false;
7371 if (storage_class && friendp)
7372 error ("storage class specifiers invalid in friend function declarations");
7374 if (!id_declarator)
7375 unqualified_id = NULL_TREE;
7376 else
7378 unqualified_id = id_declarator->u.id.unqualified_name;
7379 switch (TREE_CODE (unqualified_id))
7381 case BIT_NOT_EXPR:
7382 unqualified_id
7383 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7384 break;
7386 case IDENTIFIER_NODE:
7387 case TEMPLATE_ID_EXPR:
7388 break;
7390 default:
7391 gcc_unreachable ();
7395 /* Determine the type of the entity declared by recurring on the
7396 declarator. */
7397 for (; declarator; declarator = declarator->declarator)
7399 const cp_declarator *inner_declarator;
7400 tree attrs;
7402 if (type == error_mark_node)
7403 return error_mark_node;
7405 attrs = declarator->attributes;
7406 if (attrs)
7408 int attr_flags;
7410 attr_flags = 0;
7411 if (declarator == NULL || declarator->kind == cdk_id)
7412 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7413 if (declarator->kind == cdk_function)
7414 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7415 if (declarator->kind == cdk_array)
7416 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7417 returned_attrs = decl_attributes (&type,
7418 chainon (returned_attrs, attrs),
7419 attr_flags);
7422 if (declarator->kind == cdk_id)
7423 break;
7425 inner_declarator = declarator->declarator;
7427 switch (declarator->kind)
7429 case cdk_array:
7430 type = create_array_type_for_decl (dname, type,
7431 declarator->u.array.bounds);
7432 break;
7434 case cdk_function:
7436 tree arg_types;
7437 int funcdecl_p;
7439 /* Declaring a function type.
7440 Make sure we have a valid type for the function to return. */
7442 /* We now know that the TYPE_QUALS don't apply to the
7443 decl, but to its return type. */
7444 type_quals = TYPE_UNQUALIFIED;
7446 /* Warn about some types functions can't return. */
7448 if (TREE_CODE (type) == FUNCTION_TYPE)
7450 error ("%qs declared as function returning a function", name);
7451 type = integer_type_node;
7453 if (TREE_CODE (type) == ARRAY_TYPE)
7455 error ("%qs declared as function returning an array", name);
7456 type = integer_type_node;
7459 /* Pick up type qualifiers which should be applied to `this'. */
7460 quals = declarator->u.function.qualifiers;
7462 /* Pick up the exception specifications. */
7463 raises = declarator->u.function.exception_specification;
7465 /* Say it's a definition only for the CALL_EXPR
7466 closest to the identifier. */
7467 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7469 if (ctype == NULL_TREE
7470 && decl_context == FIELD
7471 && funcdecl_p
7472 && (friendp == 0 || dname == current_class_name))
7473 ctype = current_class_type;
7475 if (ctype && (sfk == sfk_constructor
7476 || sfk == sfk_destructor))
7478 /* We are within a class's scope. If our declarator name
7479 is the same as the class name, and we are defining
7480 a function, then it is a constructor/destructor, and
7481 therefore returns a void type. */
7483 if (flags == DTOR_FLAG)
7485 /* ISO C++ 12.4/2. A destructor may not be
7486 declared const or volatile. A destructor may
7487 not be static. */
7488 if (staticp == 2)
7489 error ("destructor cannot be static member function");
7490 if (quals)
7492 error ("destructors may not be cv-qualified");
7493 quals = TYPE_UNQUALIFIED;
7495 if (decl_context == FIELD)
7497 if (! member_function_or_else (ctype,
7498 current_class_type,
7499 flags))
7500 return void_type_node;
7503 else /* It's a constructor. */
7505 if (explicitp == 1)
7506 explicitp = 2;
7507 /* ISO C++ 12.1. A constructor may not be
7508 declared const or volatile. A constructor may
7509 not be virtual. A constructor may not be
7510 static. */
7511 if (staticp == 2)
7512 error ("constructor cannot be static member function");
7513 if (virtualp)
7515 pedwarn ("constructors cannot be declared virtual");
7516 virtualp = 0;
7518 if (quals)
7520 error ("constructors may not be cv-qualified");
7521 quals = TYPE_UNQUALIFIED;
7523 if (decl_context == FIELD)
7525 if (! member_function_or_else (ctype,
7526 current_class_type,
7527 flags))
7528 return void_type_node;
7529 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7530 if (sfk != sfk_constructor)
7531 return NULL_TREE;
7534 if (decl_context == FIELD)
7535 staticp = 0;
7537 else if (friendp)
7539 if (initialized)
7540 error ("can't initialize friend function %qs", name);
7541 if (virtualp)
7543 /* Cannot be both friend and virtual. */
7544 error ("virtual functions cannot be friends");
7545 friendp = 0;
7547 if (decl_context == NORMAL)
7548 error ("friend declaration not in class definition");
7549 if (current_function_decl && funcdef_flag)
7550 error ("can't define friend function %qs in a local "
7551 "class definition",
7552 name);
7555 arg_types = grokparms (declarator->u.function.parameters,
7556 &parms);
7558 if (inner_declarator
7559 && inner_declarator->kind == cdk_id
7560 && inner_declarator->u.id.sfk == sfk_destructor
7561 && arg_types != void_list_node)
7563 error ("destructors may not have parameters");
7564 arg_types = void_list_node;
7565 parms = NULL_TREE;
7568 type = build_function_type (type, arg_types);
7569 type = cp_build_qualified_type (type, quals);
7571 break;
7573 case cdk_pointer:
7574 case cdk_reference:
7575 case cdk_ptrmem:
7576 /* Filter out pointers-to-references and references-to-references.
7577 We can get these if a TYPE_DECL is used. */
7579 if (TREE_CODE (type) == REFERENCE_TYPE)
7581 error (declarator->kind == cdk_reference
7582 ? "cannot declare reference to %q#T"
7583 : "cannot declare pointer to %q#T", type);
7584 type = TREE_TYPE (type);
7586 else if (VOID_TYPE_P (type))
7588 if (declarator->kind == cdk_reference)
7589 error ("cannot declare reference to %q#T", type);
7590 else if (declarator->kind == cdk_ptrmem)
7591 error ("cannot declare pointer to %q#T member", type);
7594 /* We now know that the TYPE_QUALS don't apply to the decl,
7595 but to the target of the pointer. */
7596 type_quals = TYPE_UNQUALIFIED;
7598 if (declarator->kind == cdk_ptrmem
7599 && (TREE_CODE (type) == FUNCTION_TYPE
7600 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7602 tree dummy;
7604 /* If the type is a FUNCTION_TYPE, pick up the
7605 qualifiers from that function type. No other
7606 qualifiers may be supplied. */
7607 if (TREE_CODE (type) == FUNCTION_TYPE)
7608 quals = cp_type_quals (type);
7610 dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7611 grok_method_quals (declarator->u.pointer.class_type,
7612 dummy, quals);
7613 type = TREE_TYPE (dummy);
7614 quals = TYPE_UNQUALIFIED;
7617 if (declarator->kind == cdk_reference)
7619 if (!VOID_TYPE_P (type))
7620 type = build_reference_type (type);
7622 else if (TREE_CODE (type) == METHOD_TYPE)
7623 type = build_ptrmemfunc_type (build_pointer_type (type));
7624 else if (declarator->kind == cdk_ptrmem)
7626 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7627 != NAMESPACE_DECL);
7628 if (declarator->u.pointer.class_type == error_mark_node)
7629 /* We will already have complained. */
7630 type = error_mark_node;
7631 else
7632 type = build_ptrmem_type (declarator->u.pointer.class_type,
7633 type);
7635 else
7636 type = build_pointer_type (type);
7638 /* Process a list of type modifier keywords (such as
7639 const or volatile) that were given inside the `*' or `&'. */
7641 if (declarator->u.pointer.qualifiers)
7643 type
7644 = cp_build_qualified_type (type,
7645 declarator->u.pointer.qualifiers);
7646 type_quals = cp_type_quals (type);
7648 ctype = NULL_TREE;
7649 break;
7651 case cdk_error:
7652 break;
7654 default:
7655 gcc_unreachable ();
7659 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7660 && TREE_CODE (type) != FUNCTION_TYPE
7661 && TREE_CODE (type) != METHOD_TYPE)
7663 error ("template-id %qD used as a declarator",
7664 unqualified_id);
7665 unqualified_id = dname;
7668 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7669 qualified with a class-name, turn it into a METHOD_TYPE, unless
7670 we know that the function is static. We take advantage of this
7671 opportunity to do other processing that pertains to entities
7672 explicitly declared to be class members. Note that if DECLARATOR
7673 is non-NULL, we know it is a cdk_id declarator; otherwise, we
7674 would not have exited the loop above. */
7675 if (declarator
7676 && declarator->u.id.qualifying_scope
7677 && TYPE_P (declarator->u.id.qualifying_scope))
7679 tree t;
7681 ctype = declarator->u.id.qualifying_scope;
7682 ctype = TYPE_MAIN_VARIANT (ctype);
7683 t = ctype;
7684 while (t != NULL_TREE && CLASS_TYPE_P (t))
7686 /* You're supposed to have one `template <...>' for every
7687 template class, but you don't need one for a full
7688 specialization. For example:
7690 template <class T> struct S{};
7691 template <> struct S<int> { void f(); };
7692 void S<int>::f () {}
7694 is correct; there shouldn't be a `template <>' for the
7695 definition of `S<int>::f'. */
7696 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7697 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7698 /* T is an explicit (not partial) specialization. All
7699 containing classes must therefore also be explicitly
7700 specialized. */
7701 break;
7702 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7703 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7704 template_count += 1;
7706 t = TYPE_MAIN_DECL (t);
7707 t = DECL_CONTEXT (t);
7710 if (ctype == current_class_type)
7712 if (friendp)
7713 pedwarn ("member functions are implicitly friends of their class");
7714 else
7715 pedwarn ("extra qualification %<%T::%> on member %qs",
7716 ctype, name);
7718 else if (/* If the qualifying type is already complete, then we
7719 can skip the following checks. */
7720 !COMPLETE_TYPE_P (ctype)
7721 /* If a function is being defined, then the qualifing
7722 type must be complete. The qualifing type may be
7723 incomplete for a declaration only if the qualitying
7724 type is one of the classes presently being defined,
7725 or if it is a dependent type. */
7726 && (funcdef_flag
7727 || !(dependent_type_p (ctype)
7728 || currently_open_class (ctype)))
7729 /* Check that the qualifing type is complete. */
7730 && !complete_type_or_else (ctype, NULL_TREE))
7731 return error_mark_node;
7732 else if (TREE_CODE (type) == FUNCTION_TYPE)
7734 tree sname = declarator->u.id.unqualified_name;
7736 if (current_class_type
7737 && (!friendp || funcdef_flag))
7739 error (funcdef_flag
7740 ? "cannot define member function %<%T::%s%> within %<%T%>"
7741 : "cannot declare member function %<%T::%s%> within %<%T%>",
7742 ctype, name, current_class_type);
7743 return error_mark_node;
7746 if (TREE_CODE (sname) == IDENTIFIER_NODE
7747 && NEW_DELETE_OPNAME_P (sname))
7748 /* Overloaded operator new and operator delete
7749 are always static functions. */
7751 else
7752 type = build_method_type_directly (ctype,
7753 TREE_TYPE (type),
7754 TYPE_ARG_TYPES (type));
7756 else if (declspecs->specs[(int)ds_typedef]
7757 && current_class_type)
7759 error ("cannot declare member %<%T::%s%> within %qT",
7760 ctype, name, current_class_type);
7761 return error_mark_node;
7765 /* Now TYPE has the actual type. */
7767 if (returned_attrs)
7769 if (attrlist)
7770 *attrlist = chainon (returned_attrs, *attrlist);
7771 else
7772 attrlist = &returned_attrs;
7775 /* Did array size calculations overflow? */
7777 if (TREE_CODE (type) == ARRAY_TYPE
7778 && COMPLETE_TYPE_P (type)
7779 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7780 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7782 error ("size of array %qs is too large", name);
7783 /* If we proceed with the array type as it is, we'll eventually
7784 crash in tree_low_cst(). */
7785 type = error_mark_node;
7788 if ((decl_context == FIELD || decl_context == PARM)
7789 && !processing_template_decl
7790 && variably_modified_type_p (type, NULL_TREE))
7792 if (decl_context == FIELD)
7793 error ("data member may not have variably modified type %qT", type);
7794 else
7795 error ("parameter may not have variably modified type %qT", type);
7796 type = error_mark_node;
7799 if (explicitp == 1 || (explicitp && friendp))
7801 /* [dcl.fct.spec] The explicit specifier shall only be used in
7802 declarations of constructors within a class definition. */
7803 error ("only declarations of constructors can be %<explicit%>");
7804 explicitp = 0;
7807 if (storage_class == sc_mutable)
7809 if (decl_context != FIELD || friendp)
7811 error ("non-member %qs cannot be declared %<mutable%>", name);
7812 storage_class = sc_none;
7814 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7816 error ("non-object member %qs cannot be declared %<mutable%>", name);
7817 storage_class = sc_none;
7819 else if (TREE_CODE (type) == FUNCTION_TYPE
7820 || TREE_CODE (type) == METHOD_TYPE)
7822 error ("function %qs cannot be declared %<mutable%>", name);
7823 storage_class = sc_none;
7825 else if (staticp)
7827 error ("static %qs cannot be declared %<mutable%>", name);
7828 storage_class = sc_none;
7830 else if (type_quals & TYPE_QUAL_CONST)
7832 error ("const %qs cannot be declared %<mutable%>", name);
7833 storage_class = sc_none;
7837 /* If this is declaring a typedef name, return a TYPE_DECL. */
7838 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7840 tree decl;
7842 /* Note that the grammar rejects storage classes
7843 in typenames, fields or parameters. */
7844 if (current_lang_name == lang_name_java)
7845 TYPE_FOR_JAVA (type) = 1;
7847 if (decl_context == FIELD)
7848 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7849 else
7850 decl = build_decl (TYPE_DECL, unqualified_id, type);
7851 if (id_declarator && declarator->u.id.qualifying_scope)
7852 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7854 if (decl_context != FIELD)
7856 if (!current_function_decl)
7857 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7858 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7859 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7860 (current_function_decl)))
7861 /* The TYPE_DECL is "abstract" because there will be
7862 clones of this constructor/destructor, and there will
7863 be copies of this TYPE_DECL generated in those
7864 clones. */
7865 DECL_ABSTRACT (decl) = 1;
7867 else if (constructor_name_p (unqualified_id, current_class_type))
7868 pedwarn ("ISO C++ forbids nested type %qD with same name "
7869 "as enclosing class",
7870 unqualified_id);
7872 /* If the user declares "typedef struct {...} foo" then the
7873 struct will have an anonymous name. Fill that name in now.
7874 Nothing can refer to it, so nothing needs know about the name
7875 change. */
7876 if (type != error_mark_node
7877 && unqualified_id
7878 && TYPE_NAME (type)
7879 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7880 && TYPE_ANONYMOUS_P (type)
7881 /* Don't do this if there are attributes. */
7882 && (!attrlist || !*attrlist)
7883 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7885 tree oldname = TYPE_NAME (type);
7886 tree t;
7888 /* Replace the anonymous name with the real name everywhere. */
7889 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7890 if (TYPE_NAME (t) == oldname)
7891 TYPE_NAME (t) = decl;
7893 if (TYPE_LANG_SPECIFIC (type))
7894 TYPE_WAS_ANONYMOUS (type) = 1;
7896 /* If this is a typedef within a template class, the nested
7897 type is a (non-primary) template. The name for the
7898 template needs updating as well. */
7899 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7900 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7901 = TYPE_IDENTIFIER (type);
7903 /* FIXME remangle member functions; member functions of a
7904 type with external linkage have external linkage. */
7907 if (quals)
7909 if (ctype == NULL_TREE)
7911 if (TREE_CODE (type) == METHOD_TYPE)
7912 ctype = TYPE_METHOD_BASETYPE (type);
7913 /* Any qualifiers on a function type typedef have
7914 already been dealt with. */
7915 else if (TREE_CODE (type) == FUNCTION_TYPE)
7916 quals = TYPE_UNQUALIFIED;
7918 if (ctype != NULL_TREE)
7919 grok_method_quals (ctype, decl, quals);
7922 if (signed_p
7923 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7924 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7926 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7927 inlinep, friendp, raises != NULL_TREE);
7929 return decl;
7932 /* Detect the case of an array type of unspecified size
7933 which came, as such, direct from a typedef name.
7934 We must copy the type, so that the array's domain can be
7935 individually set by the object's initializer. */
7937 if (type && typedef_type
7938 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7939 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7940 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7942 /* Detect where we're using a typedef of function type to declare a
7943 function. PARMS will not be set, so we must create it now. */
7945 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7947 tree decls = NULL_TREE;
7948 tree args;
7950 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7952 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7954 TREE_CHAIN (decl) = decls;
7955 decls = decl;
7958 parms = nreverse (decls);
7960 if (decl_context != TYPENAME)
7962 /* A cv-qualifier-seq shall only be part of the function type
7963 for a non-static member function. [8.3.5/4 dcl.fct] */
7964 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7965 && (current_class_type == NULL_TREE || staticp) )
7967 error ("qualified function types cannot be used to declare %s functions",
7968 (staticp? "static member" : "free"));
7969 type = TYPE_MAIN_VARIANT (type);
7972 /* The qualifiers on the function type become the qualifiers on
7973 the non-static member function. */
7974 quals |= cp_type_quals (type);
7978 /* If this is a type name (such as, in a cast or sizeof),
7979 compute the type and return it now. */
7981 if (decl_context == TYPENAME)
7983 /* Note that the grammar rejects storage classes
7984 in typenames, fields or parameters. */
7985 if (type_quals != TYPE_UNQUALIFIED)
7986 type_quals = TYPE_UNQUALIFIED;
7988 /* Special case: "friend class foo" looks like a TYPENAME context. */
7989 if (friendp)
7991 if (type_quals != TYPE_UNQUALIFIED)
7993 error ("type qualifiers specified for friend class declaration");
7994 type_quals = TYPE_UNQUALIFIED;
7996 if (inlinep)
7998 error ("%<inline%> specified for friend class declaration");
7999 inlinep = 0;
8002 if (!current_aggr)
8004 /* Don't allow friend declaration without a class-key. */
8005 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8006 pedwarn ("template parameters cannot be friends");
8007 else if (TREE_CODE (type) == TYPENAME_TYPE)
8008 pedwarn ("friend declaration requires class-key, "
8009 "i.e. %<friend class %T::%D%>",
8010 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8011 else
8012 pedwarn ("friend declaration requires class-key, "
8013 "i.e. %<friend %#T%>",
8014 type);
8017 /* Only try to do this stuff if we didn't already give up. */
8018 if (type != integer_type_node)
8020 /* A friendly class? */
8021 if (current_class_type)
8022 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8023 /*complain=*/true);
8024 else
8025 error ("trying to make class %qT a friend of global scope",
8026 type);
8028 type = void_type_node;
8031 else if (quals)
8033 if (ctype == NULL_TREE)
8035 if (TREE_CODE (type) != METHOD_TYPE)
8036 error ("invalid qualifiers on non-member function type");
8037 else
8038 ctype = TYPE_METHOD_BASETYPE (type);
8040 if (ctype)
8042 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
8043 grok_method_quals (ctype, dummy, quals);
8044 type = TREE_TYPE (dummy);
8048 return type;
8050 else if (unqualified_id == NULL_TREE && decl_context != PARM
8051 && decl_context != CATCHPARM
8052 && TREE_CODE (type) != UNION_TYPE
8053 && ! bitfield)
8055 error ("abstract declarator %qT used as declaration", type);
8056 return error_mark_node;
8059 /* Only functions may be declared using an operator-function-id. */
8060 if (unqualified_id
8061 && IDENTIFIER_OPNAME_P (unqualified_id)
8062 && TREE_CODE (type) != FUNCTION_TYPE
8063 && TREE_CODE (type) != METHOD_TYPE)
8065 error ("declaration of %qD as non-function", unqualified_id);
8066 return error_mark_node;
8069 /* We don't check parameter types here because we can emit a better
8070 error message later. */
8071 if (decl_context != PARM)
8072 type = check_var_type (unqualified_id, type);
8074 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8075 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8077 if (decl_context == PARM || decl_context == CATCHPARM)
8079 if (ctype || in_namespace)
8080 error ("cannot use %<::%> in parameter declaration");
8082 /* A parameter declared as an array of T is really a pointer to T.
8083 One declared as a function is really a pointer to a function.
8084 One declared as a member is really a pointer to member. */
8086 if (TREE_CODE (type) == ARRAY_TYPE)
8088 /* Transfer const-ness of array into that of type pointed to. */
8089 type = build_pointer_type (TREE_TYPE (type));
8090 type_quals = TYPE_UNQUALIFIED;
8092 else if (TREE_CODE (type) == FUNCTION_TYPE)
8093 type = build_pointer_type (type);
8097 tree decl;
8099 if (decl_context == PARM)
8101 decl = cp_build_parm_decl (unqualified_id, type);
8103 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
8104 inlinep, friendp, raises != NULL_TREE);
8106 else if (decl_context == FIELD)
8108 /* The C99 flexible array extension. */
8109 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8110 && TYPE_DOMAIN (type) == NULL_TREE)
8112 tree itype = compute_array_index_type (dname, integer_zero_node);
8113 type = build_cplus_array_type (TREE_TYPE (type), itype);
8116 if (type == error_mark_node)
8118 /* Happens when declaring arrays of sizes which
8119 are error_mark_node, for example. */
8120 decl = NULL_TREE;
8122 else if (in_namespace && !friendp)
8124 /* Something like struct S { int N::j; }; */
8125 error ("invalid use of %<::%>");
8126 decl = NULL_TREE;
8128 else if (TREE_CODE (type) == FUNCTION_TYPE)
8130 int publicp = 0;
8131 tree function_context;
8133 if (friendp == 0)
8135 if (ctype == NULL_TREE)
8136 ctype = current_class_type;
8138 if (ctype == NULL_TREE)
8140 error ("can't make %qD into a method -- not in a class",
8141 unqualified_id);
8142 return void_type_node;
8145 /* ``A union may [ ... ] not [ have ] virtual functions.''
8146 ARM 9.5 */
8147 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8149 error ("function %qD declared virtual inside a union",
8150 unqualified_id);
8151 return void_type_node;
8154 if (NEW_DELETE_OPNAME_P (unqualified_id))
8156 if (virtualp)
8158 error ("%qD cannot be declared virtual, since it "
8159 "is always static",
8160 unqualified_id);
8161 virtualp = 0;
8164 else if (staticp < 2)
8165 type = build_method_type_directly (ctype,
8166 TREE_TYPE (type),
8167 TYPE_ARG_TYPES (type));
8170 /* Check that the name used for a destructor makes sense. */
8171 if (sfk == sfk_destructor)
8173 if (!ctype)
8175 gcc_assert (friendp);
8176 error ("expected qualified name in friend declaration "
8177 "for destructor %qD",
8178 id_declarator->u.id.unqualified_name);
8179 return error_mark_node;
8182 if (!same_type_p (TREE_OPERAND
8183 (id_declarator->u.id.unqualified_name, 0),
8184 ctype))
8186 error ("declaration of %qD as member of %qT",
8187 id_declarator->u.id.unqualified_name, ctype);
8188 return error_mark_node;
8192 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8193 function_context = (ctype != NULL_TREE) ?
8194 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8195 publicp = (! friendp || ! staticp)
8196 && function_context == NULL_TREE;
8197 decl = grokfndecl (ctype, type,
8198 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8199 ? unqualified_id : dname,
8200 parms,
8201 unqualified_id,
8202 virtualp, flags, quals, raises,
8203 friendp ? -1 : 0, friendp, publicp, inlinep,
8204 sfk,
8205 funcdef_flag, template_count, in_namespace, attrlist);
8206 if (decl == NULL_TREE)
8207 return decl;
8208 #if 0
8209 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8210 /* The decl and setting of decl_attr is also turned off. */
8211 decl = build_decl_attribute_variant (decl, decl_attr);
8212 #endif
8214 /* [class.conv.ctor]
8216 A constructor declared without the function-specifier
8217 explicit that can be called with a single parameter
8218 specifies a conversion from the type of its first
8219 parameter to the type of its class. Such a constructor
8220 is called a converting constructor. */
8221 if (explicitp == 2)
8222 DECL_NONCONVERTING_P (decl) = 1;
8223 else if (DECL_CONSTRUCTOR_P (decl))
8225 /* The constructor can be called with exactly one
8226 parameter if there is at least one parameter, and
8227 any subsequent parameters have default arguments.
8228 Ignore any compiler-added parms. */
8229 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8231 if (arg_types == void_list_node
8232 || (arg_types
8233 && TREE_CHAIN (arg_types)
8234 && TREE_CHAIN (arg_types) != void_list_node
8235 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8236 DECL_NONCONVERTING_P (decl) = 1;
8239 else if (TREE_CODE (type) == METHOD_TYPE)
8241 /* We only get here for friend declarations of
8242 members of other classes. */
8243 /* All method decls are public, so tell grokfndecl to set
8244 TREE_PUBLIC, also. */
8245 decl = grokfndecl (ctype, type,
8246 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8247 ? unqualified_id : dname,
8248 parms,
8249 unqualified_id,
8250 virtualp, flags, quals, raises,
8251 friendp ? -1 : 0, friendp, 1, 0, sfk,
8252 funcdef_flag, template_count, in_namespace,
8253 attrlist);
8254 if (decl == NULL_TREE)
8255 return NULL_TREE;
8257 else if (!staticp && !dependent_type_p (type)
8258 && !COMPLETE_TYPE_P (complete_type (type))
8259 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8261 if (unqualified_id)
8262 error ("field %qD has incomplete type", unqualified_id);
8263 else
8264 error ("name %qT has incomplete type", type);
8266 /* If we're instantiating a template, tell them which
8267 instantiation made the field's type be incomplete. */
8268 if (current_class_type
8269 && TYPE_NAME (current_class_type)
8270 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8271 && declspecs->type
8272 && declspecs->type == type)
8273 error (" in instantiation of template %qT",
8274 current_class_type);
8276 type = error_mark_node;
8277 decl = NULL_TREE;
8279 else
8281 if (friendp)
8283 error ("%qE is neither function nor member function; "
8284 "cannot be declared friend", unqualified_id);
8285 friendp = 0;
8287 decl = NULL_TREE;
8290 if (friendp)
8292 /* Friends are treated specially. */
8293 if (ctype == current_class_type)
8294 ; /* We already issued a pedwarn. */
8295 else if (decl && DECL_NAME (decl))
8297 if (template_class_depth (current_class_type) == 0)
8299 decl = check_explicit_specialization
8300 (unqualified_id, decl, template_count,
8301 2 * funcdef_flag + 4);
8302 if (decl == error_mark_node)
8303 return error_mark_node;
8306 decl = do_friend (ctype, unqualified_id, decl,
8307 *attrlist, flags, quals, funcdef_flag);
8308 return decl;
8310 else
8311 return void_type_node;
8314 /* Structure field. It may not be a function, except for C++. */
8316 if (decl == NULL_TREE)
8318 if (initialized)
8320 if (!staticp)
8322 /* An attempt is being made to initialize a non-static
8323 member. But, from [class.mem]:
8325 4 A member-declarator can contain a
8326 constant-initializer only if it declares a static
8327 member (_class.static_) of integral or enumeration
8328 type, see _class.static.data_.
8330 This used to be relatively common practice, but
8331 the rest of the compiler does not correctly
8332 handle the initialization unless the member is
8333 static so we make it static below. */
8334 pedwarn ("ISO C++ forbids initialization of member %qD",
8335 unqualified_id);
8336 pedwarn ("making %qD static", unqualified_id);
8337 staticp = 1;
8340 if (uses_template_parms (type))
8341 /* We'll check at instantiation time. */
8343 else if (check_static_variable_definition (unqualified_id,
8344 type))
8345 /* If we just return the declaration, crashes
8346 will sometimes occur. We therefore return
8347 void_type_node, as if this was a friend
8348 declaration, to cause callers to completely
8349 ignore this declaration. */
8350 return void_type_node;
8353 if (staticp)
8355 /* C++ allows static class members. All other work
8356 for this is done by grokfield. */
8357 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8358 set_linkage_for_static_data_member (decl);
8359 /* Even if there is an in-class initialization, DECL
8360 is considered undefined until an out-of-class
8361 definition is provided. */
8362 DECL_EXTERNAL (decl) = 1;
8364 if (thread_p)
8366 if (targetm.have_tls)
8367 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8368 else
8369 /* A mere warning is sure to result in improper
8370 semantics at runtime. Don't bother to allow this to
8371 compile. */
8372 error ("thread-local storage not supported for this target");
8375 else
8377 decl = build_decl (FIELD_DECL, unqualified_id, type);
8378 DECL_NONADDRESSABLE_P (decl) = bitfield;
8379 if (storage_class == sc_mutable)
8381 DECL_MUTABLE_P (decl) = 1;
8382 storage_class = sc_none;
8386 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8387 inlinep, friendp, raises != NULL_TREE);
8390 else if (TREE_CODE (type) == FUNCTION_TYPE
8391 || TREE_CODE (type) == METHOD_TYPE)
8393 tree original_name;
8394 int publicp = 0;
8396 if (!unqualified_id)
8397 return NULL_TREE;
8399 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8400 original_name = dname;
8401 else
8402 original_name = unqualified_id;
8404 if (storage_class == sc_auto)
8405 error ("storage class %<auto%> invalid for function %qs", name);
8406 else if (storage_class == sc_register)
8407 error ("storage class %<register%> invalid for function %qs", name);
8408 else if (thread_p)
8409 error ("storage class %<__thread%> invalid for function %qs", name);
8411 /* Function declaration not at top level.
8412 Storage classes other than `extern' are not allowed
8413 and `extern' makes no difference. */
8414 if (! toplevel_bindings_p ()
8415 && (storage_class == sc_static
8416 || declspecs->specs[(int)ds_inline])
8417 && pedantic)
8419 if (storage_class == sc_static)
8420 pedwarn ("%<static%> specified invalid for function %qs "
8421 "declared out of global scope", name);
8422 else
8423 pedwarn ("%<inline%> specifier invalid for function %qs "
8424 "declared out of global scope", name);
8427 if (ctype == NULL_TREE)
8429 if (virtualp)
8431 error ("virtual non-class function %qs", name);
8432 virtualp = 0;
8435 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8436 && !NEW_DELETE_OPNAME_P (original_name))
8437 type = build_method_type_directly (ctype,
8438 TREE_TYPE (type),
8439 TYPE_ARG_TYPES (type));
8441 /* Record presence of `static'. */
8442 publicp = (ctype != NULL_TREE
8443 || storage_class == sc_extern
8444 || storage_class != sc_static);
8446 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8447 virtualp, flags, quals, raises,
8448 1, friendp,
8449 publicp, inlinep, sfk, funcdef_flag,
8450 template_count, in_namespace, attrlist);
8451 if (decl == NULL_TREE)
8452 return NULL_TREE;
8454 if (staticp == 1)
8456 int invalid_static = 0;
8458 /* Don't allow a static member function in a class, and forbid
8459 declaring main to be static. */
8460 if (TREE_CODE (type) == METHOD_TYPE)
8462 pedwarn ("cannot declare member function %qD to have "
8463 "static linkage", decl);
8464 invalid_static = 1;
8466 else if (current_function_decl)
8468 /* FIXME need arm citation */
8469 error ("cannot declare static function inside another function");
8470 invalid_static = 1;
8473 if (invalid_static)
8475 staticp = 0;
8476 storage_class = sc_none;
8480 else
8482 /* It's a variable. */
8484 /* An uninitialized decl with `extern' is a reference. */
8485 decl = grokvardecl (type, unqualified_id,
8486 declspecs,
8487 initialized,
8488 (type_quals & TYPE_QUAL_CONST) != 0,
8489 ctype ? ctype : in_namespace);
8490 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8491 inlinep, friendp, raises != NULL_TREE);
8493 if (ctype)
8495 DECL_CONTEXT (decl) = ctype;
8496 if (staticp == 1)
8498 pedwarn ("%<static%> may not be used when defining "
8499 "(as opposed to declaring) a static data member");
8500 staticp = 0;
8501 storage_class = sc_none;
8503 if (storage_class == sc_register && TREE_STATIC (decl))
8505 error ("static member %qD declared %<register%>", decl);
8506 storage_class = sc_none;
8508 if (storage_class == sc_extern && pedantic)
8510 pedwarn ("cannot explicitly declare member %q#D to have "
8511 "extern linkage",
8512 decl);
8513 storage_class = sc_none;
8518 /* Record `register' declaration for warnings on &
8519 and in case doing stupid register allocation. */
8521 if (storage_class == sc_register)
8522 DECL_REGISTER (decl) = 1;
8523 else if (storage_class == sc_extern)
8524 DECL_THIS_EXTERN (decl) = 1;
8525 else if (storage_class == sc_static)
8526 DECL_THIS_STATIC (decl) = 1;
8528 /* Record constancy and volatility. There's no need to do this
8529 when processing a template; we'll do this for the instantiated
8530 declaration based on the type of DECL. */
8531 if (!processing_template_decl)
8532 cp_apply_type_quals_to_decl (type_quals, decl);
8534 return decl;
8538 /* Subroutine of start_function. Ensure that each of the parameter
8539 types (as listed in PARMS) is complete, as is required for a
8540 function definition. */
8542 static void
8543 require_complete_types_for_parms (tree parms)
8545 for (; parms; parms = TREE_CHAIN (parms))
8547 if (dependent_type_p (TREE_TYPE (parms)))
8548 continue;
8549 if (!VOID_TYPE_P (TREE_TYPE (parms))
8550 && complete_type_or_else (TREE_TYPE (parms), parms))
8552 relayout_decl (parms);
8553 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8555 else
8556 /* grokparms or complete_type_or_else will have already issued
8557 an error. */
8558 TREE_TYPE (parms) = error_mark_node;
8562 /* Returns nonzero if T is a local variable. */
8565 local_variable_p (tree t)
8567 if ((TREE_CODE (t) == VAR_DECL
8568 /* A VAR_DECL with a context that is a _TYPE is a static data
8569 member. */
8570 && !TYPE_P (CP_DECL_CONTEXT (t))
8571 /* Any other non-local variable must be at namespace scope. */
8572 && !DECL_NAMESPACE_SCOPE_P (t))
8573 || (TREE_CODE (t) == PARM_DECL))
8574 return 1;
8576 return 0;
8579 /* Returns nonzero if T is an automatic local variable or a label.
8580 (These are the declarations that need to be remapped when the code
8581 containing them is duplicated.) */
8584 nonstatic_local_decl_p (tree t)
8586 return ((local_variable_p (t) && !TREE_STATIC (t))
8587 || TREE_CODE (t) == LABEL_DECL
8588 || TREE_CODE (t) == RESULT_DECL);
8591 /* Like local_variable_p, but suitable for use as a tree-walking
8592 function. */
8594 static tree
8595 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8596 void *data ATTRIBUTE_UNUSED)
8598 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8599 return *tp;
8600 else if (TYPE_P (*tp))
8601 *walk_subtrees = 0;
8603 return NULL_TREE;
8607 /* Check that ARG, which is a default-argument expression for a
8608 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8609 something goes wrong. DECL may also be a _TYPE node, rather than a
8610 DECL, if there is no DECL available. */
8612 tree
8613 check_default_argument (tree decl, tree arg)
8615 tree var;
8616 tree decl_type;
8618 if (TREE_CODE (arg) == DEFAULT_ARG)
8619 /* We get a DEFAULT_ARG when looking at an in-class declaration
8620 with a default argument. Ignore the argument for now; we'll
8621 deal with it after the class is complete. */
8622 return arg;
8624 if (TYPE_P (decl))
8626 decl_type = decl;
8627 decl = NULL_TREE;
8629 else
8630 decl_type = TREE_TYPE (decl);
8632 if (arg == error_mark_node
8633 || decl == error_mark_node
8634 || TREE_TYPE (arg) == error_mark_node
8635 || decl_type == error_mark_node)
8636 /* Something already went wrong. There's no need to check
8637 further. */
8638 return error_mark_node;
8640 /* [dcl.fct.default]
8642 A default argument expression is implicitly converted to the
8643 parameter type. */
8644 if (!TREE_TYPE (arg)
8645 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8647 if (decl)
8648 error ("default argument for %q#D has type %qT",
8649 decl, TREE_TYPE (arg));
8650 else
8651 error ("default argument for parameter of type %qT has type %qT",
8652 decl_type, TREE_TYPE (arg));
8654 return error_mark_node;
8657 /* [dcl.fct.default]
8659 Local variables shall not be used in default argument
8660 expressions.
8662 The keyword `this' shall not be used in a default argument of a
8663 member function. */
8664 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8665 NULL);
8666 if (var)
8668 error ("default argument %qE uses local variable %qD", arg, var);
8669 return error_mark_node;
8672 /* All is well. */
8673 return arg;
8676 /* Decode the list of parameter types for a function type.
8677 Given the list of things declared inside the parens,
8678 return a list of types.
8680 If this parameter does not end with an ellipsis, we append
8681 void_list_node.
8683 *PARMS is set to the chain of PARM_DECLs created. */
8685 static tree
8686 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8688 tree result = NULL_TREE;
8689 tree decls = NULL_TREE;
8690 int ellipsis = !first_parm || first_parm->ellipsis_p;
8691 cp_parameter_declarator *parm;
8692 int any_error = 0;
8694 for (parm = first_parm; parm != NULL; parm = parm->next)
8696 tree type = NULL_TREE;
8697 tree init = parm->default_argument;
8698 tree attrs;
8699 tree decl;
8701 if (parm == no_parameters)
8702 break;
8704 attrs = parm->decl_specifiers.attributes;
8705 parm->decl_specifiers.attributes = NULL_TREE;
8706 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8707 PARM, init != NULL_TREE, &attrs);
8708 if (! decl || TREE_TYPE (decl) == error_mark_node)
8709 continue;
8711 if (attrs)
8712 cplus_decl_attributes (&decl, attrs, 0);
8714 type = TREE_TYPE (decl);
8715 if (VOID_TYPE_P (type))
8717 if (same_type_p (type, void_type_node)
8718 && DECL_SELF_REFERENCE_P (type)
8719 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8720 /* this is a parmlist of `(void)', which is ok. */
8721 break;
8722 cxx_incomplete_type_error (decl, type);
8723 /* It's not a good idea to actually create parameters of
8724 type `void'; other parts of the compiler assume that a
8725 void type terminates the parameter list. */
8726 type = error_mark_node;
8727 TREE_TYPE (decl) = error_mark_node;
8730 if (type != error_mark_node)
8732 /* Top-level qualifiers on the parameters are
8733 ignored for function types. */
8734 type = cp_build_qualified_type (type, 0);
8735 if (TREE_CODE (type) == METHOD_TYPE)
8737 error ("parameter %qD invalidly declared method type", decl);
8738 type = build_pointer_type (type);
8739 TREE_TYPE (decl) = type;
8741 else if (abstract_virtuals_error (decl, type))
8742 any_error = 1; /* Seems like a good idea. */
8743 else if (POINTER_TYPE_P (type))
8745 /* [dcl.fct]/6, parameter types cannot contain pointers
8746 (references) to arrays of unknown bound. */
8747 tree t = TREE_TYPE (type);
8748 int ptr = TYPE_PTR_P (type);
8750 while (1)
8752 if (TYPE_PTR_P (t))
8753 ptr = 1;
8754 else if (TREE_CODE (t) != ARRAY_TYPE)
8755 break;
8756 else if (!TYPE_DOMAIN (t))
8757 break;
8758 t = TREE_TYPE (t);
8760 if (TREE_CODE (t) == ARRAY_TYPE)
8761 error ("parameter %qD includes %s to array of unknown "
8762 "bound %qT",
8763 decl, ptr ? "pointer" : "reference", t);
8766 if (any_error)
8767 init = NULL_TREE;
8768 else if (init && !processing_template_decl)
8769 init = check_default_argument (decl, init);
8772 TREE_CHAIN (decl) = decls;
8773 decls = decl;
8774 result = tree_cons (init, type, result);
8776 decls = nreverse (decls);
8777 result = nreverse (result);
8778 if (!ellipsis)
8779 result = chainon (result, void_list_node);
8780 *parms = decls;
8782 return result;
8786 /* D is a constructor or overloaded `operator='.
8788 Let T be the class in which D is declared. Then, this function
8789 returns:
8791 -1 if D's is an ill-formed constructor or copy assignment operator
8792 whose first parameter is of type `T'.
8793 0 if D is not a copy constructor or copy assignment
8794 operator.
8795 1 if D is a copy constructor or copy assignment operator whose
8796 first parameter is a reference to const qualified T.
8797 2 if D is a copy constructor or copy assignment operator whose
8798 first parameter is a reference to non-const qualified T.
8800 This function can be used as a predicate. Positive values indicate
8801 a copy constructor and nonzero values indicate a copy assignment
8802 operator. */
8805 copy_fn_p (tree d)
8807 tree args;
8808 tree arg_type;
8809 int result = 1;
8811 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8813 if (DECL_TEMPLATE_INFO (d)
8814 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8815 /* Instantiations of template member functions are never copy
8816 functions. Note that member functions of templated classes are
8817 represented as template functions internally, and we must
8818 accept those as copy functions. */
8819 return 0;
8821 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8822 if (!args)
8823 return 0;
8825 arg_type = TREE_VALUE (args);
8827 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8829 /* Pass by value copy assignment operator. */
8830 result = -1;
8832 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8833 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8835 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8836 result = 2;
8838 else
8839 return 0;
8841 args = TREE_CHAIN (args);
8843 if (args && args != void_list_node && !TREE_PURPOSE (args))
8844 /* There are more non-optional args. */
8845 return 0;
8847 return result;
8850 /* Remember any special properties of member function DECL. */
8852 void grok_special_member_properties (tree decl)
8854 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8855 ; /* Not special. */
8856 else if (DECL_CONSTRUCTOR_P (decl))
8858 int ctor = copy_fn_p (decl);
8860 if (ctor > 0)
8862 /* [class.copy]
8864 A non-template constructor for class X is a copy
8865 constructor if its first parameter is of type X&, const
8866 X&, volatile X& or const volatile X&, and either there
8867 are no other parameters or else all other parameters have
8868 default arguments. */
8869 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8870 if (ctor > 1)
8871 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8873 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8874 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8876 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8878 /* [class.copy]
8880 A non-template assignment operator for class X is a copy
8881 assignment operator if its parameter is of type X, X&, const
8882 X&, volatile X& or const volatile X&. */
8884 int assop = copy_fn_p (decl);
8886 if (assop)
8888 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8889 if (assop != 1)
8890 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8895 /* Check a constructor DECL has the correct form. Complains
8896 if the class has a constructor of the form X(X). */
8899 grok_ctor_properties (tree ctype, tree decl)
8901 int ctor_parm = copy_fn_p (decl);
8903 if (ctor_parm < 0)
8905 /* [class.copy]
8907 A declaration of a constructor for a class X is ill-formed if
8908 its first parameter is of type (optionally cv-qualified) X
8909 and either there are no other parameters or else all other
8910 parameters have default arguments.
8912 We *don't* complain about member template instantiations that
8913 have this form, though; they can occur as we try to decide
8914 what constructor to use during overload resolution. Since
8915 overload resolution will never prefer such a constructor to
8916 the non-template copy constructor (which is either explicitly
8917 or implicitly defined), there's no need to worry about their
8918 existence. Theoretically, they should never even be
8919 instantiated, but that's hard to forestall. */
8920 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8921 ctype, ctype);
8922 return 0;
8925 return 1;
8928 /* An operator with this code is unary, but can also be binary. */
8930 static int
8931 ambi_op_p (enum tree_code code)
8933 return (code == INDIRECT_REF
8934 || code == ADDR_EXPR
8935 || code == UNARY_PLUS_EXPR
8936 || code == NEGATE_EXPR
8937 || code == PREINCREMENT_EXPR
8938 || code == PREDECREMENT_EXPR);
8941 /* An operator with this name can only be unary. */
8943 static int
8944 unary_op_p (enum tree_code code)
8946 return (code == TRUTH_NOT_EXPR
8947 || code == BIT_NOT_EXPR
8948 || code == COMPONENT_REF
8949 || code == TYPE_EXPR);
8952 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8953 errors are issued for invalid declarations. */
8955 void
8956 grok_op_properties (tree decl, bool complain)
8958 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8959 tree argtype;
8960 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8961 tree name = DECL_NAME (decl);
8962 enum tree_code operator_code;
8963 int arity;
8964 bool ellipsis_p;
8965 tree class_type;
8967 /* Count the number of arguments and check for ellipsis. */
8968 for (argtype = argtypes, arity = 0;
8969 argtype && argtype != void_list_node;
8970 argtype = TREE_CHAIN (argtype))
8971 ++arity;
8972 ellipsis_p = !argtype;
8974 class_type = DECL_CONTEXT (decl);
8975 if (class_type && !CLASS_TYPE_P (class_type))
8976 class_type = NULL_TREE;
8978 if (DECL_CONV_FN_P (decl))
8979 operator_code = TYPE_EXPR;
8980 else
8983 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8984 if (ansi_opname (CODE) == name) \
8986 operator_code = (CODE); \
8987 break; \
8989 else if (ansi_assopname (CODE) == name) \
8991 operator_code = (CODE); \
8992 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8993 break; \
8996 #include "operators.def"
8997 #undef DEF_OPERATOR
8999 gcc_unreachable ();
9001 while (0);
9002 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9003 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9005 if (class_type)
9006 switch (operator_code)
9008 case NEW_EXPR:
9009 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9010 break;
9012 case DELETE_EXPR:
9013 TYPE_GETS_DELETE (class_type) |= 1;
9014 break;
9016 case VEC_NEW_EXPR:
9017 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9018 break;
9020 case VEC_DELETE_EXPR:
9021 TYPE_GETS_DELETE (class_type) |= 2;
9022 break;
9024 default:
9025 break;
9028 /* [basic.std.dynamic.allocation]/1:
9030 A program is ill-formed if an allocation function is declared
9031 in a namespace scope other than global scope or declared static
9032 in global scope.
9034 The same also holds true for deallocation functions. */
9035 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9036 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9038 if (DECL_NAMESPACE_SCOPE_P (decl))
9040 if (CP_DECL_CONTEXT (decl) != global_namespace)
9041 error ("%qD may not be declared within a namespace", decl);
9042 else if (!TREE_PUBLIC (decl))
9043 error ("%qD may not be declared as static", decl);
9047 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9048 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9049 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9050 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9051 else
9053 /* An operator function must either be a non-static member function
9054 or have at least one parameter of a class, a reference to a class,
9055 an enumeration, or a reference to an enumeration. 13.4.0.6 */
9056 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9058 if (operator_code == TYPE_EXPR
9059 || operator_code == CALL_EXPR
9060 || operator_code == COMPONENT_REF
9061 || operator_code == ARRAY_REF
9062 || operator_code == NOP_EXPR)
9064 error ("%qD must be a nonstatic member function", decl);
9065 return;
9067 else
9069 tree p;
9071 if (DECL_STATIC_FUNCTION_P (decl))
9073 error ("%qD must be either a non-static member "
9074 "function or a non-member function", decl);
9075 return;
9078 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9080 tree arg = non_reference (TREE_VALUE (p));
9081 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9082 because these checks are performed even on
9083 template functions. */
9084 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9085 break;
9088 if (!p || p == void_list_node)
9090 if (!complain)
9091 return;
9093 error ("%qD must have an argument of class or "
9094 "enumerated type",
9095 decl);
9100 /* There are no restrictions on the arguments to an overloaded
9101 "operator ()". */
9102 if (operator_code == CALL_EXPR)
9103 return;
9105 /* Warn about conversion operators that will never be used. */
9106 if (IDENTIFIER_TYPENAME_P (name)
9107 && ! DECL_TEMPLATE_INFO (decl)
9108 && warn_conversion
9109 /* Warn only declaring the function; there is no need to
9110 warn again about out-of-class definitions. */
9111 && class_type == current_class_type)
9113 tree t = TREE_TYPE (name);
9114 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9115 const char *what = 0;
9117 if (ref)
9118 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9120 if (TREE_CODE (t) == VOID_TYPE)
9121 what = "void";
9122 else if (class_type)
9124 if (t == class_type)
9125 what = "the same type";
9126 /* Don't force t to be complete here. */
9127 else if (IS_AGGR_TYPE (t)
9128 && COMPLETE_TYPE_P (t)
9129 && DERIVED_FROM_P (t, class_type))
9130 what = "a base class";
9133 if (what)
9134 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9135 "conversion operator",
9136 ref ? "a reference to " : "", what);
9139 if (operator_code == COND_EXPR)
9141 /* 13.4.0.3 */
9142 error ("ISO C++ prohibits overloading operator ?:");
9144 else if (ellipsis_p)
9145 error ("%qD must not have variable number of arguments", decl);
9146 else if (ambi_op_p (operator_code))
9148 if (arity == 1)
9149 /* We pick the one-argument operator codes by default, so
9150 we don't have to change anything. */
9152 else if (arity == 2)
9154 /* If we thought this was a unary operator, we now know
9155 it to be a binary operator. */
9156 switch (operator_code)
9158 case INDIRECT_REF:
9159 operator_code = MULT_EXPR;
9160 break;
9162 case ADDR_EXPR:
9163 operator_code = BIT_AND_EXPR;
9164 break;
9166 case UNARY_PLUS_EXPR:
9167 operator_code = PLUS_EXPR;
9168 break;
9170 case NEGATE_EXPR:
9171 operator_code = MINUS_EXPR;
9172 break;
9174 case PREINCREMENT_EXPR:
9175 operator_code = POSTINCREMENT_EXPR;
9176 break;
9178 case PREDECREMENT_EXPR:
9179 operator_code = POSTDECREMENT_EXPR;
9180 break;
9182 default:
9183 gcc_unreachable ();
9186 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9188 if ((operator_code == POSTINCREMENT_EXPR
9189 || operator_code == POSTDECREMENT_EXPR)
9190 && ! processing_template_decl
9191 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9193 if (methodp)
9194 error ("postfix %qD must take %<int%> as its argument",
9195 decl);
9196 else
9197 error
9198 ("postfix %qD must take %<int%> as its second argument",
9199 decl);
9202 else
9204 if (methodp)
9205 error ("%qD must take either zero or one argument", decl);
9206 else
9207 error ("%qD must take either one or two arguments", decl);
9210 /* More Effective C++ rule 6. */
9211 if (warn_ecpp
9212 && (operator_code == POSTINCREMENT_EXPR
9213 || operator_code == POSTDECREMENT_EXPR
9214 || operator_code == PREINCREMENT_EXPR
9215 || operator_code == PREDECREMENT_EXPR))
9217 tree arg = TREE_VALUE (argtypes);
9218 tree ret = TREE_TYPE (TREE_TYPE (decl));
9219 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9220 arg = TREE_TYPE (arg);
9221 arg = TYPE_MAIN_VARIANT (arg);
9222 if (operator_code == PREINCREMENT_EXPR
9223 || operator_code == PREDECREMENT_EXPR)
9225 if (TREE_CODE (ret) != REFERENCE_TYPE
9226 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9227 arg))
9228 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9229 build_reference_type (arg));
9231 else
9233 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9234 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9238 else if (unary_op_p (operator_code))
9240 if (arity != 1)
9242 if (methodp)
9243 error ("%qD must take %<void%>", decl);
9244 else
9245 error ("%qD must take exactly one argument", decl);
9248 else /* if (binary_op_p (operator_code)) */
9250 if (arity != 2)
9252 if (methodp)
9253 error ("%qD must take exactly one argument", decl);
9254 else
9255 error ("%qD must take exactly two arguments", decl);
9258 /* More Effective C++ rule 7. */
9259 if (warn_ecpp
9260 && (operator_code == TRUTH_ANDIF_EXPR
9261 || operator_code == TRUTH_ORIF_EXPR
9262 || operator_code == COMPOUND_EXPR))
9263 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9264 decl);
9267 /* Effective C++ rule 23. */
9268 if (warn_ecpp
9269 && arity == 2
9270 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9271 && (operator_code == PLUS_EXPR
9272 || operator_code == MINUS_EXPR
9273 || operator_code == TRUNC_DIV_EXPR
9274 || operator_code == MULT_EXPR
9275 || operator_code == TRUNC_MOD_EXPR)
9276 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9277 warning (OPT_Weffc__, "%qD should return by value", decl);
9279 /* [over.oper]/8 */
9280 for (; argtypes && argtypes != void_list_node;
9281 argtypes = TREE_CHAIN (argtypes))
9282 if (TREE_PURPOSE (argtypes))
9284 TREE_PURPOSE (argtypes) = NULL_TREE;
9285 if (operator_code == POSTINCREMENT_EXPR
9286 || operator_code == POSTDECREMENT_EXPR)
9288 if (pedantic)
9289 pedwarn ("%qD cannot have default arguments", decl);
9291 else
9292 error ("%qD cannot have default arguments", decl);
9299 /* Return a string giving the keyword associate with CODE. */
9301 static const char *
9302 tag_name (enum tag_types code)
9304 switch (code)
9306 case record_type:
9307 return "struct";
9308 case class_type:
9309 return "class";
9310 case union_type:
9311 return "union";
9312 case enum_type:
9313 return "enum";
9314 case typename_type:
9315 return "typename";
9316 default:
9317 gcc_unreachable ();
9321 /* Name lookup in an elaborated-type-specifier (after the keyword
9322 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
9323 elaborated-type-specifier is invalid, issue a diagnostic and return
9324 error_mark_node; otherwise, return the *_TYPE to which it referred.
9325 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
9327 tree
9328 check_elaborated_type_specifier (enum tag_types tag_code,
9329 tree decl,
9330 bool allow_template_p)
9332 tree type;
9334 /* In the case of:
9336 struct S { struct S *p; };
9338 name lookup will find the TYPE_DECL for the implicit "S::S"
9339 typedef. Adjust for that here. */
9340 if (DECL_SELF_REFERENCE_P (decl))
9341 decl = TYPE_NAME (TREE_TYPE (decl));
9343 type = TREE_TYPE (decl);
9345 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9346 is false for this case as well. */
9347 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9349 error ("using template type parameter %qT after %qs",
9350 type, tag_name (tag_code));
9351 return error_mark_node;
9353 /* [dcl.type.elab]
9355 If the identifier resolves to a typedef-name or a template
9356 type-parameter, the elaborated-type-specifier is ill-formed.
9358 In other words, the only legitimate declaration to use in the
9359 elaborated type specifier is the implicit typedef created when
9360 the type is declared. */
9361 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9362 && tag_code != typename_type)
9364 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9365 error ("%q+D has a previous declaration here", decl);
9366 return error_mark_node;
9368 else if (TREE_CODE (type) != RECORD_TYPE
9369 && TREE_CODE (type) != UNION_TYPE
9370 && tag_code != enum_type
9371 && tag_code != typename_type)
9373 error ("%qT referred to as %qs", type, tag_name (tag_code));
9374 error ("%q+T has a previous declaration here", type);
9375 return error_mark_node;
9377 else if (TREE_CODE (type) != ENUMERAL_TYPE
9378 && tag_code == enum_type)
9380 error ("%qT referred to as enum", type);
9381 error ("%q+T has a previous declaration here", type);
9382 return error_mark_node;
9384 else if (!allow_template_p
9385 && TREE_CODE (type) == RECORD_TYPE
9386 && CLASSTYPE_IS_TEMPLATE (type))
9388 /* If a class template appears as elaborated type specifier
9389 without a template header such as:
9391 template <class T> class C {};
9392 void f(class C); // No template header here
9394 then the required template argument is missing. */
9395 error ("template argument required for %<%s %T%>",
9396 tag_name (tag_code),
9397 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9398 return error_mark_node;
9401 return type;
9404 /* Lookup NAME in elaborate type specifier in scope according to
9405 SCOPE and issue diagnostics if necessary.
9406 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9407 found, and ERROR_MARK_NODE for type error. */
9409 static tree
9410 lookup_and_check_tag (enum tag_types tag_code, tree name,
9411 tag_scope scope, bool template_header_p)
9413 tree t;
9414 tree decl;
9415 if (scope == ts_global)
9417 /* First try ordinary name lookup, ignoring hidden class name
9418 injected via friend declaration. */
9419 decl = lookup_name_prefer_type (name, 2);
9420 /* If that fails, the name will be placed in the smallest
9421 non-class, non-function-prototype scope according to 3.3.1/5.
9422 We may already have a hidden name declared as friend in this
9423 scope. So lookup again but not ignoring hidden name.
9424 If we find one, that name will be made visible rather than
9425 creating a new tag. */
9426 if (!decl)
9427 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9429 else
9430 decl = lookup_type_scope (name, scope);
9432 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9433 decl = DECL_TEMPLATE_RESULT (decl);
9435 if (decl && TREE_CODE (decl) == TYPE_DECL)
9437 /* Look for invalid nested type:
9438 class C {
9439 class C {};
9440 }; */
9441 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9443 error ("%qD has the same name as the class in which it is "
9444 "declared",
9445 decl);
9446 return error_mark_node;
9449 /* Two cases we need to consider when deciding if a class
9450 template is allowed as an elaborated type specifier:
9451 1. It is a self reference to its own class.
9452 2. It comes with a template header.
9454 For example:
9456 template <class T> class C {
9457 class C *c1; // DECL_SELF_REFERENCE_P is true
9458 class D;
9460 template <class U> class C; // template_header_p is true
9461 template <class T> class C<T>::D {
9462 class C *c2; // DECL_SELF_REFERENCE_P is true
9463 }; */
9465 t = check_elaborated_type_specifier (tag_code,
9466 decl,
9467 template_header_p
9468 | DECL_SELF_REFERENCE_P (decl));
9469 return t;
9471 else
9472 return NULL_TREE;
9475 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9476 Define the tag as a forward-reference if it is not defined.
9478 If a declaration is given, process it here, and report an error if
9479 multiple declarations are not identical.
9481 SCOPE is TS_CURRENT when this is also a definition. Only look in
9482 the current frame for the name (since C++ allows new names in any
9483 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9484 declaration. Only look beginning from the current scope outward up
9485 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9487 TEMPLATE_HEADER_P is true when this declaration is preceded by
9488 a set of template parameters. */
9490 tree
9491 xref_tag (enum tag_types tag_code, tree name,
9492 tag_scope scope, bool template_header_p)
9494 enum tree_code code;
9495 tree t;
9496 tree context = NULL_TREE;
9498 timevar_push (TV_NAME_LOOKUP);
9500 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9502 switch (tag_code)
9504 case record_type:
9505 case class_type:
9506 code = RECORD_TYPE;
9507 break;
9508 case union_type:
9509 code = UNION_TYPE;
9510 break;
9511 case enum_type:
9512 code = ENUMERAL_TYPE;
9513 break;
9514 default:
9515 gcc_unreachable ();
9518 /* In case of anonymous name, xref_tag is only called to
9519 make type node and push name. Name lookup is not required. */
9520 if (ANON_AGGRNAME_P (name))
9521 t = NULL_TREE;
9522 else
9523 t = lookup_and_check_tag (tag_code, name,
9524 scope, template_header_p);
9526 if (t == error_mark_node)
9527 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9529 if (scope != ts_current && t && current_class_type
9530 && template_class_depth (current_class_type)
9531 && template_header_p)
9533 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9534 definition of this tag. Since, in addition, we are currently
9535 processing a (member) template declaration of a template
9536 class, we must be very careful; consider:
9538 template <class X>
9539 struct S1
9541 template <class U>
9542 struct S2
9543 { template <class V>
9544 friend struct S1; };
9546 Here, the S2::S1 declaration should not be confused with the
9547 outer declaration. In particular, the inner version should
9548 have a template parameter of level 2, not level 1. This
9549 would be particularly important if the member declaration
9550 were instead:
9552 template <class V = U> friend struct S1;
9554 say, when we should tsubst into `U' when instantiating
9555 S2. On the other hand, when presented with:
9557 template <class T>
9558 struct S1 {
9559 template <class U>
9560 struct S2 {};
9561 template <class U>
9562 friend struct S2;
9565 we must find the inner binding eventually. We
9566 accomplish this by making sure that the new type we
9567 create to represent this declaration has the right
9568 TYPE_CONTEXT. */
9569 context = TYPE_CONTEXT (t);
9570 t = NULL_TREE;
9573 if (! t)
9575 /* If no such tag is yet defined, create a forward-reference node
9576 and record it as the "definition".
9577 When a real declaration of this type is found,
9578 the forward-reference will be altered into a real type. */
9579 if (code == ENUMERAL_TYPE)
9581 error ("use of enum %q#D without previous declaration", name);
9582 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9584 else
9586 t = make_aggr_type (code);
9587 TYPE_CONTEXT (t) = context;
9588 t = pushtag (name, t, scope);
9591 else
9593 if (template_header_p && IS_AGGR_TYPE (t))
9594 redeclare_class_template (t, current_template_parms);
9595 else if (!processing_template_decl
9596 && CLASS_TYPE_P (t)
9597 && CLASSTYPE_IS_TEMPLATE (t))
9599 error ("redeclaration of %qT as a non-template", t);
9600 t = error_mark_node;
9603 /* Make injected friend class visible. */
9604 if (scope != ts_within_enclosing_non_class
9605 && hidden_name_p (TYPE_NAME (t)))
9607 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9608 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9610 if (TYPE_TEMPLATE_INFO (t))
9612 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9613 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9618 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9621 tree
9622 xref_tag_from_type (tree old, tree id, tag_scope scope)
9624 enum tag_types tag_kind;
9626 if (TREE_CODE (old) == RECORD_TYPE)
9627 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9628 else
9629 tag_kind = union_type;
9631 if (id == NULL_TREE)
9632 id = TYPE_IDENTIFIER (old);
9634 return xref_tag (tag_kind, id, scope, false);
9637 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9638 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9639 access_* node, and the TREE_VALUE is the type of the base-class.
9640 Non-NULL TREE_TYPE indicates virtual inheritance. */
9642 void
9643 xref_basetypes (tree ref, tree base_list)
9645 tree *basep;
9646 tree binfo, base_binfo;
9647 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9648 unsigned max_bases = 0; /* Maximum direct bases. */
9649 int i;
9650 tree default_access;
9651 tree igo_prev; /* Track Inheritance Graph Order. */
9653 if (ref == error_mark_node)
9654 return;
9656 /* The base of a derived class is private by default, all others are
9657 public. */
9658 default_access = (TREE_CODE (ref) == RECORD_TYPE
9659 && CLASSTYPE_DECLARED_CLASS (ref)
9660 ? access_private_node : access_public_node);
9662 /* First, make sure that any templates in base-classes are
9663 instantiated. This ensures that if we call ourselves recursively
9664 we do not get confused about which classes are marked and which
9665 are not. */
9666 basep = &base_list;
9667 while (*basep)
9669 tree basetype = TREE_VALUE (*basep);
9671 if (!(processing_template_decl && uses_template_parms (basetype))
9672 && !complete_type_or_else (basetype, NULL))
9673 /* An incomplete type. Remove it from the list. */
9674 *basep = TREE_CHAIN (*basep);
9675 else
9677 max_bases++;
9678 if (TREE_TYPE (*basep))
9679 max_vbases++;
9680 if (CLASS_TYPE_P (basetype))
9681 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9682 basep = &TREE_CHAIN (*basep);
9686 TYPE_MARKED_P (ref) = 1;
9688 /* The binfo slot should be empty, unless this is an (ill-formed)
9689 redefinition. */
9690 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9691 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9693 binfo = make_tree_binfo (max_bases);
9695 TYPE_BINFO (ref) = binfo;
9696 BINFO_OFFSET (binfo) = size_zero_node;
9697 BINFO_TYPE (binfo) = ref;
9699 if (max_bases)
9701 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9702 /* An aggregate cannot have baseclasses. */
9703 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9705 if (TREE_CODE (ref) == UNION_TYPE)
9706 error ("derived union %qT invalid", ref);
9709 if (max_bases > 1)
9711 if (TYPE_FOR_JAVA (ref))
9712 error ("Java class %qT cannot have multiple bases", ref);
9715 if (max_vbases)
9717 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9719 if (TYPE_FOR_JAVA (ref))
9720 error ("Java class %qT cannot have virtual bases", ref);
9723 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9725 tree access = TREE_PURPOSE (base_list);
9726 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9727 tree basetype = TREE_VALUE (base_list);
9729 if (access == access_default_node)
9730 access = default_access;
9732 if (TREE_CODE (basetype) == TYPE_DECL)
9733 basetype = TREE_TYPE (basetype);
9734 if (TREE_CODE (basetype) != RECORD_TYPE
9735 && TREE_CODE (basetype) != TYPENAME_TYPE
9736 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9737 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9739 error ("base type %qT fails to be a struct or class type",
9740 basetype);
9741 continue;
9744 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9745 TYPE_FOR_JAVA (ref) = 1;
9747 base_binfo = NULL_TREE;
9748 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9750 base_binfo = TYPE_BINFO (basetype);
9751 /* The original basetype could have been a typedef'd type. */
9752 basetype = BINFO_TYPE (base_binfo);
9754 /* Inherit flags from the base. */
9755 TYPE_HAS_NEW_OPERATOR (ref)
9756 |= TYPE_HAS_NEW_OPERATOR (basetype);
9757 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9758 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9759 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9760 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9761 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9762 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9763 CLASSTYPE_REPEATED_BASE_P (ref)
9764 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9767 /* We must do this test after we've seen through a typedef
9768 type. */
9769 if (TYPE_MARKED_P (basetype))
9771 if (basetype == ref)
9772 error ("recursive type %qT undefined", basetype);
9773 else
9774 error ("duplicate base type %qT invalid", basetype);
9775 continue;
9777 TYPE_MARKED_P (basetype) = 1;
9779 base_binfo = copy_binfo (base_binfo, basetype, ref,
9780 &igo_prev, via_virtual);
9781 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9782 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9784 BINFO_BASE_APPEND (binfo, base_binfo);
9785 BINFO_BASE_ACCESS_APPEND (binfo, access);
9788 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9789 /* If we have space in the vbase vector, we must have shared at
9790 least one of them, and are therefore diamond shaped. */
9791 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9793 /* Unmark all the types. */
9794 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9795 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9796 TYPE_MARKED_P (ref) = 0;
9798 /* Now see if we have a repeated base type. */
9799 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9801 for (base_binfo = binfo; base_binfo;
9802 base_binfo = TREE_CHAIN (base_binfo))
9804 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9806 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9807 break;
9809 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9811 for (base_binfo = binfo; base_binfo;
9812 base_binfo = TREE_CHAIN (base_binfo))
9813 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9814 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9815 else
9816 break;
9821 /* Begin compiling the definition of an enumeration type.
9822 NAME is its name.
9823 Returns the type object, as yet incomplete.
9824 Also records info about it so that build_enumerator
9825 may be used to declare the individual values as they are read. */
9827 tree
9828 start_enum (tree name)
9830 tree enumtype;
9832 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9834 /* If this is the real definition for a previous forward reference,
9835 fill in the contents in the same object that used to be the
9836 forward reference. */
9838 enumtype = lookup_and_check_tag (enum_type, name,
9839 /*tag_scope=*/ts_current,
9840 /*template_header_p=*/false);
9842 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9844 error ("multiple definition of %q#T", enumtype);
9845 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9846 /* Clear out TYPE_VALUES, and start again. */
9847 TYPE_VALUES (enumtype) = NULL_TREE;
9849 else
9851 /* In case of error, make a dummy enum to allow parsing to
9852 continue. */
9853 if (enumtype == error_mark_node)
9854 name = make_anon_name ();
9856 enumtype = make_node (ENUMERAL_TYPE);
9857 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9860 return enumtype;
9863 /* After processing and defining all the values of an enumeration type,
9864 install their decls in the enumeration type and finish it off.
9865 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9867 void
9868 finish_enum (tree enumtype)
9870 tree values;
9871 tree decl;
9872 tree value;
9873 tree minnode;
9874 tree maxnode;
9875 tree t;
9876 bool unsignedp;
9877 bool use_short_enum;
9878 int lowprec;
9879 int highprec;
9880 int precision;
9881 integer_type_kind itk;
9882 tree underlying_type = NULL_TREE;
9884 /* We built up the VALUES in reverse order. */
9885 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9887 /* For an enum defined in a template, just set the type of the values;
9888 all further processing is postponed until the template is
9889 instantiated. We need to set the type so that tsubst of a CONST_DECL
9890 works. */
9891 if (processing_template_decl)
9893 for (values = TYPE_VALUES (enumtype);
9894 values;
9895 values = TREE_CHAIN (values))
9896 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9897 if (at_function_scope_p ())
9898 add_stmt (build_min (TAG_DEFN, enumtype));
9899 return;
9902 /* Determine the minimum and maximum values of the enumerators. */
9903 if (TYPE_VALUES (enumtype))
9905 minnode = maxnode = NULL_TREE;
9907 for (values = TYPE_VALUES (enumtype);
9908 values;
9909 values = TREE_CHAIN (values))
9911 decl = TREE_VALUE (values);
9913 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9914 each enumerator has the type of its enumeration. Prior to the
9915 closing brace, the type of each enumerator is the type of its
9916 initializing value. */
9917 TREE_TYPE (decl) = enumtype;
9919 /* Update the minimum and maximum values, if appropriate. */
9920 value = DECL_INITIAL (decl);
9921 if (value == error_mark_node)
9922 value = integer_zero_node;
9923 /* Figure out what the minimum and maximum values of the
9924 enumerators are. */
9925 if (!minnode)
9926 minnode = maxnode = value;
9927 else if (tree_int_cst_lt (maxnode, value))
9928 maxnode = value;
9929 else if (tree_int_cst_lt (value, minnode))
9930 minnode = value;
9933 else
9934 /* [dcl.enum]
9936 If the enumerator-list is empty, the underlying type is as if
9937 the enumeration had a single enumerator with value 0. */
9938 minnode = maxnode = integer_zero_node;
9940 /* Compute the number of bits require to represent all values of the
9941 enumeration. We must do this before the type of MINNODE and
9942 MAXNODE are transformed, since min_precision relies on the
9943 TREE_TYPE of the value it is passed. */
9944 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9945 lowprec = min_precision (minnode, unsignedp);
9946 highprec = min_precision (maxnode, unsignedp);
9947 precision = MAX (lowprec, highprec);
9949 /* Determine the underlying type of the enumeration.
9951 [dcl.enum]
9953 The underlying type of an enumeration is an integral type that
9954 can represent all the enumerator values defined in the
9955 enumeration. It is implementation-defined which integral type is
9956 used as the underlying type for an enumeration except that the
9957 underlying type shall not be larger than int unless the value of
9958 an enumerator cannot fit in an int or unsigned int.
9960 We use "int" or an "unsigned int" as the underlying type, even if
9961 a smaller integral type would work, unless the user has
9962 explicitly requested that we use the smallest possible type. The
9963 user can request that for all enumerations with a command line
9964 flag, or for just one enumeration with an attribute. */
9966 use_short_enum = flag_short_enums
9967 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9969 for (itk = (use_short_enum ? itk_char : itk_int);
9970 itk != itk_none;
9971 itk++)
9973 underlying_type = integer_types[itk];
9974 if (TYPE_PRECISION (underlying_type) >= precision
9975 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9976 break;
9978 if (itk == itk_none)
9980 /* DR 377
9982 IF no integral type can represent all the enumerator values, the
9983 enumeration is ill-formed. */
9984 error ("no integral type can represent all of the enumerator values "
9985 "for %qT", enumtype);
9986 precision = TYPE_PRECISION (long_long_integer_type_node);
9987 underlying_type = integer_types[itk_unsigned_long_long];
9990 /* Compute the minium and maximum values for the type.
9992 [dcl.enum]
9994 For an enumeration where emin is the smallest enumerator and emax
9995 is the largest, the values of the enumeration are the values of the
9996 underlying type in the range bmin to bmax, where bmin and bmax are,
9997 respectively, the smallest and largest values of the smallest bit-
9998 field that can store emin and emax. */
10000 /* The middle-end currently assumes that types with TYPE_PRECISION
10001 narrower than their underlying type are suitably zero or sign
10002 extended to fill their mode. g++ doesn't make these guarantees.
10003 Until the middle-end can represent such paradoxical types, we
10004 set the TYPE_PRECISION to the width of the underlying type. */
10005 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10007 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10009 /* [dcl.enum]
10011 The value of sizeof() applied to an enumeration type, an object
10012 of an enumeration type, or an enumerator, is the value of sizeof()
10013 applied to the underlying type. */
10014 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10015 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10016 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10017 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10018 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10019 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10021 /* Convert each of the enumerators to the type of the underlying
10022 type of the enumeration. */
10023 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10025 location_t saved_location;
10027 decl = TREE_VALUE (values);
10028 saved_location = input_location;
10029 input_location = DECL_SOURCE_LOCATION (decl);
10030 value = perform_implicit_conversion (underlying_type,
10031 DECL_INITIAL (decl));
10032 input_location = saved_location;
10034 /* Do not clobber shared ints. */
10035 value = copy_node (value);
10037 TREE_TYPE (value) = enumtype;
10038 DECL_INITIAL (decl) = value;
10039 TREE_VALUE (values) = value;
10042 /* Fix up all variant types of this enum type. */
10043 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10045 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10046 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10047 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10048 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10049 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10050 TYPE_MODE (t) = TYPE_MODE (enumtype);
10051 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10052 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10053 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10054 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10057 /* Finish debugging output for this type. */
10058 rest_of_type_compilation (enumtype, namespace_bindings_p ());
10061 /* Build and install a CONST_DECL for an enumeration constant of the
10062 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10063 Assignment of sequential values by default is handled here. */
10065 void
10066 build_enumerator (tree name, tree value, tree enumtype)
10068 tree decl;
10069 tree context;
10070 tree type;
10072 /* If the VALUE was erroneous, pretend it wasn't there; that will
10073 result in the enum being assigned the next value in sequence. */
10074 if (value == error_mark_node)
10075 value = NULL_TREE;
10077 /* Remove no-op casts from the value. */
10078 if (value)
10079 STRIP_TYPE_NOPS (value);
10081 if (! processing_template_decl)
10083 /* Validate and default VALUE. */
10084 if (value != NULL_TREE)
10086 value = integral_constant_value (value);
10088 if (TREE_CODE (value) == INTEGER_CST)
10090 value = perform_integral_promotions (value);
10091 constant_expression_warning (value);
10093 else
10095 error ("enumerator value for %qD not integer constant", name);
10096 value = NULL_TREE;
10100 /* Default based on previous value. */
10101 if (value == NULL_TREE)
10103 if (TYPE_VALUES (enumtype))
10105 HOST_WIDE_INT hi;
10106 unsigned HOST_WIDE_INT lo;
10107 tree prev_value;
10108 bool overflowed;
10110 /* The next value is the previous value plus one. We can
10111 safely assume that the previous value is an INTEGER_CST.
10112 add_double doesn't know the type of the target expression,
10113 so we must check with int_fits_type_p as well. */
10114 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10115 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10116 TREE_INT_CST_HIGH (prev_value),
10117 1, 0, &lo, &hi);
10118 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10119 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10121 if (overflowed)
10123 error ("overflow in enumeration values at %qD", name);
10124 value = error_mark_node;
10127 else
10128 value = integer_zero_node;
10131 /* Remove no-op casts from the value. */
10132 STRIP_TYPE_NOPS (value);
10135 /* C++ associates enums with global, function, or class declarations. */
10136 context = current_scope ();
10138 /* Build the actual enumeration constant. Note that the enumeration
10139 constants have the type of their initializers until the
10140 enumeration is complete:
10142 [ dcl.enum ]
10144 Following the closing brace of an enum-specifier, each enumer-
10145 ator has the type of its enumeration. Prior to the closing
10146 brace, the type of each enumerator is the type of its
10147 initializing value.
10149 In finish_enum we will reset the type. Of course, if we're
10150 processing a template, there may be no value. */
10151 type = value ? TREE_TYPE (value) : NULL_TREE;
10153 if (context && context == current_class_type)
10154 /* This enum declaration is local to the class. We need the full
10155 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
10156 decl = build_lang_decl (CONST_DECL, name, type);
10157 else
10158 /* It's a global enum, or it's local to a function. (Note local to
10159 a function could mean local to a class method. */
10160 decl = build_decl (CONST_DECL, name, type);
10162 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10163 TREE_CONSTANT (decl) = 1;
10164 TREE_INVARIANT (decl) = 1;
10165 TREE_READONLY (decl) = 1;
10166 DECL_INITIAL (decl) = value;
10168 if (context && context == current_class_type)
10169 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10170 on the TYPE_FIELDS list for `S'. (That's so that you can say
10171 things like `S::i' later.) */
10172 finish_member_declaration (decl);
10173 else
10174 pushdecl (decl);
10176 /* Add this enumeration constant to the list for this type. */
10177 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10181 /* We're defining DECL. Make sure that it's type is OK. */
10183 static void
10184 check_function_type (tree decl, tree current_function_parms)
10186 tree fntype = TREE_TYPE (decl);
10187 tree return_type = complete_type (TREE_TYPE (fntype));
10189 /* In a function definition, arg types must be complete. */
10190 require_complete_types_for_parms (current_function_parms);
10192 if (dependent_type_p (return_type))
10193 return;
10194 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10196 tree args = TYPE_ARG_TYPES (fntype);
10198 error ("return type %q#T is incomplete", return_type);
10200 /* Make it return void instead. */
10201 if (TREE_CODE (fntype) == METHOD_TYPE)
10202 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10203 void_type_node,
10204 TREE_CHAIN (args));
10205 else
10206 fntype = build_function_type (void_type_node, args);
10207 TREE_TYPE (decl)
10208 = build_exception_variant (fntype,
10209 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10211 else
10212 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10215 /* Create the FUNCTION_DECL for a function definition.
10216 DECLSPECS and DECLARATOR are the parts of the declaration;
10217 they describe the function's name and the type it returns,
10218 but twisted together in a fashion that parallels the syntax of C.
10220 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10221 DECLARATOR is really the DECL for the function we are about to
10222 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10223 indicating that the function is an inline defined in-class.
10225 This function creates a binding context for the function body
10226 as well as setting up the FUNCTION_DECL in current_function_decl.
10228 For C++, we must first check whether that datum makes any sense.
10229 For example, "class A local_a(1,2);" means that variable local_a
10230 is an aggregate of type A, which should have a constructor
10231 applied to it with the argument list [1, 2]. */
10233 void
10234 start_preparsed_function (tree decl1, tree attrs, int flags)
10236 tree ctype = NULL_TREE;
10237 tree fntype;
10238 tree restype;
10239 int doing_friend = 0;
10240 struct cp_binding_level *bl;
10241 tree current_function_parms;
10242 struct c_fileinfo *finfo
10243 = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
10244 bool honor_interface;
10246 /* Sanity check. */
10247 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10248 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10250 fntype = TREE_TYPE (decl1);
10251 if (TREE_CODE (fntype) == METHOD_TYPE)
10252 ctype = TYPE_METHOD_BASETYPE (fntype);
10254 /* ISO C++ 11.4/5. A friend function defined in a class is in
10255 the (lexical) scope of the class in which it is defined. */
10256 if (!ctype && DECL_FRIEND_P (decl1))
10258 ctype = DECL_FRIEND_CONTEXT (decl1);
10260 /* CTYPE could be null here if we're dealing with a template;
10261 for example, `inline friend float foo()' inside a template
10262 will have no CTYPE set. */
10263 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10264 ctype = NULL_TREE;
10265 else
10266 doing_friend = 1;
10269 if (DECL_DECLARED_INLINE_P (decl1)
10270 && lookup_attribute ("noinline", attrs))
10271 warning (0, "inline function %q+D given attribute noinline", decl1);
10273 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10274 /* This is a constructor, we must ensure that any default args
10275 introduced by this definition are propagated to the clones
10276 now. The clones are used directly in overload resolution. */
10277 adjust_clone_args (decl1);
10279 /* Sometimes we don't notice that a function is a static member, and
10280 build a METHOD_TYPE for it. Fix that up now. */
10281 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10282 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10284 revert_static_member_fn (decl1);
10285 ctype = NULL_TREE;
10288 /* Set up current_class_type, and enter the scope of the class, if
10289 appropriate. */
10290 if (ctype)
10291 push_nested_class (ctype);
10292 else if (DECL_STATIC_FUNCTION_P (decl1))
10293 push_nested_class (DECL_CONTEXT (decl1));
10295 /* Now that we have entered the scope of the class, we must restore
10296 the bindings for any template parameters surrounding DECL1, if it
10297 is an inline member template. (Order is important; consider the
10298 case where a template parameter has the same name as a field of
10299 the class.) It is not until after this point that
10300 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
10301 if (flags & SF_INCLASS_INLINE)
10302 maybe_begin_member_template_processing (decl1);
10304 /* Effective C++ rule 15. */
10305 if (warn_ecpp
10306 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10307 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10308 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
10310 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10311 error_mark_node is replaced below (in poplevel) with the BLOCK. */
10312 if (!DECL_INITIAL (decl1))
10313 DECL_INITIAL (decl1) = error_mark_node;
10315 /* This function exists in static storage.
10316 (This does not mean `static' in the C sense!) */
10317 TREE_STATIC (decl1) = 1;
10319 /* We must call push_template_decl after current_class_type is set
10320 up. (If we are processing inline definitions after exiting a
10321 class scope, current_class_type will be NULL_TREE until set above
10322 by push_nested_class.) */
10323 if (processing_template_decl)
10325 /* FIXME: Handle error_mark_node more gracefully. */
10326 tree newdecl1 = push_template_decl (decl1);
10327 if (newdecl1 != error_mark_node)
10328 decl1 = newdecl1;
10331 /* We are now in the scope of the function being defined. */
10332 current_function_decl = decl1;
10334 /* Save the parm names or decls from this function's declarator
10335 where store_parm_decls will find them. */
10336 current_function_parms = DECL_ARGUMENTS (decl1);
10338 /* Make sure the parameter and return types are reasonable. When
10339 you declare a function, these types can be incomplete, but they
10340 must be complete when you define the function. */
10341 check_function_type (decl1, current_function_parms);
10342 /* Make sure no default arg is missing. */
10343 check_default_args (decl1);
10345 /* Build the return declaration for the function. */
10346 restype = TREE_TYPE (fntype);
10347 /* Promote the value to int before returning it. */
10348 if (c_promoting_integer_type_p (restype))
10349 restype = type_promotes_to (restype);
10350 if (DECL_RESULT (decl1) == NULL_TREE)
10352 tree resdecl;
10354 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10355 DECL_ARTIFICIAL (resdecl) = 1;
10356 DECL_IGNORED_P (resdecl) = 1;
10357 DECL_RESULT (decl1) = resdecl;
10359 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10362 /* Initialize RTL machinery. We cannot do this until
10363 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10364 even when processing a template; this is how we get
10365 CFUN set up, and our per-function variables initialized.
10366 FIXME factor out the non-RTL stuff. */
10367 bl = current_binding_level;
10368 allocate_struct_function (decl1);
10369 current_binding_level = bl;
10371 /* Even though we're inside a function body, we still don't want to
10372 call expand_expr to calculate the size of a variable-sized array.
10373 We haven't necessarily assigned RTL to all variables yet, so it's
10374 not safe to try to expand expressions involving them. */
10375 cfun->x_dont_save_pending_sizes_p = 1;
10377 /* Start the statement-tree, start the tree now. */
10378 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10380 /* Let the user know we're compiling this function. */
10381 announce_function (decl1);
10383 /* Record the decl so that the function name is defined.
10384 If we already have a decl for this name, and it is a FUNCTION_DECL,
10385 use the old decl. */
10386 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10388 /* A specialization is not used to guide overload resolution. */
10389 if (!DECL_FUNCTION_MEMBER_P (decl1)
10390 && !(DECL_USE_TEMPLATE (decl1) &&
10391 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10393 tree olddecl = pushdecl (decl1);
10395 if (olddecl == error_mark_node)
10396 /* If something went wrong when registering the declaration,
10397 use DECL1; we have to have a FUNCTION_DECL to use when
10398 parsing the body of the function. */
10400 else
10401 /* Otherwise, OLDDECL is either a previous declaration of
10402 the same function or DECL1 itself. */
10403 decl1 = olddecl;
10405 else
10407 /* We need to set the DECL_CONTEXT. */
10408 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10409 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10411 fntype = TREE_TYPE (decl1);
10413 /* If #pragma weak applies, mark the decl appropriately now.
10414 The pragma only applies to global functions. Because
10415 determining whether or not the #pragma applies involves
10416 computing the mangled name for the declaration, we cannot
10417 apply the pragma until after we have merged this declaration
10418 with any previous declarations; if the original declaration
10419 has a linkage specification, that specification applies to
10420 the definition as well, and may affect the mangled name. */
10421 if (!DECL_CONTEXT (decl1))
10422 maybe_apply_pragma_weak (decl1);
10425 /* Reset these in case the call to pushdecl changed them. */
10426 current_function_decl = decl1;
10427 cfun->decl = decl1;
10429 /* If we are (erroneously) defining a function that we have already
10430 defined before, wipe out what we knew before. */
10431 if (!DECL_PENDING_INLINE_P (decl1))
10432 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10434 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10436 /* We know that this was set up by `grokclassfn'. We do not
10437 wait until `store_parm_decls', since evil parse errors may
10438 never get us to that point. Here we keep the consistency
10439 between `current_class_type' and `current_class_ptr'. */
10440 tree t = DECL_ARGUMENTS (decl1);
10442 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10443 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10445 cp_function_chain->x_current_class_ref
10446 = build_indirect_ref (t, NULL);
10447 cp_function_chain->x_current_class_ptr = t;
10449 /* Constructors and destructors need to know whether they're "in
10450 charge" of initializing virtual base classes. */
10451 t = TREE_CHAIN (t);
10452 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10454 current_in_charge_parm = t;
10455 t = TREE_CHAIN (t);
10457 if (DECL_HAS_VTT_PARM_P (decl1))
10459 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10460 current_vtt_parm = t;
10464 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10465 /* Implicitly-defined methods (like the
10466 destructor for a class in which no destructor
10467 is explicitly declared) must not be defined
10468 until their definition is needed. So, we
10469 ignore interface specifications for
10470 compiler-generated functions. */
10471 && !DECL_ARTIFICIAL (decl1));
10473 if (DECL_INTERFACE_KNOWN (decl1))
10475 tree ctx = decl_function_context (decl1);
10477 if (DECL_NOT_REALLY_EXTERN (decl1))
10478 DECL_EXTERNAL (decl1) = 0;
10480 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10481 && TREE_PUBLIC (ctx))
10482 /* This is a function in a local class in an extern inline
10483 function. */
10484 comdat_linkage (decl1);
10486 /* If this function belongs to an interface, it is public.
10487 If it belongs to someone else's interface, it is also external.
10488 This only affects inlines and template instantiations. */
10489 else if (!finfo->interface_unknown && honor_interface)
10491 if (DECL_DECLARED_INLINE_P (decl1)
10492 || DECL_TEMPLATE_INSTANTIATION (decl1)
10493 || processing_template_decl)
10495 DECL_EXTERNAL (decl1)
10496 = (finfo->interface_only
10497 || (DECL_DECLARED_INLINE_P (decl1)
10498 && ! flag_implement_inlines
10499 && !DECL_VINDEX (decl1)));
10501 /* For WIN32 we also want to put these in linkonce sections. */
10502 maybe_make_one_only (decl1);
10504 else
10505 DECL_EXTERNAL (decl1) = 0;
10506 DECL_INTERFACE_KNOWN (decl1) = 1;
10507 /* If this function is in an interface implemented in this file,
10508 make sure that the backend knows to emit this function
10509 here. */
10510 if (!DECL_EXTERNAL (decl1))
10511 mark_needed (decl1);
10513 else if (finfo->interface_unknown && finfo->interface_only
10514 && honor_interface)
10516 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10517 interface, we will have both finfo->interface_unknown and
10518 finfo->interface_only set. In that case, we don't want to
10519 use the normal heuristics because someone will supply a
10520 #pragma implementation elsewhere, and deducing it here would
10521 produce a conflict. */
10522 comdat_linkage (decl1);
10523 DECL_EXTERNAL (decl1) = 0;
10524 DECL_INTERFACE_KNOWN (decl1) = 1;
10525 DECL_DEFER_OUTPUT (decl1) = 1;
10527 else
10529 /* This is a definition, not a reference.
10530 So clear DECL_EXTERNAL. */
10531 DECL_EXTERNAL (decl1) = 0;
10533 if ((DECL_DECLARED_INLINE_P (decl1)
10534 || DECL_TEMPLATE_INSTANTIATION (decl1))
10535 && ! DECL_INTERFACE_KNOWN (decl1)
10536 /* Don't try to defer nested functions for now. */
10537 && ! decl_function_context (decl1))
10538 DECL_DEFER_OUTPUT (decl1) = 1;
10539 else
10540 DECL_INTERFACE_KNOWN (decl1) = 1;
10543 /* Determine the ELF visibility attribute for the function. We must not
10544 do this before calling "pushdecl", as we must allow "duplicate_decls"
10545 to merge any attributes appropriately. We also need to wait until
10546 linkage is set. */
10547 if (!DECL_CLONED_FUNCTION_P (decl1))
10548 determine_visibility (decl1);
10550 begin_scope (sk_function_parms, decl1);
10552 ++function_depth;
10554 if (DECL_DESTRUCTOR_P (decl1)
10555 || (DECL_CONSTRUCTOR_P (decl1)
10556 && targetm.cxx.cdtor_returns_this ()))
10558 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10559 DECL_CONTEXT (cdtor_label) = current_function_decl;
10562 start_fname_decls ();
10564 store_parm_decls (current_function_parms);
10568 /* Like start_preparsed_function, except that instead of a
10569 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10571 Returns 1 on success. If the DECLARATOR is not suitable for a function
10572 (it defines a datum instead), we return 0, which tells
10573 yyparse to report a parse error. */
10576 start_function (cp_decl_specifier_seq *declspecs,
10577 const cp_declarator *declarator,
10578 tree attrs)
10580 tree decl1;
10582 if (have_extern_spec)
10584 declspecs->storage_class = sc_extern;
10585 /* This should only be done once on the outermost decl. */
10586 have_extern_spec = false;
10589 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10590 /* If the declarator is not suitable for a function definition,
10591 cause a syntax error. */
10592 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10593 return 0;
10595 if (DECL_MAIN_P (decl1))
10596 /* main must return int. grokfndecl should have corrected it
10597 (and issued a diagnostic) if the user got it wrong. */
10598 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10599 integer_type_node));
10601 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10603 return 1;
10606 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10607 FN. */
10609 static bool
10610 use_eh_spec_block (tree fn)
10612 return (flag_exceptions && flag_enforce_eh_specs
10613 && !processing_template_decl
10614 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10615 /* We insert the EH_SPEC_BLOCK only in the original
10616 function; then, it is copied automatically to the
10617 clones. */
10618 && !DECL_CLONED_FUNCTION_P (fn)
10619 /* Implicitly-generated constructors and destructors have
10620 exception specifications. However, those specifications
10621 are the union of the possible exceptions specified by the
10622 constructors/destructors for bases and members, so no
10623 unallowed exception will ever reach this function. By
10624 not creating the EH_SPEC_BLOCK we save a little memory,
10625 and we avoid spurious warnings about unreachable
10626 code. */
10627 && !DECL_ARTIFICIAL (fn));
10630 /* Store the parameter declarations into the current function declaration.
10631 This is called after parsing the parameter declarations, before
10632 digesting the body of the function.
10634 Also install to binding contour return value identifier, if any. */
10636 static void
10637 store_parm_decls (tree current_function_parms)
10639 tree fndecl = current_function_decl;
10640 tree parm;
10642 /* This is a chain of any other decls that came in among the parm
10643 declarations. If a parm is declared with enum {foo, bar} x;
10644 then CONST_DECLs for foo and bar are put here. */
10645 tree nonparms = NULL_TREE;
10647 if (current_function_parms)
10649 /* This case is when the function was defined with an ANSI prototype.
10650 The parms already have decls, so we need not do anything here
10651 except record them as in effect
10652 and complain if any redundant old-style parm decls were written. */
10654 tree specparms = current_function_parms;
10655 tree next;
10657 /* Must clear this because it might contain TYPE_DECLs declared
10658 at class level. */
10659 current_binding_level->names = NULL;
10661 /* If we're doing semantic analysis, then we'll call pushdecl
10662 for each of these. We must do them in reverse order so that
10663 they end in the correct forward order. */
10664 specparms = nreverse (specparms);
10666 for (parm = specparms; parm; parm = next)
10668 next = TREE_CHAIN (parm);
10669 if (TREE_CODE (parm) == PARM_DECL)
10671 if (DECL_NAME (parm) == NULL_TREE
10672 || TREE_CODE (parm) != VOID_TYPE)
10673 pushdecl (parm);
10674 else
10675 error ("parameter %qD declared void", parm);
10677 else
10679 /* If we find an enum constant or a type tag,
10680 put it aside for the moment. */
10681 TREE_CHAIN (parm) = NULL_TREE;
10682 nonparms = chainon (nonparms, parm);
10686 /* Get the decls in their original chain order and record in the
10687 function. This is all and only the PARM_DECLs that were
10688 pushed into scope by the loop above. */
10689 DECL_ARGUMENTS (fndecl) = getdecls ();
10691 else
10692 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10694 /* Now store the final chain of decls for the arguments
10695 as the decl-chain of the current lexical scope.
10696 Put the enumerators in as well, at the front so that
10697 DECL_ARGUMENTS is not modified. */
10698 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10700 if (use_eh_spec_block (current_function_decl))
10701 current_eh_spec_block = begin_eh_spec_block ();
10705 /* We have finished doing semantic analysis on DECL, but have not yet
10706 generated RTL for its body. Save away our current state, so that
10707 when we want to generate RTL later we know what to do. */
10709 static void
10710 save_function_data (tree decl)
10712 struct language_function *f;
10714 /* Save the language-specific per-function data so that we can
10715 get it back when we really expand this function. */
10716 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10718 /* Make a copy. */
10719 f = GGC_NEW (struct language_function);
10720 memcpy (f, cp_function_chain, sizeof (struct language_function));
10721 DECL_SAVED_FUNCTION_DATA (decl) = f;
10723 /* Clear out the bits we don't need. */
10724 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10725 f->bindings = NULL;
10726 f->x_local_names = NULL;
10730 /* Set the return value of the constructor (if present). */
10732 static void
10733 finish_constructor_body (void)
10735 tree val;
10736 tree exprstmt;
10738 if (targetm.cxx.cdtor_returns_this ())
10740 /* Any return from a constructor will end up here. */
10741 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10743 val = DECL_ARGUMENTS (current_function_decl);
10744 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10745 DECL_RESULT (current_function_decl), val);
10746 /* Return the address of the object. */
10747 exprstmt = build_stmt (RETURN_EXPR, val);
10748 add_stmt (exprstmt);
10752 /* Do all the processing for the beginning of a destructor; set up the
10753 vtable pointers and cleanups for bases and members. */
10755 static void
10756 begin_destructor_body (void)
10758 tree compound_stmt;
10760 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10761 issued an error message. We still want to try to process the
10762 body of the function, but initialize_vtbl_ptrs will crash if
10763 TYPE_BINFO is NULL. */
10764 if (COMPLETE_TYPE_P (current_class_type))
10766 compound_stmt = begin_compound_stmt (0);
10767 /* Make all virtual function table pointers in non-virtual base
10768 classes point to CURRENT_CLASS_TYPE's virtual function
10769 tables. */
10770 initialize_vtbl_ptrs (current_class_ptr);
10771 finish_compound_stmt (compound_stmt);
10773 /* And insert cleanups for our bases and members so that they
10774 will be properly destroyed if we throw. */
10775 push_base_cleanups ();
10779 /* At the end of every destructor we generate code to delete the object if
10780 necessary. Do that now. */
10782 static void
10783 finish_destructor_body (void)
10785 tree exprstmt;
10787 /* Any return from a destructor will end up here; that way all base
10788 and member cleanups will be run when the function returns. */
10789 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10791 /* In a virtual destructor, we must call delete. */
10792 if (DECL_VIRTUAL_P (current_function_decl))
10794 tree if_stmt;
10795 tree virtual_size = cxx_sizeof (current_class_type);
10797 /* [class.dtor]
10799 At the point of definition of a virtual destructor (including
10800 an implicit definition), non-placement operator delete shall
10801 be looked up in the scope of the destructor's class and if
10802 found shall be accessible and unambiguous. */
10803 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
10804 virtual_size,
10805 /*global_p=*/false,
10806 /*placement=*/NULL_TREE,
10807 /*alloc_fn=*/NULL_TREE);
10809 if_stmt = begin_if_stmt ();
10810 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10811 current_in_charge_parm,
10812 integer_one_node),
10813 if_stmt);
10814 finish_expr_stmt (exprstmt);
10815 finish_then_clause (if_stmt);
10816 finish_if_stmt (if_stmt);
10819 if (targetm.cxx.cdtor_returns_this ())
10821 tree val;
10823 val = DECL_ARGUMENTS (current_function_decl);
10824 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10825 DECL_RESULT (current_function_decl), val);
10826 /* Return the address of the object. */
10827 exprstmt = build_stmt (RETURN_EXPR, val);
10828 add_stmt (exprstmt);
10832 /* Do the necessary processing for the beginning of a function body, which
10833 in this case includes member-initializers, but not the catch clauses of
10834 a function-try-block. Currently, this means opening a binding level
10835 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
10837 tree
10838 begin_function_body (void)
10840 tree stmt;
10842 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10843 return NULL_TREE;
10845 if (processing_template_decl)
10846 /* Do nothing now. */;
10847 else
10848 /* Always keep the BLOCK node associated with the outermost pair of
10849 curly braces of a function. These are needed for correct
10850 operation of dwarfout.c. */
10851 keep_next_level (true);
10853 stmt = begin_compound_stmt (BCS_FN_BODY);
10855 if (processing_template_decl)
10856 /* Do nothing now. */;
10857 else if (DECL_DESTRUCTOR_P (current_function_decl))
10858 begin_destructor_body ();
10860 return stmt;
10863 /* Do the processing for the end of a function body. Currently, this means
10864 closing out the cleanups for fully-constructed bases and members, and in
10865 the case of the destructor, deleting the object if desired. Again, this
10866 is only meaningful for [cd]tors, since they are the only functions where
10867 there is a significant distinction between the main body and any
10868 function catch clauses. Handling, say, main() return semantics here
10869 would be wrong, as flowing off the end of a function catch clause for
10870 main() would also need to return 0. */
10872 void
10873 finish_function_body (tree compstmt)
10875 if (compstmt == NULL_TREE)
10876 return;
10878 /* Close the block. */
10879 finish_compound_stmt (compstmt);
10881 if (processing_template_decl)
10882 /* Do nothing now. */;
10883 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10884 finish_constructor_body ();
10885 else if (DECL_DESTRUCTOR_P (current_function_decl))
10886 finish_destructor_body ();
10889 /* Given a function, returns the BLOCK corresponding to the outermost level
10890 of curly braces, skipping the artificial block created for constructor
10891 initializers. */
10893 static tree
10894 outer_curly_brace_block (tree fndecl)
10896 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
10897 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10898 /* Skip the artificial function body block. */
10899 block = BLOCK_SUBBLOCKS (block);
10900 return block;
10903 /* Finish up a function declaration and compile that function
10904 all the way to assembler language output. The free the storage
10905 for the function definition.
10907 FLAGS is a bitwise or of the following values:
10908 2 - INCLASS_INLINE
10909 We just finished processing the body of an in-class inline
10910 function definition. (This processing will have taken place
10911 after the class definition is complete.) */
10913 tree
10914 finish_function (int flags)
10916 tree fndecl = current_function_decl;
10917 tree fntype, ctype = NULL_TREE;
10918 int inclass_inline = (flags & 2) != 0;
10919 int nested;
10921 /* When we get some parse errors, we can end up without a
10922 current_function_decl, so cope. */
10923 if (fndecl == NULL_TREE)
10924 return error_mark_node;
10926 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10927 && DECL_VIRTUAL_P (fndecl)
10928 && !processing_template_decl)
10930 tree fnclass = DECL_CONTEXT (fndecl);
10931 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10932 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10935 nested = function_depth > 1;
10936 fntype = TREE_TYPE (fndecl);
10938 /* TREE_READONLY (fndecl) = 1;
10939 This caused &foo to be of type ptr-to-const-function
10940 which then got a warning when stored in a ptr-to-function variable. */
10942 gcc_assert (building_stmt_tree ());
10944 /* For a cloned function, we've already got all the code we need;
10945 there's no need to add any extra bits. */
10946 if (!DECL_CLONED_FUNCTION_P (fndecl))
10948 if (DECL_MAIN_P (current_function_decl))
10950 tree stmt;
10952 /* Make it so that `main' always returns 0 by default (or
10953 1 for VMS). */
10954 #if VMS_TARGET
10955 stmt = finish_return_stmt (integer_one_node);
10956 #else
10957 stmt = finish_return_stmt (integer_zero_node);
10958 #endif
10959 /* Hack. We don't want the middle-end to warn that this
10960 return is unreachable, so put the statement on the
10961 special line 0. */
10962 #ifdef USE_MAPPED_LOCATION
10963 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10964 #else
10965 annotate_with_file_line (stmt, input_filename, 0);
10966 #endif
10969 if (use_eh_spec_block (current_function_decl))
10970 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10971 (TREE_TYPE (current_function_decl)),
10972 current_eh_spec_block);
10975 /* If we're saving up tree structure, tie off the function now. */
10976 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10978 finish_fname_decls ();
10980 /* If this function can't throw any exceptions, remember that. */
10981 if (!processing_template_decl
10982 && !cp_function_chain->can_throw
10983 && !flag_non_call_exceptions)
10984 TREE_NOTHROW (fndecl) = 1;
10986 /* This must come after expand_function_end because cleanups might
10987 have declarations (from inline functions) that need to go into
10988 this function's blocks. */
10990 /* If the current binding level isn't the outermost binding level
10991 for this function, either there is a bug, or we have experienced
10992 syntax errors and the statement tree is malformed. */
10993 if (current_binding_level->kind != sk_function_parms)
10995 /* Make sure we have already experienced errors. */
10996 gcc_assert (errorcount);
10998 /* Throw away the broken statement tree and extra binding
10999 levels. */
11000 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11002 while (current_binding_level->kind != sk_function_parms)
11004 if (current_binding_level->kind == sk_class)
11005 pop_nested_class ();
11006 else
11007 poplevel (0, 0, 0);
11010 poplevel (1, 0, 1);
11012 /* Statements should always be full-expressions at the outermost set
11013 of curly braces for a function. */
11014 gcc_assert (stmts_are_full_exprs_p ());
11016 /* Set up the named return value optimization, if we can. Candidate
11017 variables are selected in check_return_value. */
11018 if (current_function_return_value)
11020 tree r = current_function_return_value;
11021 tree outer;
11023 if (r != error_mark_node
11024 /* This is only worth doing for fns that return in memory--and
11025 simpler, since we don't have to worry about promoted modes. */
11026 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11027 /* Only allow this for variables declared in the outer scope of
11028 the function so we know that their lifetime always ends with a
11029 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11030 we were to do this optimization in tree-ssa. */
11031 && (outer = outer_curly_brace_block (fndecl))
11032 && chain_member (r, BLOCK_VARS (outer)))
11033 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11035 current_function_return_value = NULL_TREE;
11038 /* Remember that we were in class scope. */
11039 if (current_class_name)
11040 ctype = current_class_type;
11042 /* Must mark the RESULT_DECL as being in this function. */
11043 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11045 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11046 to the FUNCTION_DECL node itself. */
11047 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11049 /* Save away current state, if appropriate. */
11050 if (!processing_template_decl)
11051 save_function_data (fndecl);
11053 /* Complain if there's just no return statement. */
11054 if (warn_return_type
11055 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11056 && !dependent_type_p (TREE_TYPE (fntype))
11057 && !current_function_returns_value && !current_function_returns_null
11058 /* Don't complain if we abort or throw. */
11059 && !current_function_returns_abnormally
11060 && !DECL_NAME (DECL_RESULT (fndecl))
11061 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
11062 inline function, as we might never be compiled separately. */
11063 && (DECL_INLINE (fndecl) || processing_template_decl)
11064 /* Structor return values (if any) are set by the compiler. */
11065 && !DECL_CONSTRUCTOR_P (fndecl)
11066 && !DECL_DESTRUCTOR_P (fndecl))
11067 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11069 /* Store the end of the function, so that we get good line number
11070 info for the epilogue. */
11071 cfun->function_end_locus = input_location;
11073 /* Genericize before inlining. */
11074 if (!processing_template_decl)
11076 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11077 cp_genericize (fndecl);
11078 /* Clear out the bits we don't need. */
11079 f->x_current_class_ptr = NULL;
11080 f->x_current_class_ref = NULL;
11081 f->x_eh_spec_block = NULL;
11082 f->x_in_charge_parm = NULL;
11083 f->x_vtt_parm = NULL;
11084 f->x_return_value = NULL;
11085 f->bindings = NULL;
11087 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11088 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11090 /* Clear out the bits we don't need. */
11091 local_names = NULL;
11093 /* We're leaving the context of this function, so zap cfun. It's still in
11094 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
11095 cfun = NULL;
11096 current_function_decl = NULL;
11098 /* If this is an in-class inline definition, we may have to pop the
11099 bindings for the template parameters that we added in
11100 maybe_begin_member_template_processing when start_function was
11101 called. */
11102 if (inclass_inline)
11103 maybe_end_member_template_processing ();
11105 /* Leave the scope of the class. */
11106 if (ctype)
11107 pop_nested_class ();
11109 --function_depth;
11111 /* Clean up. */
11112 if (! nested)
11113 /* Let the error reporting routines know that we're outside a
11114 function. For a nested function, this value is used in
11115 cxx_pop_function_context and then reset via pop_function_context. */
11116 current_function_decl = NULL_TREE;
11118 return fndecl;
11121 /* Create the FUNCTION_DECL for a function definition.
11122 DECLSPECS and DECLARATOR are the parts of the declaration;
11123 they describe the return type and the name of the function,
11124 but twisted together in a fashion that parallels the syntax of C.
11126 This function creates a binding context for the function body
11127 as well as setting up the FUNCTION_DECL in current_function_decl.
11129 Returns a FUNCTION_DECL on success.
11131 If the DECLARATOR is not suitable for a function (it defines a datum
11132 instead), we return 0, which tells yyparse to report a parse error.
11134 May return void_type_node indicating that this method is actually
11135 a friend. See grokfield for more details.
11137 Came here with a `.pushlevel' .
11139 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11140 CHANGES TO CODE IN `grokfield'. */
11142 tree
11143 start_method (cp_decl_specifier_seq *declspecs,
11144 const cp_declarator *declarator, tree attrlist)
11146 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11147 &attrlist);
11149 if (fndecl == error_mark_node)
11150 return error_mark_node;
11152 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11154 error ("invalid member function declaration");
11155 return error_mark_node;
11158 if (attrlist)
11159 cplus_decl_attributes (&fndecl, attrlist, 0);
11161 /* Pass friends other than inline friend functions back. */
11162 if (fndecl == void_type_node)
11163 return fndecl;
11165 if (DECL_IN_AGGR_P (fndecl))
11167 if (DECL_CONTEXT (fndecl)
11168 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11169 error ("%qD is already defined in class %qT", fndecl,
11170 DECL_CONTEXT (fndecl));
11171 return error_mark_node;
11174 check_template_shadow (fndecl);
11176 DECL_DECLARED_INLINE_P (fndecl) = 1;
11177 if (flag_default_inline)
11178 DECL_INLINE (fndecl) = 1;
11180 /* We process method specializations in finish_struct_1. */
11181 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11183 fndecl = push_template_decl (fndecl);
11184 if (fndecl == error_mark_node)
11185 return fndecl;
11188 if (! DECL_FRIEND_P (fndecl))
11190 if (TREE_CHAIN (fndecl))
11192 fndecl = copy_node (fndecl);
11193 TREE_CHAIN (fndecl) = NULL_TREE;
11195 grok_special_member_properties (fndecl);
11198 finish_decl (fndecl, NULL_TREE, NULL_TREE);
11200 /* Make a place for the parms. */
11201 begin_scope (sk_function_parms, fndecl);
11203 DECL_IN_AGGR_P (fndecl) = 1;
11204 return fndecl;
11207 /* Go through the motions of finishing a function definition.
11208 We don't compile this method until after the whole class has
11209 been processed.
11211 FINISH_METHOD must return something that looks as though it
11212 came from GROKFIELD (since we are defining a method, after all).
11214 This is called after parsing the body of the function definition.
11215 STMTS is the chain of statements that makes up the function body.
11217 DECL is the ..._DECL that `start_method' provided. */
11219 tree
11220 finish_method (tree decl)
11222 tree fndecl = decl;
11223 tree old_initial;
11225 tree link;
11227 if (decl == void_type_node)
11228 return decl;
11230 old_initial = DECL_INITIAL (fndecl);
11232 /* Undo the level for the parms (from start_method).
11233 This is like poplevel, but it causes nothing to be
11234 saved. Saving information here confuses symbol-table
11235 output routines. Besides, this information will
11236 be correctly output when this method is actually
11237 compiled. */
11239 /* Clear out the meanings of the local variables of this level;
11240 also record in each decl which block it belongs to. */
11242 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11244 if (DECL_NAME (link) != NULL_TREE)
11245 pop_binding (DECL_NAME (link), link);
11246 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11247 DECL_CONTEXT (link) = NULL_TREE;
11250 poplevel (0, 0, 0);
11252 DECL_INITIAL (fndecl) = old_initial;
11254 /* We used to check if the context of FNDECL was different from
11255 current_class_type as another way to get inside here. This didn't work
11256 for String.cc in libg++. */
11257 if (DECL_FRIEND_P (fndecl))
11259 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11260 fndecl);
11261 decl = void_type_node;
11264 return decl;
11268 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11269 we can lay it out later, when and if its type becomes complete. */
11271 void
11272 maybe_register_incomplete_var (tree var)
11274 gcc_assert (TREE_CODE (var) == VAR_DECL);
11276 /* Keep track of variables with incomplete types. */
11277 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11278 && DECL_EXTERNAL (var))
11280 tree inner_type = TREE_TYPE (var);
11282 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11283 inner_type = TREE_TYPE (inner_type);
11284 inner_type = TYPE_MAIN_VARIANT (inner_type);
11286 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11287 /* RTTI TD entries are created while defining the type_info. */
11288 || (TYPE_LANG_SPECIFIC (inner_type)
11289 && TYPE_BEING_DEFINED (inner_type)))
11290 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11294 /* Called when a class type (given by TYPE) is defined. If there are
11295 any existing VAR_DECLs whose type hsa been completed by this
11296 declaration, update them now. */
11298 void
11299 complete_vars (tree type)
11301 tree *list = &incomplete_vars;
11303 gcc_assert (CLASS_TYPE_P (type));
11304 while (*list)
11306 if (same_type_p (type, TREE_PURPOSE (*list)))
11308 tree var = TREE_VALUE (*list);
11309 tree type = TREE_TYPE (var);
11310 /* Complete the type of the variable. The VAR_DECL itself
11311 will be laid out in expand_expr. */
11312 complete_type (type);
11313 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11314 /* Remove this entry from the list. */
11315 *list = TREE_CHAIN (*list);
11317 else
11318 list = &TREE_CHAIN (*list);
11321 /* Check for pending declarations which may have abstract type. */
11322 complete_type_check_abstract (type);
11325 /* If DECL is of a type which needs a cleanup, build that cleanup
11326 here. */
11328 tree
11329 cxx_maybe_build_cleanup (tree decl)
11331 tree type = TREE_TYPE (decl);
11333 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11335 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11336 tree rval;
11337 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11338 && CLASSTYPE_VBASECLASSES (type));
11340 if (TREE_CODE (type) == ARRAY_TYPE)
11341 rval = decl;
11342 else
11344 cxx_mark_addressable (decl);
11345 rval = build_unary_op (ADDR_EXPR, decl, 0);
11348 /* Optimize for space over speed here. */
11349 if (!has_vbases || flag_expensive_optimizations)
11350 flags |= LOOKUP_NONVIRTUAL;
11352 rval = build_delete (TREE_TYPE (rval), rval,
11353 sfk_complete_destructor, flags, 0);
11355 return rval;
11357 return NULL_TREE;
11360 /* When a stmt has been parsed, this function is called. */
11362 void
11363 finish_stmt (void)
11367 /* DECL was originally constructed as a non-static member function,
11368 but turned out to be static. Update it accordingly. */
11370 void
11371 revert_static_member_fn (tree decl)
11373 tree tmp;
11374 tree function = TREE_TYPE (decl);
11375 tree args = TYPE_ARG_TYPES (function);
11377 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11378 != TYPE_UNQUALIFIED)
11379 error ("static member function %q#D declared with type qualifiers", decl);
11381 args = TREE_CHAIN (args);
11382 tmp = build_function_type (TREE_TYPE (function), args);
11383 tmp = build_qualified_type (tmp, cp_type_quals (function));
11384 tmp = build_exception_variant (tmp,
11385 TYPE_RAISES_EXCEPTIONS (function));
11386 TREE_TYPE (decl) = tmp;
11387 if (DECL_ARGUMENTS (decl))
11388 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11389 DECL_STATIC_FUNCTION_P (decl) = 1;
11392 /* Initialize the variables used during compilation of a C++
11393 function. */
11395 void
11396 cxx_push_function_context (struct function * f)
11398 struct language_function *p = GGC_CNEW (struct language_function);
11399 f->language = p;
11401 /* Whenever we start a new function, we destroy temporaries in the
11402 usual way. */
11403 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11405 if (f->decl)
11407 tree fn = f->decl;
11409 if (DECL_SAVED_FUNCTION_DATA (fn))
11411 /* If we already parsed this function, and we're just expanding it
11412 now, restore saved state. */
11413 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11415 /* We don't need the saved data anymore. Unless this is an inline
11416 function; we need the named return value info for
11417 declare_return_variable. */
11418 if (! DECL_INLINE (fn))
11419 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11424 /* Free the language-specific parts of F, now that we've finished
11425 compiling the function. */
11427 void
11428 cxx_pop_function_context (struct function * f)
11430 f->language = 0;
11433 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11434 one of the language-independent trees. */
11436 enum cp_tree_node_structure_enum
11437 cp_tree_node_structure (union lang_tree_node * t)
11439 switch (TREE_CODE (&t->generic))
11441 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11442 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11443 case OVERLOAD: return TS_CP_OVERLOAD;
11444 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11445 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11446 case PTRMEM_CST: return TS_CP_PTRMEM;
11447 case BASELINK: return TS_CP_BASELINK;
11448 default: return TS_CP_GENERIC;
11452 /* Build the void_list_node (void_type_node having been created). */
11453 tree
11454 build_void_list_node (void)
11456 tree t = build_tree_list (NULL_TREE, void_type_node);
11457 return t;
11460 bool
11461 cp_missing_noreturn_ok_p (tree decl)
11463 /* A missing noreturn is ok for the `main' function. */
11464 return DECL_MAIN_P (decl);
11467 /* Return the COMDAT group into which DECL should be placed. */
11469 const char *
11470 cxx_comdat_group (tree decl)
11472 tree name;
11474 /* Virtual tables, construction virtual tables, and virtual table
11475 tables all go in a single COMDAT group, named after the primary
11476 virtual table. */
11477 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11478 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11479 /* For all other DECLs, the COMDAT group is the mangled name of the
11480 declaration itself. */
11481 else
11483 while (DECL_THUNK_P (decl))
11485 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11486 into the same section as the target function. In that case
11487 we must return target's name. */
11488 tree target = THUNK_TARGET (decl);
11489 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11490 && DECL_SECTION_NAME (target) != NULL
11491 && DECL_ONE_ONLY (target))
11492 decl = target;
11493 else
11494 break;
11496 name = DECL_ASSEMBLER_NAME (decl);
11499 return IDENTIFIER_POINTER (name);
11502 #include "gt-cp-decl.h"