* decl.c, decl2.c, parser.c: Fix comment typos. Follow
[official-gcc.git] / gcc / cp / decl.c
blob5178bdfd91d327db0627e11b214731de98167d3a
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 /* The following symbols are subsumed in the cp_global_trees array, and
110 listed here individually for documentation purposes.
112 C++ extensions
113 tree wchar_decl_node;
115 tree vtable_entry_type;
116 tree delta_type_node;
117 tree __t_desc_type_node;
119 tree class_type_node;
120 tree unknown_type_node;
122 Array type `vtable_entry_type[]'
124 tree vtbl_type_node;
125 tree vtbl_ptr_type_node;
127 Namespaces,
129 tree std_node;
130 tree abi_node;
132 A FUNCTION_DECL which can call `abort'. Not necessarily the
133 one that the user will declare, but sufficient to be called
134 by routines that want to abort the program.
136 tree abort_fndecl;
138 The FUNCTION_DECL for the default `::operator delete'.
140 tree global_delete_fndecl;
142 Used by RTTI
143 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
144 tree tinfo_var_id;
148 tree cp_global_trees[CPTI_MAX];
150 /* Indicates that there is a type value in some namespace, although
151 that is not necessarily in scope at the moment. */
153 tree global_type_node;
155 /* The node that holds the "name" of the global scope. */
156 tree global_scope_name;
158 #define local_names cp_function_chain->x_local_names
160 /* A list of objects which have constructors or destructors
161 which reside in the global scope. The decl is stored in
162 the TREE_VALUE slot and the initializer is stored
163 in the TREE_PURPOSE slot. */
164 tree static_aggregates;
166 /* -- end of C++ */
168 /* A node for the integer constants 2, and 3. */
170 tree integer_two_node, integer_three_node;
172 /* Used only for jumps to as-yet undefined labels, since jumps to
173 defined labels can have their validity checked immediately. */
175 struct named_label_use_entry GTY(())
177 struct named_label_use_entry *next;
178 /* The binding level to which this entry is *currently* attached.
179 This is initially the binding level in which the goto appeared,
180 but is modified as scopes are closed. */
181 struct cp_binding_level *binding_level;
182 /* The head of the names list that was current when the goto appeared,
183 or the inner scope popped. These are the decls that will *not* be
184 skipped when jumping to the label. */
185 tree names_in_scope;
186 /* The location of the goto, for error reporting. */
187 location_t o_goto_locus;
188 /* True if an OpenMP structured block scope has been closed since
189 the goto appeared. This means that the branch from the label will
190 illegally exit an OpenMP scope. */
191 bool in_omp_scope;
194 /* A list of all LABEL_DECLs in the function that have names. Here so
195 we can clear out their names' definitions at the end of the
196 function, and so we can check the validity of jumps to these labels. */
198 struct named_label_entry GTY(())
200 /* The decl itself. */
201 tree label_decl;
203 /* The binding level to which the label is *currently* attached.
204 This is initially set to the binding level in which the label
205 is defined, but is modified as scopes are closed. */
206 struct cp_binding_level *binding_level;
207 /* The head of the names list that was current when the label was
208 defined, or the inner scope popped. These are the decls that will
209 be skipped when jumping to the label. */
210 tree names_in_scope;
211 /* A tree list of all decls from all binding levels that would be
212 crossed by a backward branch to the label. */
213 tree bad_decls;
215 /* A list of uses of the label, before the label is defined. */
216 struct named_label_use_entry *uses;
218 /* The following bits are set after the label is defined, and are
219 updated as scopes are popped. They indicate that a backward jump
220 to the label will illegally enter a scope of the given flavor. */
221 bool in_try_scope;
222 bool in_catch_scope;
223 bool in_omp_scope;
226 #define named_labels cp_function_chain->x_named_labels
228 /* The number of function bodies which we are currently processing.
229 (Zero if we are at namespace scope, one inside the body of a
230 function, two inside the body of a function in a local class, etc.) */
231 int function_depth;
233 /* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
236 deprecated items. */
238 enum deprecated_states {
239 DEPRECATED_NORMAL,
240 DEPRECATED_SUPPRESS
243 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
245 /* True if a declaration with an `extern' linkage specifier is being
246 processed. */
247 bool have_extern_spec;
250 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
251 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
252 time the VAR_DECL was declared, the type was incomplete. */
254 static GTY(()) tree incomplete_vars;
256 /* Returns the kind of template specialization we are currently
257 processing, given that it's declaration contained N_CLASS_SCOPES
258 explicit scope qualifications. */
260 tmpl_spec_kind
261 current_tmpl_spec_kind (int n_class_scopes)
263 int n_template_parm_scopes = 0;
264 int seen_specialization_p = 0;
265 int innermost_specialization_p = 0;
266 struct cp_binding_level *b;
268 /* Scan through the template parameter scopes. */
269 for (b = current_binding_level;
270 b->kind == sk_template_parms;
271 b = b->level_chain)
273 /* If we see a specialization scope inside a parameter scope,
274 then something is wrong. That corresponds to a declaration
275 like:
277 template <class T> template <> ...
279 which is always invalid since [temp.expl.spec] forbids the
280 specialization of a class member template if the enclosing
281 class templates are not explicitly specialized as well. */
282 if (b->explicit_spec_p)
284 if (n_template_parm_scopes == 0)
285 innermost_specialization_p = 1;
286 else
287 seen_specialization_p = 1;
289 else if (seen_specialization_p == 1)
290 return tsk_invalid_member_spec;
292 ++n_template_parm_scopes;
295 /* Handle explicit instantiations. */
296 if (processing_explicit_instantiation)
298 if (n_template_parm_scopes != 0)
299 /* We've seen a template parameter list during an explicit
300 instantiation. For example:
302 template <class T> template void f(int);
304 This is erroneous. */
305 return tsk_invalid_expl_inst;
306 else
307 return tsk_expl_inst;
310 if (n_template_parm_scopes < n_class_scopes)
311 /* We've not seen enough template headers to match all the
312 specialized classes present. For example:
314 template <class T> void R<T>::S<T>::f(int);
316 This is invalid; there needs to be one set of template
317 parameters for each class. */
318 return tsk_insufficient_parms;
319 else if (n_template_parm_scopes == n_class_scopes)
320 /* We're processing a non-template declaration (even though it may
321 be a member of a template class.) For example:
323 template <class T> void S<T>::f(int);
325 The `class T' maches the `S<T>', leaving no template headers
326 corresponding to the `f'. */
327 return tsk_none;
328 else if (n_template_parm_scopes > n_class_scopes + 1)
329 /* We've got too many template headers. For example:
331 template <> template <class T> void f (T);
333 There need to be more enclosing classes. */
334 return tsk_excessive_parms;
335 else
336 /* This must be a template. It's of the form:
338 template <class T> template <class U> void S<T>::f(U);
340 This is a specialization if the innermost level was a
341 specialization; otherwise it's just a definition of the
342 template. */
343 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
346 /* Exit the current scope. */
348 void
349 finish_scope (void)
351 poplevel (0, 0, 0);
354 /* When a label goes out of scope, check to see if that label was used
355 in a valid manner, and issue any appropriate warnings or errors. */
357 static void
358 pop_label (tree label, tree old_value)
360 if (!processing_template_decl)
362 if (DECL_INITIAL (label) == NULL_TREE)
364 location_t location;
366 error ("label %q+D used but not defined", label);
367 #ifdef USE_MAPPED_LOCATION
368 location = input_location; /* FIXME want (input_filename, (line)0) */
369 #else
370 location.file = input_filename;
371 location.line = 0;
372 #endif
373 /* Avoid crashing later. */
374 define_label (location, DECL_NAME (label));
376 else if (!TREE_USED (label))
377 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
380 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383 /* At the end of a function, all labels declared within the function
384 go out of scope. BLOCK is the top-level block for the
385 function. */
387 static int
388 pop_labels_1 (void **slot, void *data)
390 struct named_label_entry *ent = (struct named_label_entry *) *slot;
391 tree block = (tree) data;
393 pop_label (ent->label_decl, NULL_TREE);
395 /* Put the labels into the "variables" of the top-level block,
396 so debugger can see them. */
397 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
398 BLOCK_VARS (block) = ent->label_decl;
400 htab_clear_slot (named_labels, slot);
402 return 1;
405 static void
406 pop_labels (tree block)
408 if (named_labels)
410 htab_traverse (named_labels, pop_labels_1, block);
411 named_labels = NULL;
415 /* At the end of a block with local labels, restore the outer definition. */
417 static void
418 pop_local_label (tree label, tree old_value)
420 struct named_label_entry dummy;
421 void **slot;
423 pop_label (label, old_value);
425 dummy.label_decl = label;
426 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
427 htab_clear_slot (named_labels, slot);
430 /* The following two routines are used to interface to Objective-C++.
431 The binding level is purposely treated as an opaque type. */
433 void *
434 objc_get_current_scope (void)
436 return current_binding_level;
439 /* The following routine is used by the NeXT-style SJLJ exceptions;
440 variables get marked 'volatile' so as to not be clobbered by
441 _setjmp()/_longjmp() calls. All variables in the current scope,
442 as well as parent scopes up to (but not including) ENCLOSING_BLK
443 shall be thusly marked. */
445 void
446 objc_mark_locals_volatile (void *enclosing_blk)
448 struct cp_binding_level *scope;
450 for (scope = current_binding_level;
451 scope && scope != enclosing_blk;
452 scope = scope->level_chain)
454 tree decl;
456 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
457 objc_volatilize_decl (decl);
459 /* Do not climb up past the current function. */
460 if (scope->kind == sk_function_parms)
461 break;
465 /* Update data for defined and undefined labels when leaving a scope. */
467 static int
468 poplevel_named_label_1 (void **slot, void *data)
470 struct named_label_entry *ent = (struct named_label_entry *) *slot;
471 struct cp_binding_level *bl = (struct cp_binding_level *) data;
472 struct cp_binding_level *obl = bl->level_chain;
474 if (ent->binding_level == bl)
476 tree decl;
478 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
479 if (decl_jump_unsafe (decl))
480 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
482 ent->binding_level = obl;
483 ent->names_in_scope = obl->names;
484 switch (bl->kind)
486 case sk_try:
487 ent->in_try_scope = true;
488 break;
489 case sk_catch:
490 ent->in_catch_scope = true;
491 break;
492 case sk_omp:
493 ent->in_omp_scope = true;
494 break;
495 default:
496 break;
499 else if (ent->uses)
501 struct named_label_use_entry *use;
503 for (use = ent->uses; use ; use = use->next)
504 if (use->binding_level == bl)
506 use->binding_level = obl;
507 use->names_in_scope = obl->names;
508 if (bl->kind == sk_omp)
509 use->in_omp_scope = true;
513 return 1;
516 /* Exit a binding level.
517 Pop the level off, and restore the state of the identifier-decl mappings
518 that were in effect when this level was entered.
520 If KEEP == 1, this level had explicit declarations, so
521 and create a "block" (a BLOCK node) for the level
522 to record its declarations and subblocks for symbol table output.
524 If FUNCTIONBODY is nonzero, this level is the body of a function,
525 so create a block as if KEEP were set and also clear out all
526 label names.
528 If REVERSE is nonzero, reverse the order of decls before putting
529 them into the BLOCK. */
531 tree
532 poplevel (int keep, int reverse, int functionbody)
534 tree link;
535 /* The chain of decls was accumulated in reverse order.
536 Put it into forward order, just for cleanliness. */
537 tree decls;
538 int tmp = functionbody;
539 int real_functionbody;
540 tree subblocks;
541 tree block;
542 tree decl;
543 int leaving_for_scope;
544 scope_kind kind;
546 timevar_push (TV_NAME_LOOKUP);
547 restart:
549 block = NULL_TREE;
551 gcc_assert (current_binding_level->kind != sk_class);
553 real_functionbody = (current_binding_level->kind == sk_cleanup
554 ? ((functionbody = 0), tmp) : functionbody);
555 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
557 gcc_assert (!VEC_length(cp_class_binding,
558 current_binding_level->class_shadowed));
560 /* We used to use KEEP == 2 to indicate that the new block should go
561 at the beginning of the list of blocks at this binding level,
562 rather than the end. This hack is no longer used. */
563 gcc_assert (keep == 0 || keep == 1);
565 if (current_binding_level->keep)
566 keep = 1;
568 /* Any uses of undefined labels, and any defined labels, now operate
569 under constraints of next binding contour. */
570 if (cfun && !functionbody && named_labels)
571 htab_traverse (named_labels, poplevel_named_label_1,
572 current_binding_level);
574 /* Get the decls in the order they were written.
575 Usually current_binding_level->names is in reverse order.
576 But parameter decls were previously put in forward order. */
578 if (reverse)
579 current_binding_level->names
580 = decls = nreverse (current_binding_level->names);
581 else
582 decls = current_binding_level->names;
584 /* If there were any declarations or structure tags in that level,
585 or if this level is a function body,
586 create a BLOCK to record them for the life of this function. */
587 block = NULL_TREE;
588 if (keep == 1 || functionbody)
589 block = make_node (BLOCK);
590 if (block != NULL_TREE)
592 BLOCK_VARS (block) = decls;
593 BLOCK_SUBBLOCKS (block) = subblocks;
596 /* In each subblock, record that this is its superior. */
597 if (keep >= 0)
598 for (link = subblocks; link; link = TREE_CHAIN (link))
599 BLOCK_SUPERCONTEXT (link) = block;
601 /* We still support the old for-scope rules, whereby the variables
602 in a for-init statement were in scope after the for-statement
603 ended. We only use the new rules if flag_new_for_scope is
604 nonzero. */
605 leaving_for_scope
606 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
608 /* Before we remove the declarations first check for unused variables. */
609 if (warn_unused_variable
610 && !processing_template_decl)
611 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
612 if (TREE_CODE (decl) == VAR_DECL
613 && ! TREE_USED (decl)
614 && ! DECL_IN_SYSTEM_HEADER (decl)
615 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
616 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
618 /* Remove declarations for all the DECLs in this level. */
619 for (link = decls; link; link = TREE_CHAIN (link))
621 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
622 && DECL_NAME (link))
624 tree name = DECL_NAME (link);
625 cxx_binding *ob;
626 tree ns_binding;
628 ob = outer_binding (name,
629 IDENTIFIER_BINDING (name),
630 /*class_p=*/true);
631 if (!ob)
632 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
633 else
634 ns_binding = NULL_TREE;
636 if (ob && ob->scope == current_binding_level->level_chain)
637 /* We have something like:
639 int i;
640 for (int i; ;);
642 and we are leaving the `for' scope. There's no reason to
643 keep the binding of the inner `i' in this case. */
644 pop_binding (name, link);
645 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
646 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
647 /* Here, we have something like:
649 typedef int I;
651 void f () {
652 for (int I; ;);
655 We must pop the for-scope binding so we know what's a
656 type and what isn't. */
657 pop_binding (name, link);
658 else
660 /* Mark this VAR_DECL as dead so that we can tell we left it
661 there only for backward compatibility. */
662 DECL_DEAD_FOR_LOCAL (link) = 1;
664 /* Keep track of what should have happened when we
665 popped the binding. */
666 if (ob && ob->value)
668 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
669 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
672 /* Add it to the list of dead variables in the next
673 outermost binding to that we can remove these when we
674 leave that binding. */
675 current_binding_level->level_chain->dead_vars_from_for
676 = tree_cons (NULL_TREE, link,
677 current_binding_level->level_chain->
678 dead_vars_from_for);
680 /* Although we don't pop the cxx_binding, we do clear
681 its SCOPE since the scope is going away now. */
682 IDENTIFIER_BINDING (name)->scope
683 = current_binding_level->level_chain;
686 else
688 tree name;
690 /* Remove the binding. */
691 decl = link;
693 if (TREE_CODE (decl) == TREE_LIST)
694 decl = TREE_VALUE (decl);
695 name = decl;
697 if (TREE_CODE (name) == OVERLOAD)
698 name = OVL_FUNCTION (name);
700 gcc_assert (DECL_P (name));
701 pop_binding (DECL_NAME (name), decl);
705 /* Remove declarations for any `for' variables from inner scopes
706 that we kept around. */
707 for (link = current_binding_level->dead_vars_from_for;
708 link; link = TREE_CHAIN (link))
709 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
711 /* Restore the IDENTIFIER_TYPE_VALUEs. */
712 for (link = current_binding_level->type_shadowed;
713 link; link = TREE_CHAIN (link))
714 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
716 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
717 for (link = current_binding_level->shadowed_labels;
718 link;
719 link = TREE_CHAIN (link))
720 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
722 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
723 list if a `using' declaration put them there. The debugging
724 back-ends won't understand OVERLOAD, so we remove them here.
725 Because the BLOCK_VARS are (temporarily) shared with
726 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
727 popped all the bindings. */
728 if (block)
730 tree* d;
732 for (d = &BLOCK_VARS (block); *d; )
734 if (TREE_CODE (*d) == TREE_LIST)
735 *d = TREE_CHAIN (*d);
736 else
737 d = &TREE_CHAIN (*d);
741 /* If the level being exited is the top level of a function,
742 check over all the labels. */
743 if (functionbody)
745 /* Since this is the top level block of a function, the vars are
746 the function's parameters. Don't leave them in the BLOCK
747 because they are found in the FUNCTION_DECL instead. */
748 BLOCK_VARS (block) = 0;
749 pop_labels (block);
752 kind = current_binding_level->kind;
753 if (kind == sk_cleanup)
755 tree stmt;
757 /* If this is a temporary binding created for a cleanup, then we'll
758 have pushed a statement list level. Pop that, create a new
759 BIND_EXPR for the block, and insert it into the stream. */
760 stmt = pop_stmt_list (current_binding_level->statement_list);
761 stmt = c_build_bind_expr (block, stmt);
762 add_stmt (stmt);
765 leave_scope ();
766 if (functionbody)
767 DECL_INITIAL (current_function_decl) = block;
768 else if (block)
769 current_binding_level->blocks
770 = chainon (current_binding_level->blocks, block);
772 /* If we did not make a block for the level just exited,
773 any blocks made for inner levels
774 (since they cannot be recorded as subblocks in that level)
775 must be carried forward so they will later become subblocks
776 of something else. */
777 else if (subblocks)
778 current_binding_level->blocks
779 = chainon (current_binding_level->blocks, subblocks);
781 /* Each and every BLOCK node created here in `poplevel' is important
782 (e.g. for proper debugging information) so if we created one
783 earlier, mark it as "used". */
784 if (block)
785 TREE_USED (block) = 1;
787 /* All temporary bindings created for cleanups are popped silently. */
788 if (kind == sk_cleanup)
789 goto restart;
791 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
794 /* Insert BLOCK at the end of the list of subblocks of the
795 current binding level. This is used when a BIND_EXPR is expanded,
796 to handle the BLOCK node inside the BIND_EXPR. */
798 void
799 insert_block (tree block)
801 TREE_USED (block) = 1;
802 current_binding_level->blocks
803 = chainon (current_binding_level->blocks, block);
806 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
807 itself, calling F for each. The DATA is passed to F as well. */
809 static int
810 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
812 int result = 0;
813 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
815 result |= (*f) (namespace, data);
817 for (; current; current = TREE_CHAIN (current))
818 result |= walk_namespaces_r (current, f, data);
820 return result;
823 /* Walk all the namespaces, calling F for each. The DATA is passed to
824 F as well. */
827 walk_namespaces (walk_namespaces_fn f, void* data)
829 return walk_namespaces_r (global_namespace, f, data);
832 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
833 DATA is non-NULL, this is the last time we will call
834 wrapup_global_declarations for this NAMESPACE. */
837 wrapup_globals_for_namespace (tree namespace, void* data)
839 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
840 VEC(tree,gc) *statics = level->static_decls;
841 tree *vec = VEC_address (tree, statics);
842 int len = VEC_length (tree, statics);
843 int last_time = (data != 0);
845 if (last_time)
847 check_global_declarations (vec, len);
848 emit_debug_global_declarations (vec, len);
849 return 0;
852 /* Write out any globals that need to be output. */
853 return wrapup_global_declarations (vec, len);
857 /* In C++, you don't have to write `struct S' to refer to `S'; you
858 can just use `S'. We accomplish this by creating a TYPE_DECL as
859 if the user had written `typedef struct S S'. Create and return
860 the TYPE_DECL for TYPE. */
862 tree
863 create_implicit_typedef (tree name, tree type)
865 tree decl;
867 decl = build_decl (TYPE_DECL, name, type);
868 DECL_ARTIFICIAL (decl) = 1;
869 /* There are other implicit type declarations, like the one *within*
870 a class that allows you to write `S::S'. We must distinguish
871 amongst these. */
872 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
873 TYPE_NAME (type) = decl;
875 return decl;
878 /* Remember a local name for name-mangling purposes. */
880 static void
881 push_local_name (tree decl)
883 size_t i, nelts;
884 tree t, name;
886 timevar_push (TV_NAME_LOOKUP);
888 name = DECL_NAME (decl);
890 nelts = VEC_length (tree, local_names);
891 for (i = 0; i < nelts; i++)
893 t = VEC_index (tree, local_names, i);
894 if (DECL_NAME (t) == name)
896 if (!DECL_LANG_SPECIFIC (decl))
897 retrofit_lang_decl (decl);
898 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
899 if (DECL_LANG_SPECIFIC (t))
900 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
901 else
902 DECL_DISCRIMINATOR (decl) = 1;
904 VEC_replace (tree, local_names, i, decl);
905 timevar_pop (TV_NAME_LOOKUP);
906 return;
910 VEC_safe_push (tree, gc, local_names, decl);
911 timevar_pop (TV_NAME_LOOKUP);
914 /* Subroutine of duplicate_decls: return truthvalue of whether
915 or not types of these decls match.
917 For C++, we must compare the parameter list so that `int' can match
918 `int&' in a parameter position, but `int&' is not confused with
919 `const int&'. */
922 decls_match (tree newdecl, tree olddecl)
924 int types_match;
926 if (newdecl == olddecl)
927 return 1;
929 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
930 /* If the two DECLs are not even the same kind of thing, we're not
931 interested in their types. */
932 return 0;
934 if (TREE_CODE (newdecl) == FUNCTION_DECL)
936 tree f1 = TREE_TYPE (newdecl);
937 tree f2 = TREE_TYPE (olddecl);
938 tree p1 = TYPE_ARG_TYPES (f1);
939 tree p2 = TYPE_ARG_TYPES (f2);
941 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
942 && ! (DECL_EXTERN_C_P (newdecl)
943 && DECL_EXTERN_C_P (olddecl)))
944 return 0;
946 if (TREE_CODE (f1) != TREE_CODE (f2))
947 return 0;
949 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
951 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
952 && (DECL_BUILT_IN (olddecl)
953 #ifndef NO_IMPLICIT_EXTERN_C
954 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
955 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
956 #endif
959 types_match = self_promoting_args_p (p1);
960 if (p1 == void_list_node)
961 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
963 #ifndef NO_IMPLICIT_EXTERN_C
964 else if (p1 == NULL_TREE
965 && (DECL_EXTERN_C_P (olddecl)
966 && DECL_IN_SYSTEM_HEADER (olddecl)
967 && !DECL_CLASS_SCOPE_P (olddecl))
968 && (DECL_EXTERN_C_P (newdecl)
969 && DECL_IN_SYSTEM_HEADER (newdecl)
970 && !DECL_CLASS_SCOPE_P (newdecl)))
972 types_match = self_promoting_args_p (p2);
973 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
975 #endif
976 else
977 types_match = compparms (p1, p2);
979 else
980 types_match = 0;
982 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
984 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
985 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
986 return 0;
988 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
989 DECL_TEMPLATE_PARMS (olddecl)))
990 return 0;
992 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
993 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
994 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
995 else
996 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
997 DECL_TEMPLATE_RESULT (newdecl));
999 else
1001 /* Need to check scope for variable declaration (VAR_DECL).
1002 For typedef (TYPE_DECL), scope is ignored. */
1003 if (TREE_CODE (newdecl) == VAR_DECL
1004 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1005 return 0;
1007 if (TREE_TYPE (newdecl) == error_mark_node)
1008 types_match = TREE_TYPE (olddecl) == error_mark_node;
1009 else if (TREE_TYPE (olddecl) == NULL_TREE)
1010 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1011 else if (TREE_TYPE (newdecl) == NULL_TREE)
1012 types_match = 0;
1013 else
1014 types_match = comptypes (TREE_TYPE (newdecl),
1015 TREE_TYPE (olddecl),
1016 COMPARE_REDECLARATION);
1019 return types_match;
1022 /* If NEWDECL is `static' and an `extern' was seen previously,
1023 warn about it. OLDDECL is the previous declaration.
1025 Note that this does not apply to the C++ case of declaring
1026 a variable `extern const' and then later `const'.
1028 Don't complain about built-in functions, since they are beyond
1029 the user's control. */
1031 void
1032 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1034 tree name;
1036 if (TREE_CODE (newdecl) == TYPE_DECL
1037 || TREE_CODE (newdecl) == TEMPLATE_DECL
1038 || TREE_CODE (newdecl) == CONST_DECL
1039 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1040 return;
1042 /* Don't get confused by static member functions; that's a different
1043 use of `static'. */
1044 if (TREE_CODE (newdecl) == FUNCTION_DECL
1045 && DECL_STATIC_FUNCTION_P (newdecl))
1046 return;
1048 /* If the old declaration was `static', or the new one isn't, then
1049 then everything is OK. */
1050 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1051 return;
1053 /* It's OK to declare a builtin function as `static'. */
1054 if (TREE_CODE (olddecl) == FUNCTION_DECL
1055 && DECL_ARTIFICIAL (olddecl))
1056 return;
1058 name = DECL_ASSEMBLER_NAME (newdecl);
1059 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1060 pedwarn ("previous declaration of %q+D", olddecl);
1063 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1064 function templates. If their exception specifications do not
1065 match, issue an a diagnostic. */
1067 static void
1068 check_redeclaration_exception_specification (tree new_decl,
1069 tree old_decl)
1071 tree new_type;
1072 tree old_type;
1073 tree new_exceptions;
1074 tree old_exceptions;
1076 new_type = TREE_TYPE (new_decl);
1077 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1078 old_type = TREE_TYPE (old_decl);
1079 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1081 /* [except.spec]
1083 If any declaration of a function has an exception-specification,
1084 all declarations, including the definition and an explicit
1085 specialization, of that function shall have an
1086 exception-specification with the same set of type-ids. */
1087 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1088 && ! DECL_IS_BUILTIN (old_decl)
1089 && flag_exceptions
1090 && !comp_except_specs (new_exceptions, old_exceptions,
1091 /*exact=*/true))
1093 error ("declaration of %qF throws different exceptions", new_decl);
1094 error ("from previous declaration %q+F", old_decl);
1098 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1099 If the redeclaration is invalid, a diagnostic is issued, and the
1100 error_mark_node is returned. Otherwise, OLDDECL is returned.
1102 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1103 returned.
1105 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1107 tree
1108 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1110 unsigned olddecl_uid = DECL_UID (olddecl);
1111 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1112 int new_defines_function = 0;
1113 tree new_template;
1115 if (newdecl == olddecl)
1116 return olddecl;
1118 types_match = decls_match (newdecl, olddecl);
1120 /* If either the type of the new decl or the type of the old decl is an
1121 error_mark_node, then that implies that we have already issued an
1122 error (earlier) for some bogus type specification, and in that case,
1123 it is rather pointless to harass the user with yet more error message
1124 about the same declaration, so just pretend the types match here. */
1125 if (TREE_TYPE (newdecl) == error_mark_node
1126 || TREE_TYPE (olddecl) == error_mark_node)
1127 types_match = 1;
1129 if (DECL_P (olddecl)
1130 && TREE_CODE (newdecl) == FUNCTION_DECL
1131 && TREE_CODE (olddecl) == FUNCTION_DECL
1132 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1134 if (DECL_DECLARED_INLINE_P (newdecl)
1135 && DECL_UNINLINABLE (newdecl)
1136 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1137 /* Already warned elsewhere. */;
1138 else if (DECL_DECLARED_INLINE_P (olddecl)
1139 && DECL_UNINLINABLE (olddecl)
1140 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1141 /* Already warned. */;
1142 else if (DECL_DECLARED_INLINE_P (newdecl)
1143 && DECL_UNINLINABLE (olddecl)
1144 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1146 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1147 newdecl);
1148 warning (OPT_Wattributes, "previous declaration of %q+D "
1149 "with attribute noinline", olddecl);
1151 else if (DECL_DECLARED_INLINE_P (olddecl)
1152 && DECL_UNINLINABLE (newdecl)
1153 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1155 warning (OPT_Wattributes, "function %q+D redeclared with "
1156 "attribute noinline", newdecl);
1157 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1158 olddecl);
1162 /* Check for redeclaration and other discrepancies. */
1163 if (TREE_CODE (olddecl) == FUNCTION_DECL
1164 && DECL_ARTIFICIAL (olddecl))
1166 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1167 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1169 /* Avoid warnings redeclaring built-ins which have not been
1170 explicitly declared. */
1171 if (DECL_ANTICIPATED (olddecl))
1172 return NULL_TREE;
1174 /* If you declare a built-in or predefined function name as static,
1175 the old definition is overridden, but optionally warn this was a
1176 bad choice of name. */
1177 if (! TREE_PUBLIC (newdecl))
1179 warning (OPT_Wshadow, "shadowing %s function %q#D",
1180 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1181 olddecl);
1182 /* Discard the old built-in function. */
1183 return NULL_TREE;
1185 /* If the built-in is not ansi, then programs can override
1186 it even globally without an error. */
1187 else if (! DECL_BUILT_IN (olddecl))
1188 warning (0, "library function %q#D redeclared as non-function %q#D",
1189 olddecl, newdecl);
1190 else
1192 error ("declaration of %q#D", newdecl);
1193 error ("conflicts with built-in declaration %q#D",
1194 olddecl);
1196 return NULL_TREE;
1198 else if (!types_match)
1200 /* Avoid warnings redeclaring built-ins which have not been
1201 explicitly declared. */
1202 if (DECL_ANTICIPATED (olddecl))
1204 /* Deal with fileptr_type_node. FILE type is not known
1205 at the time we create the builtins. */
1206 tree t1, t2;
1208 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1209 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1210 t1 || t2;
1211 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1212 if (!t1 || !t2)
1213 break;
1214 else if (TREE_VALUE (t2) == fileptr_type_node)
1216 tree t = TREE_VALUE (t1);
1218 if (TREE_CODE (t) == POINTER_TYPE
1219 && TYPE_NAME (TREE_TYPE (t))
1220 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1221 == get_identifier ("FILE")
1222 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1224 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1226 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1227 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1228 types_match = decls_match (newdecl, olddecl);
1229 if (types_match)
1230 return duplicate_decls (newdecl, olddecl,
1231 newdecl_is_friend);
1232 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1235 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1236 break;
1238 else if ((DECL_EXTERN_C_P (newdecl)
1239 && DECL_EXTERN_C_P (olddecl))
1240 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1241 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1243 /* A near match; override the builtin. */
1245 if (TREE_PUBLIC (newdecl))
1247 warning (0, "new declaration %q#D", newdecl);
1248 warning (0, "ambiguates built-in declaration %q#D",
1249 olddecl);
1251 else
1252 warning (OPT_Wshadow, "shadowing %s function %q#D",
1253 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1254 olddecl);
1256 else
1257 /* Discard the old built-in function. */
1258 return NULL_TREE;
1260 /* Replace the old RTL to avoid problems with inlining. */
1261 COPY_DECL_RTL (newdecl, olddecl);
1263 /* Even if the types match, prefer the new declarations type for
1264 built-ins which have not been explicitly declared, for
1265 exception lists, etc... */
1266 else if (DECL_ANTICIPATED (olddecl))
1268 tree type = TREE_TYPE (newdecl);
1269 tree attribs = (*targetm.merge_type_attributes)
1270 (TREE_TYPE (olddecl), type);
1272 type = cp_build_type_attribute_variant (type, attribs);
1273 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1276 /* Whether or not the builtin can throw exceptions has no
1277 bearing on this declarator. */
1278 TREE_NOTHROW (olddecl) = 0;
1280 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1282 /* If a builtin function is redeclared as `static', merge
1283 the declarations, but make the original one static. */
1284 DECL_THIS_STATIC (olddecl) = 1;
1285 TREE_PUBLIC (olddecl) = 0;
1287 /* Make the old declaration consistent with the new one so
1288 that all remnants of the builtin-ness of this function
1289 will be banished. */
1290 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1291 COPY_DECL_RTL (newdecl, olddecl);
1294 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1296 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1297 && TREE_CODE (newdecl) != TYPE_DECL
1298 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1299 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1300 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1301 && TREE_CODE (olddecl) != TYPE_DECL
1302 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1303 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1304 == TYPE_DECL))))
1306 /* We do nothing special here, because C++ does such nasty
1307 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1308 get shadowed, and know that if we need to find a TYPE_DECL
1309 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1310 slot of the identifier. */
1311 return NULL_TREE;
1314 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1315 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1316 || (TREE_CODE (olddecl) == FUNCTION_DECL
1317 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1318 return NULL_TREE;
1320 error ("%q#D redeclared as different kind of symbol", newdecl);
1321 if (TREE_CODE (olddecl) == TREE_LIST)
1322 olddecl = TREE_VALUE (olddecl);
1323 error ("previous declaration of %q+#D", olddecl);
1325 return error_mark_node;
1327 else if (!types_match)
1329 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1330 /* These are certainly not duplicate declarations; they're
1331 from different scopes. */
1332 return NULL_TREE;
1334 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1336 /* The name of a class template may not be declared to refer to
1337 any other template, class, function, object, namespace, value,
1338 or type in the same scope. */
1339 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1340 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1342 error ("declaration of template %q#D", newdecl);
1343 error ("conflicts with previous declaration %q+#D", olddecl);
1345 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1346 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1347 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1348 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1349 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1350 DECL_TEMPLATE_PARMS (olddecl))
1351 /* Template functions can be disambiguated by
1352 return type. */
1353 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1354 TREE_TYPE (TREE_TYPE (olddecl))))
1356 error ("new declaration %q#D", newdecl);
1357 error ("ambiguates old declaration %q+#D", olddecl);
1359 return NULL_TREE;
1361 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1363 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1365 error ("declaration of C function %q#D conflicts with",
1366 newdecl);
1367 error ("previous declaration %q+#D here", olddecl);
1369 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1370 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1372 error ("new declaration %q#D", newdecl);
1373 error ("ambiguates old declaration %q+#D", olddecl);
1375 else
1376 return NULL_TREE;
1378 else
1380 error ("conflicting declaration %q#D", newdecl);
1381 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1382 return error_mark_node;
1385 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1386 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1387 && (!DECL_TEMPLATE_INFO (newdecl)
1388 || (DECL_TI_TEMPLATE (newdecl)
1389 != DECL_TI_TEMPLATE (olddecl))))
1390 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1391 && (!DECL_TEMPLATE_INFO (olddecl)
1392 || (DECL_TI_TEMPLATE (olddecl)
1393 != DECL_TI_TEMPLATE (newdecl))))))
1394 /* It's OK to have a template specialization and a non-template
1395 with the same type, or to have specializations of two
1396 different templates with the same type. Note that if one is a
1397 specialization, and the other is an instantiation of the same
1398 template, that we do not exit at this point. That situation
1399 can occur if we instantiate a template class, and then
1400 specialize one of its methods. This situation is valid, but
1401 the declarations must be merged in the usual way. */
1402 return NULL_TREE;
1403 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1404 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1405 && !DECL_USE_TEMPLATE (newdecl))
1406 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1407 && !DECL_USE_TEMPLATE (olddecl))))
1408 /* One of the declarations is a template instantiation, and the
1409 other is not a template at all. That's OK. */
1410 return NULL_TREE;
1411 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1413 /* In [namespace.alias] we have:
1415 In a declarative region, a namespace-alias-definition can be
1416 used to redefine a namespace-alias declared in that declarative
1417 region to refer only to the namespace to which it already
1418 refers.
1420 Therefore, if we encounter a second alias directive for the same
1421 alias, we can just ignore the second directive. */
1422 if (DECL_NAMESPACE_ALIAS (newdecl)
1423 && (DECL_NAMESPACE_ALIAS (newdecl)
1424 == DECL_NAMESPACE_ALIAS (olddecl)))
1425 return olddecl;
1426 /* [namespace.alias]
1428 A namespace-name or namespace-alias shall not be declared as
1429 the name of any other entity in the same declarative region.
1430 A namespace-name defined at global scope shall not be
1431 declared as the name of any other entity in any global scope
1432 of the program. */
1433 error ("declaration of namespace %qD conflicts with", newdecl);
1434 error ("previous declaration of namespace %q+D here", olddecl);
1435 return error_mark_node;
1437 else
1439 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1440 if (errmsg)
1442 error (errmsg, newdecl);
1443 if (DECL_NAME (olddecl) != NULL_TREE)
1444 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1445 ? "%q+#D previously defined here"
1446 : "%q+#D previously declared here", olddecl);
1447 return error_mark_node;
1449 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1450 && DECL_INITIAL (olddecl) != NULL_TREE
1451 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1452 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1454 /* Prototype decl follows defn w/o prototype. */
1455 warning (0, "prototype for %q+#D", newdecl);
1456 warning (0, "%Jfollows non-prototype definition here", olddecl);
1458 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1459 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1461 /* extern "C" int foo ();
1462 int foo () { bar (); }
1463 is OK. */
1464 if (current_lang_depth () == 0)
1465 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1466 else
1468 error ("previous declaration of %q+#D with %qL linkage",
1469 olddecl, DECL_LANGUAGE (olddecl));
1470 error ("conflicts with new declaration with %qL linkage",
1471 DECL_LANGUAGE (newdecl));
1475 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1477 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1479 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1480 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1481 int i = 1;
1483 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1484 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1486 for (; t1 && t1 != void_list_node;
1487 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1488 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1490 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1491 TREE_PURPOSE (t2)))
1493 pedwarn ("default argument given for parameter %d of %q#D",
1494 i, newdecl);
1495 pedwarn ("after previous specification in %q+#D", olddecl);
1497 else
1499 error ("default argument given for parameter %d of %q#D",
1500 i, newdecl);
1501 error ("after previous specification in %q+#D",
1502 olddecl);
1506 if (DECL_DECLARED_INLINE_P (newdecl)
1507 && ! DECL_DECLARED_INLINE_P (olddecl)
1508 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1510 warning (0, "%q#D was used before it was declared inline", newdecl);
1511 warning (0, "%Jprevious non-inline declaration here", olddecl);
1516 /* Do not merge an implicit typedef with an explicit one. In:
1518 class A;
1520 typedef class A A __attribute__ ((foo));
1522 the attribute should apply only to the typedef. */
1523 if (TREE_CODE (olddecl) == TYPE_DECL
1524 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1525 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1526 return NULL_TREE;
1528 /* If new decl is `static' and an `extern' was seen previously,
1529 warn about it. */
1530 warn_extern_redeclared_static (newdecl, olddecl);
1532 /* We have committed to returning 1 at this point. */
1533 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1535 /* Now that functions must hold information normally held
1536 by field decls, there is extra work to do so that
1537 declaration information does not get destroyed during
1538 definition. */
1539 if (DECL_VINDEX (olddecl))
1540 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1541 if (DECL_CONTEXT (olddecl))
1542 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1543 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1544 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1545 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1546 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1547 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1548 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1549 SET_OVERLOADED_OPERATOR_CODE
1550 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1551 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1553 /* Optionally warn about more than one declaration for the same
1554 name, but don't warn about a function declaration followed by a
1555 definition. */
1556 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1557 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1558 /* Don't warn about extern decl followed by definition. */
1559 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1560 /* Don't warn about friends, let add_friend take care of it. */
1561 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1563 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1564 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1568 /* Deal with C++: must preserve virtual function table size. */
1569 if (TREE_CODE (olddecl) == TYPE_DECL)
1571 tree newtype = TREE_TYPE (newdecl);
1572 tree oldtype = TREE_TYPE (olddecl);
1574 if (newtype != error_mark_node && oldtype != error_mark_node
1575 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1576 CLASSTYPE_FRIEND_CLASSES (newtype)
1577 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1579 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1582 /* Copy all the DECL_... slots specified in the new decl
1583 except for any that we copy here from the old type. */
1584 DECL_ATTRIBUTES (newdecl)
1585 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1587 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1589 tree old_result;
1590 tree new_result;
1591 old_result = DECL_TEMPLATE_RESULT (olddecl);
1592 new_result = DECL_TEMPLATE_RESULT (newdecl);
1593 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1594 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1595 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1596 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1598 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1600 DECL_INLINE (old_result)
1601 |= DECL_INLINE (new_result);
1602 DECL_DECLARED_INLINE_P (old_result)
1603 |= DECL_DECLARED_INLINE_P (new_result);
1604 check_redeclaration_exception_specification (newdecl, olddecl);
1607 /* If the new declaration is a definition, update the file and
1608 line information on the declaration. */
1609 if (DECL_INITIAL (old_result) == NULL_TREE
1610 && DECL_INITIAL (new_result) != NULL_TREE)
1612 DECL_SOURCE_LOCATION (olddecl)
1613 = DECL_SOURCE_LOCATION (old_result)
1614 = DECL_SOURCE_LOCATION (newdecl);
1615 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1616 DECL_ARGUMENTS (old_result)
1617 = DECL_ARGUMENTS (new_result);
1620 return olddecl;
1623 if (types_match)
1625 /* Automatically handles default parameters. */
1626 tree oldtype = TREE_TYPE (olddecl);
1627 tree newtype;
1629 /* Merge the data types specified in the two decls. */
1630 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1632 /* If merge_types produces a non-typedef type, just use the old type. */
1633 if (TREE_CODE (newdecl) == TYPE_DECL
1634 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1635 newtype = oldtype;
1637 if (TREE_CODE (newdecl) == VAR_DECL)
1639 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1640 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1641 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1642 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1643 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1644 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1646 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1647 if (DECL_LANG_SPECIFIC (olddecl)
1648 && CP_DECL_THREADPRIVATE_P (olddecl))
1650 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1651 if (!DECL_LANG_SPECIFIC (newdecl))
1652 retrofit_lang_decl (newdecl);
1654 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1655 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1659 /* Do this after calling `merge_types' so that default
1660 parameters don't confuse us. */
1661 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1662 check_redeclaration_exception_specification (newdecl, olddecl);
1663 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1665 /* Lay the type out, unless already done. */
1666 if (! same_type_p (newtype, oldtype)
1667 && TREE_TYPE (newdecl) != error_mark_node
1668 && !(processing_template_decl && uses_template_parms (newdecl)))
1669 layout_type (TREE_TYPE (newdecl));
1671 if ((TREE_CODE (newdecl) == VAR_DECL
1672 || TREE_CODE (newdecl) == PARM_DECL
1673 || TREE_CODE (newdecl) == RESULT_DECL
1674 || TREE_CODE (newdecl) == FIELD_DECL
1675 || TREE_CODE (newdecl) == TYPE_DECL)
1676 && !(processing_template_decl && uses_template_parms (newdecl)))
1677 layout_decl (newdecl, 0);
1679 /* Merge the type qualifiers. */
1680 if (TREE_READONLY (newdecl))
1681 TREE_READONLY (olddecl) = 1;
1682 if (TREE_THIS_VOLATILE (newdecl))
1683 TREE_THIS_VOLATILE (olddecl) = 1;
1684 if (TREE_NOTHROW (newdecl))
1685 TREE_NOTHROW (olddecl) = 1;
1687 /* Merge deprecatedness. */
1688 if (TREE_DEPRECATED (newdecl))
1689 TREE_DEPRECATED (olddecl) = 1;
1691 /* Merge the initialization information. */
1692 if (DECL_INITIAL (newdecl) == NULL_TREE
1693 && DECL_INITIAL (olddecl) != NULL_TREE)
1695 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1696 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1697 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1698 && DECL_LANG_SPECIFIC (newdecl)
1699 && DECL_LANG_SPECIFIC (olddecl))
1701 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1702 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1706 /* Merge the section attribute.
1707 We want to issue an error if the sections conflict but that must be
1708 done later in decl_attributes since we are called before attributes
1709 are assigned. */
1710 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1711 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1713 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1715 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1716 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1717 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1718 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1719 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1720 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1721 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1722 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1723 /* Keep the old RTL. */
1724 COPY_DECL_RTL (olddecl, newdecl);
1726 else if (TREE_CODE (newdecl) == VAR_DECL
1727 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1729 /* Keep the old RTL. We cannot keep the old RTL if the old
1730 declaration was for an incomplete object and the new
1731 declaration is not since many attributes of the RTL will
1732 change. */
1733 COPY_DECL_RTL (olddecl, newdecl);
1736 /* If cannot merge, then use the new type and qualifiers,
1737 and don't preserve the old rtl. */
1738 else
1740 /* Clean out any memory we had of the old declaration. */
1741 tree oldstatic = value_member (olddecl, static_aggregates);
1742 if (oldstatic)
1743 TREE_VALUE (oldstatic) = error_mark_node;
1745 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1746 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1747 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1748 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1751 /* Merge the storage class information. */
1752 merge_weak (newdecl, olddecl);
1754 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1755 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1756 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1757 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1758 if (! DECL_EXTERNAL (olddecl))
1759 DECL_EXTERNAL (newdecl) = 0;
1761 new_template = NULL_TREE;
1762 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1764 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1765 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1766 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1767 DECL_TEMPLATE_INSTANTIATED (newdecl)
1768 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1770 /* If the OLDDECL is an instantiation and/or specialization,
1771 then the NEWDECL must be too. But, it may not yet be marked
1772 as such if the caller has created NEWDECL, but has not yet
1773 figured out that it is a redeclaration. */
1774 if (!DECL_USE_TEMPLATE (newdecl))
1775 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1777 /* Don't really know how much of the language-specific
1778 values we should copy from old to new. */
1779 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1780 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1781 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1782 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1783 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1784 if (DECL_TEMPLATE_INFO (newdecl))
1785 new_template = DECL_TI_TEMPLATE (newdecl);
1786 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1787 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1788 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1789 olddecl_friend = DECL_FRIEND_P (olddecl);
1790 hidden_friend = (DECL_ANTICIPATED (olddecl)
1791 && DECL_HIDDEN_FRIEND_P (olddecl)
1792 && newdecl_is_friend);
1794 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1795 if (TREE_CODE (newdecl) == FUNCTION_DECL
1796 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1798 DECL_BEFRIENDING_CLASSES (newdecl)
1799 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1800 DECL_BEFRIENDING_CLASSES (olddecl));
1801 /* DECL_THUNKS is only valid for virtual functions,
1802 otherwise it is a DECL_FRIEND_CONTEXT. */
1803 if (DECL_VIRTUAL_P (newdecl))
1804 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1808 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1810 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1811 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1813 /* If newdecl is not a specialization, then it is not a
1814 template-related function at all. And that means that we
1815 should have exited above, returning 0. */
1816 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1818 if (TREE_USED (olddecl))
1819 /* From [temp.expl.spec]:
1821 If a template, a member template or the member of a class
1822 template is explicitly specialized then that
1823 specialization shall be declared before the first use of
1824 that specialization that would cause an implicit
1825 instantiation to take place, in every translation unit in
1826 which such a use occurs. */
1827 error ("explicit specialization of %qD after first use",
1828 olddecl);
1830 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1832 /* [temp.expl.spec/14] We don't inline explicit specialization
1833 just because the primary template says so. */
1835 else
1837 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1838 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1840 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1842 /* If either decl says `inline', this fn is inline, unless
1843 its definition was passed already. */
1844 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1845 DECL_INLINE (olddecl) = 1;
1846 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1848 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1849 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1852 /* Preserve abstractness on cloned [cd]tors. */
1853 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1855 if (! types_match)
1857 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1858 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1859 COPY_DECL_RTL (newdecl, olddecl);
1861 if (! types_match || new_defines_function)
1863 /* These need to be copied so that the names are available.
1864 Note that if the types do match, we'll preserve inline
1865 info and other bits, but if not, we won't. */
1866 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1867 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1869 if (new_defines_function)
1870 /* If defining a function declared with other language
1871 linkage, use the previously declared language linkage. */
1872 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1873 else if (types_match)
1875 /* If redeclaring a builtin function, and not a definition,
1876 it stays built in. */
1877 if (DECL_BUILT_IN (olddecl))
1879 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1880 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1881 /* If we're keeping the built-in definition, keep the rtl,
1882 regardless of declaration matches. */
1883 COPY_DECL_RTL (olddecl, newdecl);
1886 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1887 /* Don't clear out the arguments if we're redefining a function. */
1888 if (DECL_ARGUMENTS (olddecl))
1889 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1892 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1893 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1895 /* Now preserve various other info from the definition. */
1896 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1897 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1898 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1899 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1901 /* Warn about conflicting visibility specifications. */
1902 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1903 && DECL_VISIBILITY_SPECIFIED (newdecl)
1904 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1906 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
1907 "because it", newdecl);
1908 warning (OPT_Wattributes, "%Jconflicts with previous "
1909 "declaration here", olddecl);
1911 /* Choose the declaration which specified visibility. */
1912 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1914 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1915 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1917 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
1918 so keep this behavior. */
1919 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
1921 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
1922 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
1925 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1926 with that from NEWDECL below. */
1927 if (DECL_LANG_SPECIFIC (olddecl))
1929 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1930 != DECL_LANG_SPECIFIC (newdecl));
1931 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1934 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1936 int function_size;
1938 function_size = sizeof (struct tree_decl_common);
1940 memcpy ((char *) olddecl + sizeof (struct tree_common),
1941 (char *) newdecl + sizeof (struct tree_common),
1942 function_size - sizeof (struct tree_common));
1944 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1945 (char *) newdecl + sizeof (struct tree_decl_common),
1946 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
1947 if (new_template)
1948 /* If newdecl is a template instantiation, it is possible that
1949 the following sequence of events has occurred:
1951 o A friend function was declared in a class template. The
1952 class template was instantiated.
1954 o The instantiation of the friend declaration was
1955 recorded on the instantiation list, and is newdecl.
1957 o Later, however, instantiate_class_template called pushdecl
1958 on the newdecl to perform name injection. But, pushdecl in
1959 turn called duplicate_decls when it discovered that another
1960 declaration of a global function with the same name already
1961 existed.
1963 o Here, in duplicate_decls, we decided to clobber newdecl.
1965 If we're going to do that, we'd better make sure that
1966 olddecl, and not newdecl, is on the list of
1967 instantiations so that if we try to do the instantiation
1968 again we won't get the clobbered declaration. */
1969 reregister_specialization (newdecl,
1970 new_template,
1971 olddecl);
1973 else
1975 size_t size = tree_code_size (TREE_CODE (olddecl));
1976 memcpy ((char *) olddecl + sizeof (struct tree_common),
1977 (char *) newdecl + sizeof (struct tree_common),
1978 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
1979 switch (TREE_CODE (olddecl))
1981 case LABEL_DECL:
1982 case VAR_DECL:
1983 case RESULT_DECL:
1984 case PARM_DECL:
1985 case FIELD_DECL:
1986 case TYPE_DECL:
1987 case CONST_DECL:
1989 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1990 (char *) newdecl + sizeof (struct tree_decl_common),
1991 size - sizeof (struct tree_decl_common)
1992 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1994 break;
1995 default:
1996 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1997 (char *) newdecl + sizeof (struct tree_decl_common),
1998 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
1999 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2000 break;
2003 DECL_UID (olddecl) = olddecl_uid;
2004 if (olddecl_friend)
2005 DECL_FRIEND_P (olddecl) = 1;
2006 if (hidden_friend)
2008 DECL_ANTICIPATED (olddecl) = 1;
2009 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2012 /* NEWDECL contains the merged attribute lists.
2013 Update OLDDECL to be the same. */
2014 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2016 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2017 so that encode_section_info has a chance to look at the new decl
2018 flags and attributes. */
2019 if (DECL_RTL_SET_P (olddecl)
2020 && (TREE_CODE (olddecl) == FUNCTION_DECL
2021 || (TREE_CODE (olddecl) == VAR_DECL
2022 && TREE_STATIC (olddecl))))
2023 make_decl_rtl (olddecl);
2025 /* The NEWDECL will no longer be needed. Because every out-of-class
2026 declaration of a member results in a call to duplicate_decls,
2027 freeing these nodes represents in a significant savings. */
2028 ggc_free (newdecl);
2030 return olddecl;
2033 /* Return zero if the declaration NEWDECL is valid
2034 when the declaration OLDDECL (assumed to be for the same name)
2035 has already been seen.
2036 Otherwise return an error message format string with a %s
2037 where the identifier should go. */
2039 static const char *
2040 redeclaration_error_message (tree newdecl, tree olddecl)
2042 if (TREE_CODE (newdecl) == TYPE_DECL)
2044 /* Because C++ can put things into name space for free,
2045 constructs like "typedef struct foo { ... } foo"
2046 would look like an erroneous redeclaration. */
2047 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2048 return NULL;
2049 else
2050 return "redefinition of %q#D";
2052 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2054 /* If this is a pure function, its olddecl will actually be
2055 the original initialization to `0' (which we force to call
2056 abort()). Don't complain about redefinition in this case. */
2057 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2058 && DECL_INITIAL (olddecl) == NULL_TREE)
2059 return NULL;
2061 /* If both functions come from different namespaces, this is not
2062 a redeclaration - this is a conflict with a used function. */
2063 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2064 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2065 && ! decls_match (olddecl, newdecl))
2066 return "%qD conflicts with used function";
2068 /* We'll complain about linkage mismatches in
2069 warn_extern_redeclared_static. */
2071 /* Defining the same name twice is no good. */
2072 if (DECL_INITIAL (olddecl) != NULL_TREE
2073 && DECL_INITIAL (newdecl) != NULL_TREE)
2075 if (DECL_NAME (olddecl) == NULL_TREE)
2076 return "%q#D not declared in class";
2077 else
2078 return "redefinition of %q#D";
2080 return NULL;
2082 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2084 tree nt, ot;
2086 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2088 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2089 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2090 return "redefinition of %q#D";
2091 return NULL;
2094 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2095 || (DECL_TEMPLATE_RESULT (newdecl)
2096 == DECL_TEMPLATE_RESULT (olddecl)))
2097 return NULL;
2099 nt = DECL_TEMPLATE_RESULT (newdecl);
2100 if (DECL_TEMPLATE_INFO (nt))
2101 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2102 ot = DECL_TEMPLATE_RESULT (olddecl);
2103 if (DECL_TEMPLATE_INFO (ot))
2104 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2105 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2106 return "redefinition of %q#D";
2108 return NULL;
2110 else if (TREE_CODE (newdecl) == VAR_DECL
2111 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2112 && (! DECL_LANG_SPECIFIC (olddecl)
2113 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2114 || DECL_THREAD_LOCAL_P (newdecl)))
2116 /* Only variables can be thread-local, and all declarations must
2117 agree on this property. */
2118 if (DECL_THREAD_LOCAL_P (newdecl))
2119 return "thread-local declaration of %q#D follows "
2120 "non-thread-local declaration";
2121 else
2122 return "non-thread-local declaration of %q#D follows "
2123 "thread-local declaration";
2125 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2127 /* Objects declared at top level: */
2128 /* If at least one is a reference, it's ok. */
2129 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2130 return NULL;
2131 /* Reject two definitions. */
2132 return "redefinition of %q#D";
2134 else
2136 /* Objects declared with block scope: */
2137 /* Reject two definitions, and reject a definition
2138 together with an external reference. */
2139 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2140 return "redeclaration of %q#D";
2141 return NULL;
2145 /* Hash and equality functions for the named_label table. */
2147 static hashval_t
2148 named_label_entry_hash (const void *data)
2150 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2151 return DECL_UID (ent->label_decl);
2154 static int
2155 named_label_entry_eq (const void *a, const void *b)
2157 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2158 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2159 return ent_a->label_decl == ent_b->label_decl;
2162 /* Create a new label, named ID. */
2164 static tree
2165 make_label_decl (tree id, int local_p)
2167 struct named_label_entry *ent;
2168 void **slot;
2169 tree decl;
2171 decl = build_decl (LABEL_DECL, id, void_type_node);
2173 DECL_CONTEXT (decl) = current_function_decl;
2174 DECL_MODE (decl) = VOIDmode;
2175 C_DECLARED_LABEL_FLAG (decl) = local_p;
2177 /* Say where one reference is to the label, for the sake of the
2178 error if it is not defined. */
2179 DECL_SOURCE_LOCATION (decl) = input_location;
2181 /* Record the fact that this identifier is bound to this label. */
2182 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2184 /* Create the label htab for the function on demand. */
2185 if (!named_labels)
2186 named_labels = htab_create_ggc (13, named_label_entry_hash,
2187 named_label_entry_eq, NULL);
2189 /* Record this label on the list of labels used in this function.
2190 We do this before calling make_label_decl so that we get the
2191 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2192 ent = GGC_CNEW (struct named_label_entry);
2193 ent->label_decl = decl;
2195 slot = htab_find_slot (named_labels, ent, INSERT);
2196 gcc_assert (*slot == NULL);
2197 *slot = ent;
2199 return decl;
2202 /* Look for a label named ID in the current function. If one cannot
2203 be found, create one. (We keep track of used, but undefined,
2204 labels, and complain about them at the end of a function.) */
2206 tree
2207 lookup_label (tree id)
2209 tree decl;
2211 timevar_push (TV_NAME_LOOKUP);
2212 /* You can't use labels at global scope. */
2213 if (current_function_decl == NULL_TREE)
2215 error ("label %qE referenced outside of any function", id);
2216 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2219 /* See if we've already got this label. */
2220 decl = IDENTIFIER_LABEL_VALUE (id);
2221 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2222 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2224 decl = make_label_decl (id, /*local_p=*/0);
2225 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2228 /* Declare a local label named ID. */
2230 tree
2231 declare_local_label (tree id)
2233 tree decl, shadow;
2235 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2236 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2237 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2238 current_binding_level->shadowed_labels);
2239 current_binding_level->shadowed_labels = shadow;
2241 decl = make_label_decl (id, /*local_p=*/1);
2242 TREE_VALUE (shadow) = decl;
2244 return decl;
2247 /* Returns nonzero if it is ill-formed to jump past the declaration of
2248 DECL. Returns 2 if it's also a real problem. */
2250 static int
2251 decl_jump_unsafe (tree decl)
2253 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2254 || TREE_TYPE (decl) == error_mark_node)
2255 return 0;
2257 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2258 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2259 return 2;
2261 if (pod_type_p (TREE_TYPE (decl)))
2262 return 0;
2264 /* The POD stuff is just pedantry; why should it matter if the class
2265 contains a field of pointer to member type? */
2266 return 1;
2269 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2271 static void
2272 identify_goto (tree decl, const location_t *locus)
2274 if (decl)
2275 pedwarn ("jump to label %qD", decl);
2276 else
2277 pedwarn ("jump to case label");
2278 if (locus)
2279 pedwarn ("%H from here", locus);
2282 /* Check that a single previously seen jump to a newly defined label
2283 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2284 the jump context; NAMES are the names in scope in LEVEL at the jump
2285 context; LOCUS is the source position of the jump or 0. Returns
2286 true if all is well. */
2288 static bool
2289 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2290 bool exited_omp, const location_t *locus)
2292 struct cp_binding_level *b;
2293 bool identified = false, saw_eh = false, saw_omp = false;
2295 if (exited_omp)
2297 identify_goto (decl, locus);
2298 error (" exits OpenMP structured block");
2299 identified = saw_omp = true;
2302 for (b = current_binding_level; b ; b = b->level_chain)
2304 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2306 for (new_decls = b->names; new_decls != old_decls;
2307 new_decls = TREE_CHAIN (new_decls))
2309 int problem = decl_jump_unsafe (new_decls);
2310 if (! problem)
2311 continue;
2313 if (!identified)
2315 identify_goto (decl, locus);
2316 identified = true;
2318 if (problem > 1)
2319 error (" crosses initialization of %q+#D", new_decls);
2320 else
2321 pedwarn (" enters scope of non-POD %q+#D", new_decls);
2324 if (b == level)
2325 break;
2326 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2328 if (!identified)
2330 identify_goto (decl, locus);
2331 identified = true;
2333 if (b->kind == sk_try)
2334 error (" enters try block");
2335 else
2336 error (" enters catch block");
2337 saw_eh = true;
2339 if (b->kind == sk_omp && !saw_omp)
2341 if (!identified)
2343 identify_goto (decl, locus);
2344 identified = true;
2346 error (" enters OpenMP structured block");
2347 saw_omp = true;
2351 return !identified;
2354 static void
2355 check_previous_goto (tree decl, struct named_label_use_entry *use)
2357 check_previous_goto_1 (decl, use->binding_level,
2358 use->names_in_scope, use->in_omp_scope,
2359 &use->o_goto_locus);
2362 static bool
2363 check_switch_goto (struct cp_binding_level* level)
2365 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2368 /* Check that a new jump to a label DECL is OK. Called by
2369 finish_goto_stmt. */
2371 void
2372 check_goto (tree decl)
2374 struct named_label_entry *ent, dummy;
2375 bool saw_catch = false, identified = false;
2376 tree bad;
2378 /* We can't know where a computed goto is jumping.
2379 So we assume that it's OK. */
2380 if (TREE_CODE (decl) != LABEL_DECL)
2381 return;
2383 /* We didn't record any information about this label when we created it,
2384 and there's not much point since it's trivial to analyze as a return. */
2385 if (decl == cdtor_label)
2386 return;
2388 dummy.label_decl = decl;
2389 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2390 gcc_assert (ent != NULL);
2392 /* If the label hasn't been defined yet, defer checking. */
2393 if (! DECL_INITIAL (decl))
2395 struct named_label_use_entry *new_use;
2397 /* Don't bother creating another use if the last goto had the
2398 same data, and will therefore create the same set of errors. */
2399 if (ent->uses
2400 && ent->uses->names_in_scope == current_binding_level->names)
2401 return;
2403 new_use = GGC_NEW (struct named_label_use_entry);
2404 new_use->binding_level = current_binding_level;
2405 new_use->names_in_scope = current_binding_level->names;
2406 new_use->o_goto_locus = input_location;
2407 new_use->in_omp_scope = false;
2409 new_use->next = ent->uses;
2410 ent->uses = new_use;
2411 return;
2414 if (ent->in_try_scope || ent->in_catch_scope
2415 || ent->in_omp_scope || ent->bad_decls)
2417 pedwarn ("jump to label %q+D", decl);
2418 pedwarn (" from here");
2419 identified = true;
2422 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2424 tree b = TREE_VALUE (bad);
2425 int u = decl_jump_unsafe (b);
2427 if (u > 1 && DECL_ARTIFICIAL (b))
2429 /* Can't skip init of __exception_info. */
2430 error ("%J enters catch block", b);
2431 saw_catch = true;
2433 else if (u > 1)
2434 error (" skips initialization of %q+#D", b);
2435 else
2436 pedwarn (" enters scope of non-POD %q+#D", b);
2439 if (ent->in_try_scope)
2440 error (" enters try block");
2441 else if (ent->in_catch_scope && !saw_catch)
2442 error (" enters catch block");
2444 if (ent->in_omp_scope)
2445 error (" enters OpenMP structured block");
2446 else if (flag_openmp)
2448 struct cp_binding_level *b;
2449 for (b = current_binding_level; b ; b = b->level_chain)
2451 if (b == ent->binding_level)
2452 break;
2453 if (b->kind == sk_omp)
2455 if (!identified)
2457 pedwarn ("jump to label %q+D", decl);
2458 pedwarn (" from here");
2459 identified = true;
2461 error (" exits OpenMP structured block");
2462 break;
2468 /* Check that a return is ok wrt OpenMP structured blocks.
2469 Called by finish_return_stmt. Returns true if all is well. */
2471 bool
2472 check_omp_return (void)
2474 struct cp_binding_level *b;
2475 for (b = current_binding_level; b ; b = b->level_chain)
2476 if (b->kind == sk_omp)
2478 error ("invalid exit from OpenMP structured block");
2479 return false;
2481 return true;
2484 /* Define a label, specifying the location in the source file.
2485 Return the LABEL_DECL node for the label. */
2487 tree
2488 define_label (location_t location, tree name)
2490 struct named_label_entry *ent, dummy;
2491 struct cp_binding_level *p;
2492 tree decl;
2494 timevar_push (TV_NAME_LOOKUP);
2496 decl = lookup_label (name);
2498 dummy.label_decl = decl;
2499 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2500 gcc_assert (ent != NULL);
2502 /* After labels, make any new cleanups in the function go into their
2503 own new (temporary) binding contour. */
2504 for (p = current_binding_level;
2505 p->kind != sk_function_parms;
2506 p = p->level_chain)
2507 p->more_cleanups_ok = 0;
2509 if (name == get_identifier ("wchar_t"))
2510 pedwarn ("label named wchar_t");
2512 if (DECL_INITIAL (decl) != NULL_TREE)
2513 error ("duplicate label %qD", decl);
2514 else
2516 struct named_label_use_entry *use;
2518 /* Mark label as having been defined. */
2519 DECL_INITIAL (decl) = error_mark_node;
2520 /* Say where in the source. */
2521 DECL_SOURCE_LOCATION (decl) = location;
2523 ent->binding_level = current_binding_level;
2524 ent->names_in_scope = current_binding_level->names;
2526 for (use = ent->uses; use ; use = use->next)
2527 check_previous_goto (decl, use);
2528 ent->uses = NULL;
2531 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2534 struct cp_switch
2536 struct cp_binding_level *level;
2537 struct cp_switch *next;
2538 /* The SWITCH_STMT being built. */
2539 tree switch_stmt;
2540 /* A splay-tree mapping the low element of a case range to the high
2541 element, or NULL_TREE if there is no high element. Used to
2542 determine whether or not a new case label duplicates an old case
2543 label. We need a tree, rather than simply a hash table, because
2544 of the GNU case range extension. */
2545 splay_tree cases;
2548 /* A stack of the currently active switch statements. The innermost
2549 switch statement is on the top of the stack. There is no need to
2550 mark the stack for garbage collection because it is only active
2551 during the processing of the body of a function, and we never
2552 collect at that point. */
2554 static struct cp_switch *switch_stack;
2556 /* Called right after a switch-statement condition is parsed.
2557 SWITCH_STMT is the switch statement being parsed. */
2559 void
2560 push_switch (tree switch_stmt)
2562 struct cp_switch *p = XNEW (struct cp_switch);
2563 p->level = current_binding_level;
2564 p->next = switch_stack;
2565 p->switch_stmt = switch_stmt;
2566 p->cases = splay_tree_new (case_compare, NULL, NULL);
2567 switch_stack = p;
2570 void
2571 pop_switch (void)
2573 struct cp_switch *cs = switch_stack;
2574 location_t switch_location;
2576 /* Emit warnings as needed. */
2577 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2578 switch_location = EXPR_LOCATION (cs->switch_stmt);
2579 else
2580 switch_location = input_location;
2581 if (!processing_template_decl)
2582 c_do_switch_warnings (cs->cases, switch_location,
2583 SWITCH_STMT_TYPE (cs->switch_stmt),
2584 SWITCH_STMT_COND (cs->switch_stmt));
2586 splay_tree_delete (cs->cases);
2587 switch_stack = switch_stack->next;
2588 free (cs);
2591 /* Note that we've seen a definition of a case label, and complain if this
2592 is a bad place for one. */
2594 tree
2595 finish_case_label (tree low_value, tree high_value)
2597 tree cond, r;
2598 struct cp_binding_level *p;
2600 if (processing_template_decl)
2602 tree label;
2604 /* For templates, just add the case label; we'll do semantic
2605 analysis at instantiation-time. */
2606 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2607 return add_stmt (build_case_label (low_value, high_value, label));
2610 /* Find the condition on which this switch statement depends. */
2611 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2612 if (cond && TREE_CODE (cond) == TREE_LIST)
2613 cond = TREE_VALUE (cond);
2615 if (!check_switch_goto (switch_stack->level))
2616 return error_mark_node;
2618 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2619 low_value, high_value);
2621 /* After labels, make any new cleanups in the function go into their
2622 own new (temporary) binding contour. */
2623 for (p = current_binding_level;
2624 p->kind != sk_function_parms;
2625 p = p->level_chain)
2626 p->more_cleanups_ok = 0;
2628 return r;
2631 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2633 static hashval_t
2634 typename_hash (const void* k)
2636 hashval_t hash;
2637 tree t = (tree) k;
2639 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2640 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2642 return hash;
2645 typedef struct typename_info {
2646 tree scope;
2647 tree name;
2648 tree template_id;
2649 bool enum_p;
2650 bool class_p;
2651 } typename_info;
2653 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2655 static int
2656 typename_compare (const void * k1, const void * k2)
2658 tree t1;
2659 const typename_info *t2;
2661 t1 = (tree) k1;
2662 t2 = (const typename_info *) k2;
2664 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2665 && TYPE_CONTEXT (t1) == t2->scope
2666 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2667 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2668 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2671 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2672 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2674 Returns the new TYPENAME_TYPE. */
2676 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2678 static tree
2679 build_typename_type (tree context, tree name, tree fullname,
2680 enum tag_types tag_type)
2682 tree t;
2683 tree d;
2684 typename_info ti;
2685 void **e;
2686 hashval_t hash;
2688 if (typename_htab == NULL)
2689 typename_htab = htab_create_ggc (61, &typename_hash,
2690 &typename_compare, NULL);
2692 ti.scope = FROB_CONTEXT (context);
2693 ti.name = name;
2694 ti.template_id = fullname;
2695 ti.enum_p = tag_type == enum_type;
2696 ti.class_p = (tag_type == class_type
2697 || tag_type == record_type
2698 || tag_type == union_type);
2699 hash = (htab_hash_pointer (ti.scope)
2700 ^ htab_hash_pointer (ti.name));
2702 /* See if we already have this type. */
2703 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2704 if (*e)
2705 t = (tree) *e;
2706 else
2708 /* Build the TYPENAME_TYPE. */
2709 t = make_aggr_type (TYPENAME_TYPE);
2710 TYPE_CONTEXT (t) = ti.scope;
2711 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2712 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2713 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2715 /* Build the corresponding TYPE_DECL. */
2716 d = build_decl (TYPE_DECL, name, t);
2717 TYPE_NAME (TREE_TYPE (d)) = d;
2718 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2719 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2720 DECL_ARTIFICIAL (d) = 1;
2722 /* Store it in the hash table. */
2723 *e = t;
2726 return t;
2729 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2730 provided to name the type. Returns an appropriate type, unless an
2731 error occurs, in which case error_mark_node is returned. If we
2732 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2733 return that, rather than the _TYPE it corresponds to, in other
2734 cases we look through the type decl. If TF_ERROR is set, complain
2735 about errors, otherwise be quiet. */
2737 tree
2738 make_typename_type (tree context, tree name, enum tag_types tag_type,
2739 tsubst_flags_t complain)
2741 tree fullname;
2743 if (name == error_mark_node
2744 || context == NULL_TREE
2745 || context == error_mark_node)
2746 return error_mark_node;
2748 if (TYPE_P (name))
2750 if (!(TYPE_LANG_SPECIFIC (name)
2751 && (CLASSTYPE_IS_TEMPLATE (name)
2752 || CLASSTYPE_USE_TEMPLATE (name))))
2753 name = TYPE_IDENTIFIER (name);
2754 else
2755 /* Create a TEMPLATE_ID_EXPR for the type. */
2756 name = build_nt (TEMPLATE_ID_EXPR,
2757 CLASSTYPE_TI_TEMPLATE (name),
2758 CLASSTYPE_TI_ARGS (name));
2760 else if (TREE_CODE (name) == TYPE_DECL)
2761 name = DECL_NAME (name);
2763 fullname = name;
2765 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2767 name = TREE_OPERAND (name, 0);
2768 if (TREE_CODE (name) == TEMPLATE_DECL)
2769 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2771 if (TREE_CODE (name) == TEMPLATE_DECL)
2773 error ("%qD used without template parameters", name);
2774 return error_mark_node;
2776 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2777 gcc_assert (TYPE_P (context));
2779 if (!dependent_type_p (context)
2780 || currently_open_class (context))
2782 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2784 tree tmpl = NULL_TREE;
2785 if (IS_AGGR_TYPE (context))
2786 tmpl = lookup_field (context, name, 0, false);
2787 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2789 if (complain & tf_error)
2790 error ("no class template named %q#T in %q#T",
2791 name, context);
2792 return error_mark_node;
2795 if (complain & tf_error)
2796 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2798 return lookup_template_class (tmpl,
2799 TREE_OPERAND (fullname, 1),
2800 NULL_TREE, context,
2801 /*entering_scope=*/0,
2802 tf_warning_or_error | tf_user);
2804 else
2806 tree t;
2808 if (!IS_AGGR_TYPE (context))
2810 if (complain & tf_error)
2811 error ("no type named %q#T in %q#T", name, context);
2812 return error_mark_node;
2815 t = lookup_field (context, name, 0, true);
2816 if (t)
2818 if (TREE_CODE (t) != TYPE_DECL)
2820 if (complain & tf_error)
2821 error ("no type named %q#T in %q#T", name, context);
2822 return error_mark_node;
2825 if (complain & tf_error)
2826 perform_or_defer_access_check (TYPE_BINFO (context), t);
2828 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2829 t = TREE_TYPE (t);
2831 return t;
2836 /* If the CONTEXT is not a template type, then either the field is
2837 there now or its never going to be. */
2838 if (!dependent_type_p (context))
2840 if (complain & tf_error)
2841 error ("no type named %q#T in %q#T", name, context);
2842 return error_mark_node;
2845 return build_typename_type (context, name, fullname, tag_type);
2848 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2849 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2850 in which case error_mark_node is returned.
2852 If PARM_LIST is non-NULL, also make sure that the template parameter
2853 list of TEMPLATE_DECL matches.
2855 If COMPLAIN zero, don't complain about any errors that occur. */
2857 tree
2858 make_unbound_class_template (tree context, tree name, tree parm_list,
2859 tsubst_flags_t complain)
2861 tree t;
2862 tree d;
2864 if (TYPE_P (name))
2865 name = TYPE_IDENTIFIER (name);
2866 else if (DECL_P (name))
2867 name = DECL_NAME (name);
2868 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2870 if (!dependent_type_p (context)
2871 || currently_open_class (context))
2873 tree tmpl = NULL_TREE;
2875 if (IS_AGGR_TYPE (context))
2876 tmpl = lookup_field (context, name, 0, false);
2878 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2880 if (complain & tf_error)
2881 error ("no class template named %q#T in %q#T", name, context);
2882 return error_mark_node;
2885 if (parm_list
2886 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2888 if (complain & tf_error)
2890 error ("template parameters do not match template");
2891 error ("%q+D declared here", tmpl);
2893 return error_mark_node;
2896 if (complain & tf_error)
2897 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2899 return tmpl;
2902 /* Build the UNBOUND_CLASS_TEMPLATE. */
2903 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2904 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2905 TREE_TYPE (t) = NULL_TREE;
2907 /* Build the corresponding TEMPLATE_DECL. */
2908 d = build_decl (TEMPLATE_DECL, name, t);
2909 TYPE_NAME (TREE_TYPE (d)) = d;
2910 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2911 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2912 DECL_ARTIFICIAL (d) = 1;
2913 DECL_TEMPLATE_PARMS (d) = parm_list;
2915 return t;
2920 /* Push the declarations of builtin types into the namespace.
2921 RID_INDEX is the index of the builtin type in the array
2922 RID_POINTERS. NAME is the name used when looking up the builtin
2923 type. TYPE is the _TYPE node for the builtin type. */
2925 void
2926 record_builtin_type (enum rid rid_index,
2927 const char* name,
2928 tree type)
2930 tree rname = NULL_TREE, tname = NULL_TREE;
2931 tree tdecl = NULL_TREE;
2933 if ((int) rid_index < (int) RID_MAX)
2934 rname = ridpointers[(int) rid_index];
2935 if (name)
2936 tname = get_identifier (name);
2938 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2939 eliminated. Built-in types should not be looked up name; their
2940 names are keywords that the parser can recognize. However, there
2941 is code in c-common.c that uses identifier_global_value to look
2942 up built-in types by name. */
2943 if (tname)
2945 tdecl = build_decl (TYPE_DECL, tname, type);
2946 DECL_ARTIFICIAL (tdecl) = 1;
2947 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2949 if (rname)
2951 if (!tdecl)
2953 tdecl = build_decl (TYPE_DECL, rname, type);
2954 DECL_ARTIFICIAL (tdecl) = 1;
2956 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2959 if (!TYPE_NAME (type))
2960 TYPE_NAME (type) = tdecl;
2962 if (tdecl)
2963 debug_hooks->type_decl (tdecl, 0);
2966 /* Record one of the standard Java types.
2967 * Declare it as having the given NAME.
2968 * If SIZE > 0, it is the size of one of the integral types;
2969 * otherwise it is the negative of the size of one of the other types. */
2971 static tree
2972 record_builtin_java_type (const char* name, int size)
2974 tree type, decl;
2975 if (size > 0)
2976 type = make_signed_type (size);
2977 else if (size > -32)
2978 { /* "__java_char" or ""__java_boolean". */
2979 type = make_unsigned_type (-size);
2980 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2982 else
2983 { /* "__java_float" or ""__java_double". */
2984 type = make_node (REAL_TYPE);
2985 TYPE_PRECISION (type) = - size;
2986 layout_type (type);
2988 record_builtin_type (RID_MAX, name, type);
2989 decl = TYPE_NAME (type);
2991 /* Suppress generate debug symbol entries for these types,
2992 since for normal C++ they are just clutter.
2993 However, push_lang_context undoes this if extern "Java" is seen. */
2994 DECL_IGNORED_P (decl) = 1;
2996 TYPE_FOR_JAVA (type) = 1;
2997 return type;
3000 /* Push a type into the namespace so that the back-ends ignore it. */
3002 static void
3003 record_unknown_type (tree type, const char* name)
3005 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3006 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3007 DECL_IGNORED_P (decl) = 1;
3008 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3009 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3010 TYPE_ALIGN (type) = 1;
3011 TYPE_USER_ALIGN (type) = 0;
3012 TYPE_MODE (type) = TYPE_MODE (void_type_node);
3015 /* A string for which we should create an IDENTIFIER_NODE at
3016 startup. */
3018 typedef struct predefined_identifier
3020 /* The name of the identifier. */
3021 const char *const name;
3022 /* The place where the IDENTIFIER_NODE should be stored. */
3023 tree *const node;
3024 /* Nonzero if this is the name of a constructor or destructor. */
3025 const int ctor_or_dtor_p;
3026 } predefined_identifier;
3028 /* Create all the predefined identifiers. */
3030 static void
3031 initialize_predefined_identifiers (void)
3033 const predefined_identifier *pid;
3035 /* A table of identifiers to create at startup. */
3036 static const predefined_identifier predefined_identifiers[] = {
3037 { "C++", &lang_name_cplusplus, 0 },
3038 { "C", &lang_name_c, 0 },
3039 { "Java", &lang_name_java, 0 },
3040 /* Some of these names have a trailing space so that it is
3041 impossible for them to conflict with names written by users. */
3042 { "__ct ", &ctor_identifier, 1 },
3043 { "__base_ctor ", &base_ctor_identifier, 1 },
3044 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3045 { "__dt ", &dtor_identifier, 1 },
3046 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3047 { "__base_dtor ", &base_dtor_identifier, 1 },
3048 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3049 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3050 { "nelts", &nelts_identifier, 0 },
3051 { THIS_NAME, &this_identifier, 0 },
3052 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3053 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3054 { "_vptr", &vptr_identifier, 0 },
3055 { "__vtt_parm", &vtt_parm_identifier, 0 },
3056 { "::", &global_scope_name, 0 },
3057 { "std", &std_identifier, 0 },
3058 { NULL, NULL, 0 }
3061 for (pid = predefined_identifiers; pid->name; ++pid)
3063 *pid->node = get_identifier (pid->name);
3064 if (pid->ctor_or_dtor_p)
3065 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3069 /* Create the predefined scalar types of C,
3070 and some nodes representing standard constants (0, 1, (void *)0).
3071 Initialize the global binding level.
3072 Make definitions for built-in primitive functions. */
3074 void
3075 cxx_init_decl_processing (void)
3077 tree void_ftype;
3078 tree void_ftype_ptr;
3080 build_common_tree_nodes (flag_signed_char, false);
3082 /* Create all the identifiers we need. */
3083 initialize_predefined_identifiers ();
3085 /* Create the global variables. */
3086 push_to_top_level ();
3088 current_function_decl = NULL_TREE;
3089 current_binding_level = NULL;
3090 /* Enter the global namespace. */
3091 gcc_assert (global_namespace == NULL_TREE);
3092 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3093 void_type_node);
3094 begin_scope (sk_namespace, global_namespace);
3096 current_lang_name = NULL_TREE;
3098 /* Adjust various flags based on command-line settings. */
3099 if (!flag_permissive)
3100 flag_pedantic_errors = 1;
3101 if (!flag_no_inline)
3103 flag_inline_trees = 1;
3104 flag_no_inline = 1;
3106 if (flag_inline_functions)
3107 flag_inline_trees = 2;
3109 /* Force minimum function alignment if using the least significant
3110 bit of function pointers to store the virtual bit. */
3111 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
3112 && force_align_functions_log < 1)
3113 force_align_functions_log = 1;
3115 /* Initially, C. */
3116 current_lang_name = lang_name_c;
3118 /* Create the `std' namespace. */
3119 push_namespace (std_identifier);
3120 std_node = current_namespace;
3121 pop_namespace ();
3123 c_common_nodes_and_builtins ();
3125 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3126 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3127 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3128 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3129 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3130 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3131 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3132 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3134 integer_two_node = build_int_cst (NULL_TREE, 2);
3135 integer_three_node = build_int_cst (NULL_TREE, 3);
3137 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3138 truthvalue_type_node = boolean_type_node;
3139 truthvalue_false_node = boolean_false_node;
3140 truthvalue_true_node = boolean_true_node;
3142 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3144 #if 0
3145 record_builtin_type (RID_MAX, NULL, string_type_node);
3146 #endif
3148 delta_type_node = ptrdiff_type_node;
3149 vtable_index_type = ptrdiff_type_node;
3151 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3152 void_ftype = build_function_type (void_type_node, void_list_node);
3153 void_ftype_ptr = build_function_type (void_type_node,
3154 tree_cons (NULL_TREE,
3155 ptr_type_node,
3156 void_list_node));
3157 void_ftype_ptr
3158 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3160 /* C++ extensions */
3162 unknown_type_node = make_node (UNKNOWN_TYPE);
3163 record_unknown_type (unknown_type_node, "unknown type");
3165 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3166 TREE_TYPE (unknown_type_node) = unknown_type_node;
3168 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3169 result. */
3170 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3171 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3174 /* Make sure we get a unique function type, so we can give
3175 its pointer type a name. (This wins for gdb.) */
3176 tree vfunc_type = make_node (FUNCTION_TYPE);
3177 TREE_TYPE (vfunc_type) = integer_type_node;
3178 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3179 layout_type (vfunc_type);
3181 vtable_entry_type = build_pointer_type (vfunc_type);
3183 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3185 vtbl_type_node
3186 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3187 layout_type (vtbl_type_node);
3188 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3189 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3190 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3191 layout_type (vtbl_ptr_type_node);
3192 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3194 push_namespace (get_identifier ("__cxxabiv1"));
3195 abi_node = current_namespace;
3196 pop_namespace ();
3198 global_type_node = make_node (LANG_TYPE);
3199 record_unknown_type (global_type_node, "global type");
3201 /* Now, C++. */
3202 current_lang_name = lang_name_cplusplus;
3205 tree bad_alloc_id;
3206 tree bad_alloc_type_node;
3207 tree bad_alloc_decl;
3208 tree newtype, deltype;
3209 tree ptr_ftype_sizetype;
3211 push_namespace (std_identifier);
3212 bad_alloc_id = get_identifier ("bad_alloc");
3213 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3214 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3215 bad_alloc_decl
3216 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3217 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3218 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3219 pop_namespace ();
3221 ptr_ftype_sizetype
3222 = build_function_type (ptr_type_node,
3223 tree_cons (NULL_TREE,
3224 size_type_node,
3225 void_list_node));
3226 newtype = build_exception_variant
3227 (ptr_ftype_sizetype, add_exception_specifier
3228 (NULL_TREE, bad_alloc_type_node, -1));
3229 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3230 push_cp_library_fn (NEW_EXPR, newtype);
3231 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3232 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3233 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3236 abort_fndecl
3237 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3239 /* Perform other language dependent initializations. */
3240 init_class_processing ();
3241 init_rtti_processing ();
3243 if (flag_exceptions)
3244 init_exception_processing ();
3246 if (! supports_one_only ())
3247 flag_weak = 0;
3249 make_fname_decl = cp_make_fname_decl;
3250 start_fname_decls ();
3252 /* Show we use EH for cleanups. */
3253 if (flag_exceptions)
3254 using_eh_for_cleanups ();
3257 /* Generate an initializer for a function naming variable from
3258 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3259 filled in with the type of the init. */
3261 tree
3262 cp_fname_init (const char* name, tree *type_p)
3264 tree domain = NULL_TREE;
3265 tree type;
3266 tree init = NULL_TREE;
3267 size_t length = 0;
3269 if (name)
3271 length = strlen (name);
3272 domain = build_index_type (size_int (length));
3273 init = build_string (length + 1, name);
3276 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3277 type = build_cplus_array_type (type, domain);
3279 *type_p = type;
3281 if (init)
3282 TREE_TYPE (init) = type;
3283 else
3284 init = error_mark_node;
3286 return init;
3289 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3290 decl, NAME is the initialization string and TYPE_DEP indicates whether
3291 NAME depended on the type of the function. We make use of that to detect
3292 __PRETTY_FUNCTION__ inside a template fn. This is being done
3293 lazily at the point of first use, so we mustn't push the decl now. */
3295 static tree
3296 cp_make_fname_decl (tree id, int type_dep)
3298 const char *const name = (type_dep && processing_template_decl
3299 ? NULL : fname_as_string (type_dep));
3300 tree type;
3301 tree init = cp_fname_init (name, &type);
3302 tree decl = build_decl (VAR_DECL, id, type);
3304 if (name)
3305 free ((char *) name);
3307 /* As we're using pushdecl_with_scope, we must set the context. */
3308 DECL_CONTEXT (decl) = current_function_decl;
3309 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3311 TREE_STATIC (decl) = 1;
3312 TREE_READONLY (decl) = 1;
3313 DECL_ARTIFICIAL (decl) = 1;
3315 TREE_USED (decl) = 1;
3317 if (current_function_decl)
3319 struct cp_binding_level *b = current_binding_level;
3320 while (b->level_chain->kind != sk_function_parms)
3321 b = b->level_chain;
3322 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3323 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3324 LOOKUP_ONLYCONVERTING);
3326 else
3327 pushdecl_top_level_and_finish (decl, init);
3329 return decl;
3332 /* Make a definition for a builtin function named NAME in the current
3333 namespace, whose data type is TYPE and whose context is CONTEXT.
3334 TYPE should be a function type with argument types.
3336 CLASS and CODE tell later passes how to compile calls to this function.
3337 See tree.h for possible values.
3339 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3340 the name to be called if we can't opencode the function.
3341 If ATTRS is nonzero, use that for the function's attribute
3342 list. */
3344 static tree
3345 builtin_function_1 (const char* name,
3346 tree type,
3347 tree context,
3348 enum built_in_function code,
3349 enum built_in_class class,
3350 const char* libname,
3351 tree attrs)
3353 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3354 DECL_BUILT_IN_CLASS (decl) = class;
3355 DECL_FUNCTION_CODE (decl) = code;
3356 DECL_CONTEXT (decl) = context;
3358 pushdecl (decl);
3360 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3361 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3362 function in the namespace. */
3363 if (libname)
3364 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3366 /* A function in the user's namespace should have an explicit
3367 declaration before it is used. Mark the built-in function as
3368 anticipated but not actually declared. */
3369 if (name[0] != '_' || name[1] != '_')
3370 DECL_ANTICIPATED (decl) = 1;
3372 /* Possibly apply some default attributes to this built-in function. */
3373 if (attrs)
3374 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3375 else
3376 decl_attributes (&decl, NULL_TREE, 0);
3378 return decl;
3381 /* Entry point for the benefit of c_common_nodes_and_builtins.
3383 Make a definition for a builtin function named NAME and whose data type
3384 is TYPE. TYPE should be a function type with argument types. This
3385 function places the anticipated declaration in the global namespace
3386 and additionally in the std namespace if appropriate.
3388 CLASS and CODE tell later passes how to compile calls to this function.
3389 See tree.h for possible values.
3391 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3392 the name to be called if we can't opencode the function.
3394 If ATTRS is nonzero, use that for the function's attribute
3395 list. */
3397 tree
3398 builtin_function (const char* name,
3399 tree type,
3400 int code,
3401 enum built_in_class cl,
3402 const char* libname,
3403 tree attrs)
3405 /* All builtins that don't begin with an '_' should additionally
3406 go in the 'std' namespace. */
3407 if (name[0] != '_')
3409 push_namespace (std_identifier);
3410 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3411 pop_namespace ();
3414 return builtin_function_1 (name, type, NULL_TREE, code,
3415 cl, libname, attrs);
3418 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3419 function. Not called directly. */
3421 static tree
3422 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3424 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3425 DECL_EXTERNAL (fn) = 1;
3426 TREE_PUBLIC (fn) = 1;
3427 DECL_ARTIFICIAL (fn) = 1;
3428 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3429 SET_DECL_LANGUAGE (fn, lang_c);
3430 /* Runtime library routines are, by definition, available in an
3431 external shared object. */
3432 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3433 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3434 return fn;
3437 /* Returns the _DECL for a library function with C linkage.
3438 We assume that such functions never throw; if this is incorrect,
3439 callers should unset TREE_NOTHROW. */
3441 tree
3442 build_library_fn (tree name, tree type)
3444 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3445 TREE_NOTHROW (fn) = 1;
3446 return fn;
3449 /* Returns the _DECL for a library function with C++ linkage. */
3451 static tree
3452 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3454 tree fn = build_library_fn_1 (name, operator_code, type);
3455 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3456 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3457 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3458 return fn;
3461 /* Like build_library_fn, but takes a C string instead of an
3462 IDENTIFIER_NODE. */
3464 tree
3465 build_library_fn_ptr (const char* name, tree type)
3467 return build_library_fn (get_identifier (name), type);
3470 /* Like build_cp_library_fn, but takes a C string instead of an
3471 IDENTIFIER_NODE. */
3473 tree
3474 build_cp_library_fn_ptr (const char* name, tree type)
3476 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3479 /* Like build_library_fn, but also pushes the function so that we will
3480 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3482 tree
3483 push_library_fn (tree name, tree type)
3485 tree fn = build_library_fn (name, type);
3486 pushdecl_top_level (fn);
3487 return fn;
3490 /* Like build_cp_library_fn, but also pushes the function so that it
3491 will be found by normal lookup. */
3493 static tree
3494 push_cp_library_fn (enum tree_code operator_code, tree type)
3496 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3497 operator_code,
3498 type);
3499 pushdecl (fn);
3500 return fn;
3503 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3504 a FUNCTION_TYPE. */
3506 tree
3507 push_void_library_fn (tree name, tree parmtypes)
3509 tree type = build_function_type (void_type_node, parmtypes);
3510 return push_library_fn (name, type);
3513 /* Like push_library_fn, but also note that this function throws
3514 and does not return. Used for __throw_foo and the like. */
3516 tree
3517 push_throw_library_fn (tree name, tree type)
3519 tree fn = push_library_fn (name, type);
3520 TREE_THIS_VOLATILE (fn) = 1;
3521 TREE_NOTHROW (fn) = 0;
3522 return fn;
3525 /* When we call finish_struct for an anonymous union, we create
3526 default copy constructors and such. But, an anonymous union
3527 shouldn't have such things; this function undoes the damage to the
3528 anonymous union type T.
3530 (The reason that we create the synthesized methods is that we don't
3531 distinguish `union { int i; }' from `typedef union { int i; } U'.
3532 The first is an anonymous union; the second is just an ordinary
3533 union type.) */
3535 void
3536 fixup_anonymous_aggr (tree t)
3538 tree *q;
3540 /* Wipe out memory of synthesized methods. */
3541 TYPE_HAS_CONSTRUCTOR (t) = 0;
3542 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3543 TYPE_HAS_INIT_REF (t) = 0;
3544 TYPE_HAS_CONST_INIT_REF (t) = 0;
3545 TYPE_HAS_ASSIGN_REF (t) = 0;
3546 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3548 /* Splice the implicitly generated functions out of the TYPE_METHODS
3549 list. */
3550 q = &TYPE_METHODS (t);
3551 while (*q)
3553 if (DECL_ARTIFICIAL (*q))
3554 *q = TREE_CHAIN (*q);
3555 else
3556 q = &TREE_CHAIN (*q);
3559 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3560 if (TYPE_METHODS (t))
3561 error ("%Jan anonymous union cannot have function members",
3562 TYPE_MAIN_DECL (t));
3564 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3565 assignment operators (because they cannot have these methods themselves).
3566 For anonymous unions this is already checked because they are not allowed
3567 in any union, otherwise we have to check it. */
3568 if (TREE_CODE (t) != UNION_TYPE)
3570 tree field, type;
3572 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3573 if (TREE_CODE (field) == FIELD_DECL)
3575 type = TREE_TYPE (field);
3576 if (CLASS_TYPE_P (type))
3578 if (TYPE_NEEDS_CONSTRUCTING (type))
3579 error ("member %q+#D with constructor not allowed "
3580 "in anonymous aggregate", field);
3581 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3582 error ("member %q+#D with destructor not allowed "
3583 "in anonymous aggregate", field);
3584 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3585 error ("member %q+#D with copy assignment operator "
3586 "not allowed in anonymous aggregate", field);
3592 /* Make sure that a declaration with no declarator is well-formed, i.e.
3593 just declares a tagged type or anonymous union.
3595 Returns the type declared; or NULL_TREE if none. */
3597 tree
3598 check_tag_decl (cp_decl_specifier_seq *declspecs)
3600 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3601 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3602 /* If a class, struct, or enum type is declared by the DECLSPECS
3603 (i.e, if a class-specifier, enum-specifier, or non-typename
3604 elaborated-type-specifier appears in the DECLSPECS),
3605 DECLARED_TYPE is set to the corresponding type. */
3606 tree declared_type = NULL_TREE;
3607 bool error_p = false;
3609 if (declspecs->multiple_types_p)
3610 error ("multiple types in one declaration");
3611 else if (declspecs->redefined_builtin_type)
3613 if (!in_system_header)
3614 pedwarn ("redeclaration of C++ built-in type %qT",
3615 declspecs->redefined_builtin_type);
3616 return NULL_TREE;
3619 if (declspecs->type
3620 && TYPE_P (declspecs->type)
3621 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3622 && IS_AGGR_TYPE (declspecs->type))
3623 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3624 declared_type = declspecs->type;
3625 else if (declspecs->type == error_mark_node)
3626 error_p = true;
3627 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3628 pedwarn ("declaration does not declare anything");
3629 /* Check for an anonymous union. */
3630 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3631 && TYPE_ANONYMOUS_P (declared_type))
3633 /* 7/3 In a simple-declaration, the optional init-declarator-list
3634 can be omitted only when declaring a class (clause 9) or
3635 enumeration (7.2), that is, when the decl-specifier-seq contains
3636 either a class-specifier, an elaborated-type-specifier with
3637 a class-key (9.1), or an enum-specifier. In these cases and
3638 whenever a class-specifier or enum-specifier is present in the
3639 decl-specifier-seq, the identifiers in these specifiers are among
3640 the names being declared by the declaration (as class-name,
3641 enum-names, or enumerators, depending on the syntax). In such
3642 cases, and except for the declaration of an unnamed bit-field (9.6),
3643 the decl-specifier-seq shall introduce one or more names into the
3644 program, or shall redeclare a name introduced by a previous
3645 declaration. [Example:
3646 enum { }; // ill-formed
3647 typedef class { }; // ill-formed
3648 --end example] */
3649 if (saw_typedef)
3651 error ("missing type-name in typedef-declaration");
3652 return NULL_TREE;
3654 /* Anonymous unions are objects, so they can have specifiers. */;
3655 SET_ANON_AGGR_TYPE_P (declared_type);
3657 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3658 && !in_system_header)
3659 pedwarn ("ISO C++ prohibits anonymous structs");
3662 else
3664 if (declspecs->specs[(int)ds_inline]
3665 || declspecs->specs[(int)ds_virtual])
3666 error ("%qs can only be specified for functions",
3667 declspecs->specs[(int)ds_inline]
3668 ? "inline" : "virtual");
3669 else if (saw_friend
3670 && (!current_class_type
3671 || current_scope () != current_class_type))
3672 error ("%<friend%> can only be specified inside a class");
3673 else if (declspecs->specs[(int)ds_explicit])
3674 error ("%<explicit%> can only be specified for constructors");
3675 else if (declspecs->storage_class)
3676 error ("a storage class can only be specified for objects "
3677 "and functions");
3678 else if (declspecs->specs[(int)ds_const]
3679 || declspecs->specs[(int)ds_volatile]
3680 || declspecs->specs[(int)ds_restrict]
3681 || declspecs->specs[(int)ds_thread])
3682 error ("qualifiers can only be specified for objects "
3683 "and functions");
3686 return declared_type;
3689 /* Called when a declaration is seen that contains no names to declare.
3690 If its type is a reference to a structure, union or enum inherited
3691 from a containing scope, shadow that tag name for the current scope
3692 with a forward reference.
3693 If its type defines a new named structure or union
3694 or defines an enum, it is valid but we need not do anything here.
3695 Otherwise, it is an error.
3697 C++: may have to grok the declspecs to learn about static,
3698 complain for anonymous unions.
3700 Returns the TYPE declared -- or NULL_TREE if none. */
3702 tree
3703 shadow_tag (cp_decl_specifier_seq *declspecs)
3705 tree t = check_tag_decl (declspecs);
3707 if (!t)
3708 return NULL_TREE;
3710 if (declspecs->attributes)
3712 warning (0, "attribute ignored in declaration of %q+#T", t);
3713 warning (0, "attribute for %q+#T must follow the %qs keyword",
3714 t, class_key_or_enum_as_string (t));
3718 maybe_process_partial_specialization (t);
3720 /* This is where the variables in an anonymous union are
3721 declared. An anonymous union declaration looks like:
3722 union { ... } ;
3723 because there is no declarator after the union, the parser
3724 sends that declaration here. */
3725 if (ANON_AGGR_TYPE_P (t))
3727 fixup_anonymous_aggr (t);
3729 if (TYPE_FIELDS (t))
3731 tree decl = grokdeclarator (/*declarator=*/NULL,
3732 declspecs, NORMAL, 0, NULL);
3733 finish_anon_union (decl);
3737 return t;
3740 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3742 tree
3743 groktypename (cp_decl_specifier_seq *type_specifiers,
3744 const cp_declarator *declarator)
3746 tree attrs;
3747 tree type;
3748 attrs = type_specifiers->attributes;
3749 type_specifiers->attributes = NULL_TREE;
3750 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3751 if (attrs)
3752 cplus_decl_attributes (&type, attrs, 0);
3753 return type;
3756 /* Decode a declarator in an ordinary declaration or data definition.
3757 This is called as soon as the type information and variable name
3758 have been parsed, before parsing the initializer if any.
3759 Here we create the ..._DECL node, fill in its type,
3760 and put it on the list of decls for the current context.
3761 The ..._DECL node is returned as the value.
3763 Exception: for arrays where the length is not specified,
3764 the type is left null, to be filled in by `cp_finish_decl'.
3766 Function definitions do not come here; they go to start_function
3767 instead. However, external and forward declarations of functions
3768 do go through here. Structure field declarations are done by
3769 grokfield and not through here. */
3771 tree
3772 start_decl (const cp_declarator *declarator,
3773 cp_decl_specifier_seq *declspecs,
3774 int initialized,
3775 tree attributes,
3776 tree prefix_attributes,
3777 tree *pushed_scope_p)
3779 tree decl;
3780 tree type, tem;
3781 tree context;
3783 *pushed_scope_p = NULL_TREE;
3785 /* This should only be done once on the top most decl. */
3786 if (have_extern_spec)
3788 declspecs->storage_class = sc_extern;
3789 have_extern_spec = false;
3792 /* An object declared as __attribute__((deprecated)) suppresses
3793 warnings of uses of other deprecated items. */
3794 if (lookup_attribute ("deprecated", attributes))
3795 deprecated_state = DEPRECATED_SUPPRESS;
3797 attributes = chainon (attributes, prefix_attributes);
3799 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3800 &attributes);
3802 deprecated_state = DEPRECATED_NORMAL;
3804 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3805 || decl == error_mark_node)
3806 return error_mark_node;
3808 type = TREE_TYPE (decl);
3810 context = DECL_CONTEXT (decl);
3812 if (context)
3814 *pushed_scope_p = push_scope (context);
3816 /* We are only interested in class contexts, later. */
3817 if (TREE_CODE (context) == NAMESPACE_DECL)
3818 context = NULL_TREE;
3821 if (initialized)
3822 /* Is it valid for this decl to have an initializer at all?
3823 If not, set INITIALIZED to zero, which will indirectly
3824 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3825 switch (TREE_CODE (decl))
3827 case TYPE_DECL:
3828 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3829 initialized = 0;
3830 break;
3832 case FUNCTION_DECL:
3833 error ("function %q#D is initialized like a variable", decl);
3834 initialized = 0;
3835 break;
3837 default:
3838 break;
3841 if (initialized)
3843 if (! toplevel_bindings_p ()
3844 && DECL_EXTERNAL (decl))
3845 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3846 decl);
3847 DECL_EXTERNAL (decl) = 0;
3848 if (toplevel_bindings_p ())
3849 TREE_STATIC (decl) = 1;
3852 /* Set attributes here so if duplicate decl, will have proper attributes. */
3853 cplus_decl_attributes (&decl, attributes, 0);
3855 /* If #pragma weak was used, mark the decl weak now. */
3856 maybe_apply_pragma_weak (decl);
3858 if (TREE_CODE (decl) == FUNCTION_DECL
3859 && DECL_DECLARED_INLINE_P (decl)
3860 && DECL_UNINLINABLE (decl)
3861 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3862 warning (0, "inline function %q+D given attribute noinline", decl);
3864 if (context && COMPLETE_TYPE_P (complete_type (context)))
3866 if (TREE_CODE (decl) == VAR_DECL)
3868 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3869 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3870 error ("%q#D is not a static member of %q#T", decl, context);
3871 else
3873 if (DECL_CONTEXT (field) != context)
3875 if (!same_type_p (DECL_CONTEXT (field), context))
3876 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3877 "to be defined as %<%T::%D%>",
3878 DECL_CONTEXT (field), DECL_NAME (decl),
3879 context, DECL_NAME (decl));
3880 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3882 if (processing_specialization
3883 && template_class_depth (context) == 0
3884 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3885 error ("template header not allowed in member definition "
3886 "of explicitly specialized class");
3887 /* Static data member are tricky; an in-class initialization
3888 still doesn't provide a definition, so the in-class
3889 declaration will have DECL_EXTERNAL set, but will have an
3890 initialization. Thus, duplicate_decls won't warn
3891 about this situation, and so we check here. */
3892 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
3893 error ("duplicate initialization of %qD", decl);
3894 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
3895 decl = field;
3898 else
3900 tree field = check_classfn (context, decl,
3901 (processing_template_decl
3902 > template_class_depth (context))
3903 ? current_template_parms
3904 : NULL_TREE);
3905 if (field && duplicate_decls (decl, field,
3906 /*newdecl_is_friend=*/false))
3907 decl = field;
3910 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3911 DECL_IN_AGGR_P (decl) = 0;
3912 /* Do not mark DECL as an explicit specialization if it was not
3913 already marked as an instantiation; a declaration should
3914 never be marked as a specialization unless we know what
3915 template is being specialized. */
3916 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3918 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3920 /* [temp.expl.spec] An explicit specialization of a static data
3921 member of a template is a definition if the declaration
3922 includes an initializer; otherwise, it is a declaration.
3924 We check for processing_specialization so this only applies
3925 to the new specialization syntax. */
3926 if (!initialized && processing_specialization)
3927 DECL_EXTERNAL (decl) = 1;
3930 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3931 pedwarn ("declaration of %q#D outside of class is not definition",
3932 decl);
3935 /* Enter this declaration into the symbol table. */
3936 tem = maybe_push_decl (decl);
3938 if (processing_template_decl)
3939 tem = push_template_decl (tem);
3940 if (tem == error_mark_node)
3941 return error_mark_node;
3943 /* Tell the back-end to use or not use .common as appropriate. If we say
3944 -fconserve-space, we want this to save .data space, at the expense of
3945 wrong semantics. If we say -fno-conserve-space, we want this to
3946 produce errors about redefs; to do this we force variables into the
3947 data segment. */
3948 if (flag_conserve_space
3949 && TREE_CODE (tem) == VAR_DECL
3950 && TREE_PUBLIC (tem)
3951 && !DECL_THREAD_LOCAL_P (tem)
3952 && !have_global_bss_p ())
3953 DECL_COMMON (tem) = 1;
3955 if (!processing_template_decl && TREE_CODE (tem) == VAR_DECL)
3956 start_decl_1 (tem, initialized);
3958 return tem;
3961 void
3962 start_decl_1 (tree decl, bool initialized)
3964 tree type;
3966 gcc_assert (!processing_template_decl);
3968 if (error_operand_p (decl))
3969 return;
3971 gcc_assert (TREE_CODE (decl) == VAR_DECL);
3972 type = TREE_TYPE (decl);
3974 if (initialized)
3975 /* Is it valid for this decl to have an initializer at all?
3976 If not, set INITIALIZED to zero, which will indirectly
3977 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3979 /* Don't allow initializations for incomplete types except for
3980 arrays which might be completed by the initialization. */
3981 if (COMPLETE_TYPE_P (complete_type (type)))
3982 ; /* A complete type is ok. */
3983 else if (TREE_CODE (type) != ARRAY_TYPE)
3985 error ("variable %q#D has initializer but incomplete type", decl);
3986 initialized = 0;
3987 type = TREE_TYPE (decl) = error_mark_node;
3989 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3991 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3992 error ("elements of array %q#D have incomplete type", decl);
3993 /* else we already gave an error in start_decl. */
3994 initialized = 0;
3997 else if (IS_AGGR_TYPE (type)
3998 && ! DECL_EXTERNAL (decl))
4000 if (!COMPLETE_TYPE_P (complete_type (type)))
4002 error ("aggregate %q#D has incomplete type and cannot be defined",
4003 decl);
4004 /* Change the type so that assemble_variable will give
4005 DECL an rtl we can live with: (mem (const_int 0)). */
4006 type = TREE_TYPE (decl) = error_mark_node;
4008 else
4010 /* If any base type in the hierarchy of TYPE needs a constructor,
4011 then we set initialized to 1. This way any nodes which are
4012 created for the purposes of initializing this aggregate
4013 will live as long as it does. This is necessary for global
4014 aggregates which do not have their initializers processed until
4015 the end of the file. */
4016 initialized = TYPE_NEEDS_CONSTRUCTING (type);
4020 /* Create a new scope to hold this declaration if necessary.
4021 Whether or not a new scope is necessary cannot be determined
4022 until after the type has been completed; if the type is a
4023 specialization of a class template it is not until after
4024 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4025 will be set correctly. */
4026 maybe_push_cleanup_level (type);
4029 /* Handle initialization of references. DECL, TYPE, and INIT have the
4030 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4031 but will be set to a new CLEANUP_STMT if a temporary is created
4032 that must be destroyed subsequently.
4034 Returns an initializer expression to use to initialize DECL, or
4035 NULL if the initialization can be performed statically.
4037 Quotes on semantics can be found in ARM 8.4.3. */
4039 static tree
4040 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4042 tree tmp;
4044 if (init == NULL_TREE)
4046 if ((DECL_LANG_SPECIFIC (decl) == 0
4047 || DECL_IN_AGGR_P (decl) == 0)
4048 && ! DECL_THIS_EXTERN (decl))
4049 error ("%qD declared as reference but not initialized", decl);
4050 return NULL_TREE;
4053 if (TREE_CODE (init) == CONSTRUCTOR)
4055 error ("ISO C++ forbids use of initializer list to "
4056 "initialize reference %qD", decl);
4057 return NULL_TREE;
4060 if (TREE_CODE (init) == TREE_LIST)
4061 init = build_x_compound_expr_from_list (init, "initializer");
4063 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4064 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4065 /* Note: default conversion is only called in very special cases. */
4066 init = decay_conversion (init);
4068 /* Convert INIT to the reference type TYPE. This may involve the
4069 creation of a temporary, whose lifetime must be the same as that
4070 of the reference. If so, a DECL_EXPR for the temporary will be
4071 added just after the DECL_EXPR for DECL. That's why we don't set
4072 DECL_INITIAL for local references (instead assigning to them
4073 explicitly); we need to allow the temporary to be initialized
4074 first. */
4075 tmp = initialize_reference (type, init, decl, cleanup);
4077 if (tmp == error_mark_node)
4078 return NULL_TREE;
4079 else if (tmp == NULL_TREE)
4081 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4082 return NULL_TREE;
4085 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4086 return tmp;
4088 DECL_INITIAL (decl) = tmp;
4090 return NULL_TREE;
4093 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4094 array until we finish parsing the initializer. If that's the
4095 situation we're in, update DECL accordingly. */
4097 static void
4098 maybe_deduce_size_from_array_init (tree decl, tree init)
4100 tree type = TREE_TYPE (decl);
4102 if (TREE_CODE (type) == ARRAY_TYPE
4103 && TYPE_DOMAIN (type) == NULL_TREE
4104 && TREE_CODE (decl) != TYPE_DECL)
4106 /* do_default is really a C-ism to deal with tentative definitions.
4107 But let's leave it here to ease the eventual merge. */
4108 int do_default = !DECL_EXTERNAL (decl);
4109 tree initializer = init ? init : DECL_INITIAL (decl);
4110 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4111 do_default);
4113 if (failure == 1)
4114 error ("initializer fails to determine size of %qD", decl);
4116 if (failure == 2)
4118 if (do_default)
4119 error ("array size missing in %qD", decl);
4120 /* If a `static' var's size isn't known, make it extern as
4121 well as static, so it does not get allocated. If it's not
4122 `static', then don't mark it extern; finish_incomplete_decl
4123 will give it a default size and it will get allocated. */
4124 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4125 DECL_EXTERNAL (decl) = 1;
4128 if (failure == 3)
4129 error ("zero-size array %qD", decl);
4131 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4133 layout_decl (decl, 0);
4137 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4138 any appropriate error messages regarding the layout. */
4140 static void
4141 layout_var_decl (tree decl)
4143 tree type = TREE_TYPE (decl);
4145 /* If we haven't already layed out this declaration, do so now.
4146 Note that we must not call complete type for an external object
4147 because it's type might involve templates that we are not
4148 supposed to instantiate yet. (And it's perfectly valid to say
4149 `extern X x' for some incomplete type `X'.) */
4150 if (!DECL_EXTERNAL (decl))
4151 complete_type (type);
4152 if (!DECL_SIZE (decl)
4153 && TREE_TYPE (decl) != error_mark_node
4154 && (COMPLETE_TYPE_P (type)
4155 || (TREE_CODE (type) == ARRAY_TYPE
4156 && !TYPE_DOMAIN (type)
4157 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4158 layout_decl (decl, 0);
4160 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4162 /* An automatic variable with an incomplete type: that is an error.
4163 Don't talk about array types here, since we took care of that
4164 message in grokdeclarator. */
4165 error ("storage size of %qD isn't known", decl);
4166 TREE_TYPE (decl) = error_mark_node;
4168 #if 0
4169 /* Keep this code around in case we later want to control debug info
4170 based on whether a type is "used". (jason 1999-11-11) */
4172 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4173 /* Let debugger know it should output info for this type. */
4174 note_debug_info_needed (ttype);
4176 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4177 note_debug_info_needed (DECL_CONTEXT (decl));
4178 #endif
4180 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4181 && DECL_SIZE (decl) != NULL_TREE
4182 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4184 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4185 constant_expression_warning (DECL_SIZE (decl));
4186 else
4187 error ("storage size of %qD isn't constant", decl);
4190 if (TREE_STATIC (decl)
4191 && !DECL_ARTIFICIAL (decl)
4192 && current_function_decl
4193 && DECL_CONTEXT (decl) == current_function_decl)
4194 push_local_name (decl);
4197 /* If a local static variable is declared in an inline function, or if
4198 we have a weak definition, we must endeavor to create only one
4199 instance of the variable at link-time. */
4201 static void
4202 maybe_commonize_var (tree decl)
4204 /* Static data in a function with comdat linkage also has comdat
4205 linkage. */
4206 if (TREE_STATIC (decl)
4207 /* Don't mess with __FUNCTION__. */
4208 && ! DECL_ARTIFICIAL (decl)
4209 && DECL_FUNCTION_SCOPE_P (decl)
4210 /* Unfortunately, import_export_decl has not always been called
4211 before the function is processed, so we cannot simply check
4212 DECL_COMDAT. */
4213 && (DECL_COMDAT (DECL_CONTEXT (decl))
4214 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4215 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4216 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4218 if (flag_weak)
4220 /* With weak symbols, we simply make the variable COMDAT;
4221 that will cause copies in multiple translations units to
4222 be merged. */
4223 comdat_linkage (decl);
4225 else
4227 if (DECL_INITIAL (decl) == NULL_TREE
4228 || DECL_INITIAL (decl) == error_mark_node)
4230 /* Without weak symbols, we can use COMMON to merge
4231 uninitialized variables. */
4232 TREE_PUBLIC (decl) = 1;
4233 DECL_COMMON (decl) = 1;
4235 else
4237 /* While for initialized variables, we must use internal
4238 linkage -- which means that multiple copies will not
4239 be merged. */
4240 TREE_PUBLIC (decl) = 0;
4241 DECL_COMMON (decl) = 0;
4242 warning (0, "sorry: semantics of inline function static "
4243 "data %q+#D are wrong (you'll wind up "
4244 "with multiple copies)", decl);
4245 warning (0, "%J you can work around this by removing "
4246 "the initializer",
4247 decl);
4251 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4252 /* Set it up again; we might have set DECL_INITIAL since the last
4253 time. */
4254 comdat_linkage (decl);
4257 /* Issue an error message if DECL is an uninitialized const variable. */
4259 static void
4260 check_for_uninitialized_const_var (tree decl)
4262 tree type = TREE_TYPE (decl);
4264 /* ``Unless explicitly declared extern, a const object does not have
4265 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4266 7.1.6 */
4267 if (TREE_CODE (decl) == VAR_DECL
4268 && TREE_CODE (type) != REFERENCE_TYPE
4269 && CP_TYPE_CONST_P (type)
4270 && !TYPE_NEEDS_CONSTRUCTING (type)
4271 && !DECL_INITIAL (decl))
4272 error ("uninitialized const %qD", decl);
4276 /* Structure holding the current initializer being processed by reshape_init.
4277 CUR is a pointer to the current element being processed, END is a pointer
4278 after the last element present in the initializer. */
4279 typedef struct reshape_iterator_t
4281 constructor_elt *cur;
4282 constructor_elt *end;
4283 } reshape_iter;
4285 static tree reshape_init_r (tree, reshape_iter *, bool);
4287 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4288 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4289 initialized. If there are no more such fields, the return value
4290 will be NULL. */
4292 static tree
4293 next_initializable_field (tree field)
4295 while (field
4296 && (TREE_CODE (field) != FIELD_DECL
4297 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4298 || DECL_ARTIFICIAL (field)))
4299 field = TREE_CHAIN (field);
4301 return field;
4304 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4305 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4306 INTEGER_CST representing the size of the array minus one (the maximum index),
4307 or NULL_TREE if the array was declared without specifying the size. D is
4308 the iterator within the constructor. */
4310 static tree
4311 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4313 tree new_init;
4314 bool sized_array_p = (max_index != NULL_TREE);
4315 unsigned HOST_WIDE_INT max_index_cst = 0;
4316 unsigned HOST_WIDE_INT index;
4318 /* The initializer for an array is always a CONSTRUCTOR. */
4319 new_init = build_constructor (NULL_TREE, NULL);
4321 if (sized_array_p)
4323 /* Minus 1 is used for zero sized arrays. */
4324 if (integer_all_onesp (max_index))
4325 return new_init;
4327 if (host_integerp (max_index, 1))
4328 max_index_cst = tree_low_cst (max_index, 1);
4329 /* sizetype is sign extended, not zero extended. */
4330 else
4331 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4335 /* Loop until there are no more initializers. */
4336 for (index = 0;
4337 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4338 ++index)
4340 tree elt_init;
4342 if (d->cur->index)
4344 /* Handle array designated initializers (GNU extension). */
4345 if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
4347 error ("name %qD used in a GNU-style designated "
4348 "initializer for an array", d->cur->index);
4350 else
4351 gcc_unreachable ();
4354 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4355 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4358 return new_init;
4361 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4362 Parameters are the same of reshape_init_r. */
4364 static tree
4365 reshape_init_array (tree type, reshape_iter *d)
4367 tree max_index = NULL_TREE;
4369 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4371 if (TYPE_DOMAIN (type))
4372 max_index = array_type_nelts (type);
4374 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4377 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4378 Parameters are the same of reshape_init_r. */
4380 static tree
4381 reshape_init_vector (tree type, reshape_iter *d)
4383 tree max_index = NULL_TREE;
4384 tree rtype;
4386 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4388 if (COMPOUND_LITERAL_P (d->cur->value))
4390 tree value = d->cur->value;
4391 if (!same_type_p (TREE_TYPE (value), type))
4393 error ("invalid type %qT as initializer for a vector of type %qT",
4394 TREE_TYPE (d->cur->value), type);
4395 value = error_mark_node;
4397 ++d->cur;
4398 return value;
4401 /* For a vector, the representation type is a struct
4402 containing a single member which is an array of the
4403 appropriate size. */
4404 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4405 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4406 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4408 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4411 /* Subroutine of reshape_init_r, processes the initializers for classes
4412 or union. Parameters are the same of reshape_init_r. */
4414 static tree
4415 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4417 tree field;
4418 tree new_init;
4420 gcc_assert (CLASS_TYPE_P (type));
4422 /* The initializer for a class is always a CONSTRUCTOR. */
4423 new_init = build_constructor (NULL_TREE, NULL);
4424 field = next_initializable_field (TYPE_FIELDS (type));
4426 if (!field)
4428 /* [dcl.init.aggr]
4430 An initializer for an aggregate member that is an
4431 empty class shall have the form of an empty
4432 initializer-list {}. */
4433 if (!first_initializer_p)
4435 error ("initializer for %qT must be brace-enclosed", type);
4436 return error_mark_node;
4438 return new_init;
4441 /* Loop through the initializable fields, gathering initializers. */
4442 while (d->cur != d->end)
4444 tree field_init;
4446 /* Handle designated initializers, as an extension. */
4447 if (d->cur->index)
4449 if (pedantic)
4450 pedwarn ("ISO C++ does not allow designated initializers");
4452 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4454 if (!field || TREE_CODE (field) != FIELD_DECL)
4455 error ("%qT has no non-static data member named %qD", type,
4456 d->cur->index);
4459 /* If we processed all the member of the class, we are done. */
4460 if (!field)
4461 break;
4463 field_init = reshape_init_r (TREE_TYPE (field), d,
4464 /*first_initializer_p=*/false);
4465 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4467 /* [dcl.init.aggr]
4469 When a union is initialized with a brace-enclosed
4470 initializer, the braces shall only contain an
4471 initializer for the first member of the union. */
4472 if (TREE_CODE (type) == UNION_TYPE)
4473 break;
4475 field = next_initializable_field (TREE_CHAIN (field));
4478 return new_init;
4481 /* Subroutine of reshape_init, which processes a single initializer (part of
4482 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4483 iterator within the CONSTRUCTOR which points to the initializer to process.
4484 FIRST_INITIALIZER_P is true if this is the first initializer of the
4485 CONSTRUCTOR node. */
4487 static tree
4488 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4490 tree init = d->cur->value;
4492 /* A non-aggregate type is always initialized with a single
4493 initializer. */
4494 if (!CP_AGGREGATE_TYPE_P (type))
4496 /* It is invalid to initialize a non-aggregate type with a
4497 brace-enclosed initializer.
4498 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4499 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4500 a CONSTRUCTOR (with a record type). */
4501 if (TREE_CODE (init) == CONSTRUCTOR
4502 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4504 error ("braces around scalar initializer for type %qT", type);
4505 init = error_mark_node;
4508 d->cur++;
4509 return init;
4512 /* [dcl.init.aggr]
4514 All implicit type conversions (clause _conv_) are considered when
4515 initializing the aggregate member with an initializer from an
4516 initializer-list. If the initializer can initialize a member,
4517 the member is initialized. Otherwise, if the member is itself a
4518 non-empty subaggregate, brace elision is assumed and the
4519 initializer is considered for the initialization of the first
4520 member of the subaggregate. */
4521 if (TREE_CODE (init) != CONSTRUCTOR
4522 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4524 d->cur++;
4525 return init;
4528 /* [dcl.init.string]
4530 A char array (whether plain char, signed char, or unsigned char)
4531 can be initialized by a string-literal (optionally enclosed in
4532 braces); a wchar_t array can be initialized by a wide
4533 string-literal (optionally enclosed in braces). */
4534 if (TREE_CODE (type) == ARRAY_TYPE
4535 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4537 tree str_init = init;
4539 /* Strip one level of braces if and only if they enclose a single
4540 element (as allowed by [dcl.init.string]). */
4541 if (!first_initializer_p
4542 && TREE_CODE (str_init) == CONSTRUCTOR
4543 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4545 str_init = VEC_index (constructor_elt,
4546 CONSTRUCTOR_ELTS (str_init), 0)->value;
4549 /* If it's a string literal, then it's the initializer for the array
4550 as a whole. Otherwise, continue with normal initialization for
4551 array types (one value per array element). */
4552 if (TREE_CODE (str_init) == STRING_CST)
4554 d->cur++;
4555 return str_init;
4559 /* The following cases are about aggregates. If we are not within a full
4560 initializer already, and there is not a CONSTRUCTOR, it means that there
4561 is a missing set of braces (that is, we are processing the case for
4562 which reshape_init exists). */
4563 if (!first_initializer_p)
4565 if (TREE_CODE (init) == CONSTRUCTOR)
4567 /* For a nested compound literal, there is no need to reshape since
4568 brace elision is not allowed. Even if we decided to allow it,
4569 we should add a call to reshape_init in finish_compound_literal,
4570 before calling digest_init, so changing this code would still
4571 not be necessary. */
4572 if (!COMPOUND_LITERAL_P (init))
4574 ++d->cur;
4575 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4576 return reshape_init (type, init);
4578 else
4579 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4582 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4583 type);
4586 /* Dispatch to specialized routines. */
4587 if (CLASS_TYPE_P (type))
4588 return reshape_init_class (type, d, first_initializer_p);
4589 else if (TREE_CODE (type) == ARRAY_TYPE)
4590 return reshape_init_array (type, d);
4591 else if (TREE_CODE (type) == VECTOR_TYPE)
4592 return reshape_init_vector (type, d);
4593 else
4594 gcc_unreachable();
4597 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4598 brace-enclosed aggregate initializer.
4600 INIT is the CONSTRUCTOR containing the list of initializers describing
4601 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4602 It may not presently match the shape of the TYPE; for example:
4604 struct S { int a; int b; };
4605 struct S a[] = { 1, 2, 3, 4 };
4607 Here INIT will hold a VEC of four elements, rather than a
4608 VEC of two elements, each itself a VEC of two elements. This
4609 routine transforms INIT from the former form into the latter. The
4610 revised CONSTRUCTOR node is returned. */
4612 tree
4613 reshape_init (tree type, tree init)
4615 VEC(constructor_elt, gc) *v;
4616 reshape_iter d;
4617 tree new_init;
4619 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4621 v = CONSTRUCTOR_ELTS (init);
4623 /* An empty constructor does not need reshaping, and it is always a valid
4624 initializer. */
4625 if (VEC_empty (constructor_elt, v))
4626 return init;
4628 /* Recurse on this CONSTRUCTOR. */
4629 d.cur = VEC_index (constructor_elt, v, 0);
4630 d.end = d.cur + VEC_length (constructor_elt, v);
4632 new_init = reshape_init_r (type, &d, true);
4634 /* Make sure all the element of the constructor were used. Otherwise,
4635 issue an error about exceeding initializers. */
4636 if (d.cur != d.end)
4637 error ("too many initializers for %qT", type);
4639 return new_init;
4642 /* Verify INIT (the initializer for DECL), and record the
4643 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4644 grok_reference_init.
4646 If the return value is non-NULL, it is an expression that must be
4647 evaluated dynamically to initialize DECL. */
4649 static tree
4650 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4652 tree type = TREE_TYPE (decl);
4653 tree init_code = NULL;
4655 /* Things that are going to be initialized need to have complete
4656 type. */
4657 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4659 if (type == error_mark_node)
4660 /* We will have already complained. */
4661 init = NULL_TREE;
4662 else if (init && COMPLETE_TYPE_P (type)
4663 && !TREE_CONSTANT (TYPE_SIZE (type)))
4665 error ("variable-sized object %qD may not be initialized", decl);
4666 init = NULL_TREE;
4668 else if (TREE_CODE (type) == ARRAY_TYPE
4669 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4671 error ("elements of array %q#D have incomplete type", decl);
4672 init = NULL_TREE;
4674 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4676 error ("%qD has incomplete type", decl);
4677 TREE_TYPE (decl) = error_mark_node;
4678 init = NULL_TREE;
4681 if (TREE_CODE (decl) == CONST_DECL)
4683 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
4685 DECL_INITIAL (decl) = init;
4687 gcc_assert (init != NULL_TREE);
4688 init = NULL_TREE;
4690 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4691 init = grok_reference_init (decl, type, init, cleanup);
4692 else if (init)
4694 /* Do not reshape constructors of vectors (they don't need to be
4695 reshaped. */
4696 if (TREE_CODE (init) == CONSTRUCTOR
4697 && !COMPOUND_LITERAL_P (init)
4698 && !TREE_TYPE (init)) /* ptrmemfunc */
4700 init = reshape_init (type, init);
4702 if ((*targetm.vector_opaque_p) (type))
4704 error ("opaque vector types cannot be initialized");
4705 init = error_mark_node;
4709 /* If DECL has an array type without a specific bound, deduce the
4710 array size from the initializer. */
4711 maybe_deduce_size_from_array_init (decl, init);
4712 type = TREE_TYPE (decl);
4714 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4716 if (TREE_CODE (type) == ARRAY_TYPE)
4717 goto initialize_aggr;
4718 else if (TREE_CODE (init) == CONSTRUCTOR)
4720 if (TYPE_NON_AGGREGATE_CLASS (type))
4722 error ("%qD must be initialized by constructor, "
4723 "not by %<{...}%>",
4724 decl);
4725 init = error_mark_node;
4727 else
4728 goto dont_use_constructor;
4730 else
4732 int saved_stmts_are_full_exprs_p;
4734 initialize_aggr:
4735 saved_stmts_are_full_exprs_p = 0;
4736 if (building_stmt_tree ())
4738 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4739 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4741 init = build_aggr_init (decl, init, flags);
4742 if (building_stmt_tree ())
4743 current_stmt_tree ()->stmts_are_full_exprs_p =
4744 saved_stmts_are_full_exprs_p;
4745 return init;
4748 else
4750 dont_use_constructor:
4751 if (TREE_CODE (init) != TREE_VEC)
4753 init_code = store_init_value (decl, init);
4754 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4755 && DECL_INITIAL (decl)
4756 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4757 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4758 warning (0, "array %qD initialized by parenthesized string literal %qE",
4759 decl, DECL_INITIAL (decl));
4760 init = NULL;
4764 else if (DECL_EXTERNAL (decl))
4766 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4767 goto initialize_aggr;
4768 else if (IS_AGGR_TYPE (type))
4770 tree core_type = strip_array_types (type);
4772 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4773 error ("structure %qD with uninitialized const members", decl);
4774 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4775 error ("structure %qD with uninitialized reference members", decl);
4777 check_for_uninitialized_const_var (decl);
4779 else
4780 check_for_uninitialized_const_var (decl);
4782 if (init && init != error_mark_node)
4783 init_code = build2 (INIT_EXPR, type, decl, init);
4785 return init_code;
4788 /* If DECL is not a local variable, give it RTL. */
4790 static void
4791 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4793 int toplev = toplevel_bindings_p ();
4794 int defer_p;
4795 const char *filename;
4797 /* Set the DECL_ASSEMBLER_NAME for the object. */
4798 if (asmspec)
4800 /* The `register' keyword, when used together with an
4801 asm-specification, indicates that the variable should be
4802 placed in a particular register. */
4803 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4805 set_user_assembler_name (decl, asmspec);
4806 DECL_HARD_REGISTER (decl) = 1;
4808 else
4810 if (TREE_CODE (decl) == FUNCTION_DECL
4811 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4812 set_builtin_user_assembler_name (decl, asmspec);
4813 set_user_assembler_name (decl, asmspec);
4817 /* Handle non-variables up front. */
4818 if (TREE_CODE (decl) != VAR_DECL)
4820 rest_of_decl_compilation (decl, toplev, at_eof);
4821 return;
4824 /* If we see a class member here, it should be a static data
4825 member. */
4826 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4828 gcc_assert (TREE_STATIC (decl));
4829 /* An in-class declaration of a static data member should be
4830 external; it is only a declaration, and not a definition. */
4831 if (init == NULL_TREE)
4832 gcc_assert (DECL_EXTERNAL (decl));
4835 /* We don't create any RTL for local variables. */
4836 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4837 return;
4839 /* We defer emission of local statics until the corresponding
4840 DECL_EXPR is expanded. */
4841 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4843 /* We try to defer namespace-scope static constants so that they are
4844 not emitted into the object file unnecessarily. */
4845 filename = input_filename;
4846 if (!DECL_VIRTUAL_P (decl)
4847 && TREE_READONLY (decl)
4848 && DECL_INITIAL (decl) != NULL_TREE
4849 && DECL_INITIAL (decl) != error_mark_node
4850 && filename != NULL
4851 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4852 && toplev
4853 && !TREE_PUBLIC (decl))
4855 /* Fool with the linkage of static consts according to #pragma
4856 interface. */
4857 struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
4858 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4860 TREE_PUBLIC (decl) = 1;
4861 DECL_EXTERNAL (decl) = finfo->interface_only;
4864 defer_p = 1;
4866 /* Likewise for template instantiations. */
4867 else if (DECL_LANG_SPECIFIC (decl)
4868 && DECL_IMPLICIT_INSTANTIATION (decl))
4869 defer_p = 1;
4871 /* If we're not deferring, go ahead and assemble the variable. */
4872 if (!defer_p)
4873 rest_of_decl_compilation (decl, toplev, at_eof);
4876 /* Generate code to initialize DECL (a local variable). */
4878 static void
4879 initialize_local_var (tree decl, tree init)
4881 tree type = TREE_TYPE (decl);
4882 tree cleanup;
4884 gcc_assert (TREE_CODE (decl) == VAR_DECL
4885 || TREE_CODE (decl) == RESULT_DECL);
4886 gcc_assert (!TREE_STATIC (decl));
4888 if (DECL_SIZE (decl) == NULL_TREE)
4890 /* If we used it already as memory, it must stay in memory. */
4891 DECL_INITIAL (decl) = NULL_TREE;
4892 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4895 if (DECL_SIZE (decl) && type != error_mark_node)
4897 int already_used;
4899 /* Compute and store the initial value. */
4900 already_used = TREE_USED (decl) || TREE_USED (type);
4902 /* Perform the initialization. */
4903 if (init)
4905 int saved_stmts_are_full_exprs_p;
4907 gcc_assert (building_stmt_tree ());
4908 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4909 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4910 finish_expr_stmt (init);
4911 current_stmt_tree ()->stmts_are_full_exprs_p =
4912 saved_stmts_are_full_exprs_p;
4915 /* Set this to 0 so we can tell whether an aggregate which was
4916 initialized was ever used. Don't do this if it has a
4917 destructor, so we don't complain about the 'resource
4918 allocation is initialization' idiom. Now set
4919 attribute((unused)) on types so decls of that type will be
4920 marked used. (see TREE_USED, above.) */
4921 if (TYPE_NEEDS_CONSTRUCTING (type)
4922 && ! already_used
4923 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4924 && DECL_NAME (decl))
4925 TREE_USED (decl) = 0;
4926 else if (already_used)
4927 TREE_USED (decl) = 1;
4930 /* Generate a cleanup, if necessary. */
4931 cleanup = cxx_maybe_build_cleanup (decl);
4932 if (DECL_SIZE (decl) && cleanup)
4933 finish_decl_cleanup (decl, cleanup);
4936 /* DECL is a VAR_DECL for a compiler-generated variable with static
4937 storage duration (like a virtual table) whose initializer is a
4938 compile-time constant. INIT must be either a TREE_LIST of values,
4939 or a CONSTRUCTOR. Initialize the variable and provide it to the
4940 back end. */
4942 void
4943 initialize_artificial_var (tree decl, tree init)
4945 if (TREE_CODE (init) == TREE_LIST)
4946 init = build_constructor_from_list (NULL_TREE, init);
4947 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
4948 DECL_INITIAL (decl) = init;
4949 DECL_INITIALIZED_P (decl) = 1;
4950 determine_visibility (decl);
4951 layout_var_decl (decl);
4952 maybe_commonize_var (decl);
4953 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4956 /* Finish processing of a declaration;
4957 install its line number and initial value.
4958 If the length of an array type is not known before,
4959 it must be determined now, from the initial value, or it is an error.
4961 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
4962 true, then INIT is an integral constant expression.
4964 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4965 if the (init) syntax was used. */
4967 void
4968 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
4969 tree asmspec_tree, int flags)
4971 tree type;
4972 tree cleanup;
4973 const char *asmspec = NULL;
4974 int was_readonly = 0;
4975 bool var_definition_p = false;
4977 if (decl == error_mark_node)
4978 return;
4979 else if (! decl)
4981 if (init)
4982 error ("assignment (not initialization) in declaration");
4983 return;
4986 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
4988 /* Assume no cleanup is required. */
4989 cleanup = NULL_TREE;
4991 /* If a name was specified, get the string. */
4992 if (global_scope_p (current_binding_level))
4993 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4994 if (asmspec_tree)
4995 asmspec = TREE_STRING_POINTER (asmspec_tree);
4997 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4999 error ("cannot initialize %qD to namespace %qD", decl, init);
5000 init = NULL_TREE;
5003 if (current_class_type
5004 && CP_DECL_CONTEXT (decl) == current_class_type
5005 && TYPE_BEING_DEFINED (current_class_type)
5006 && (DECL_INITIAL (decl) || init))
5007 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5009 type = TREE_TYPE (decl);
5011 if (type == error_mark_node)
5012 goto finish_end;
5014 if (processing_template_decl)
5016 /* Add this declaration to the statement-tree. */
5017 if (at_function_scope_p ())
5018 add_decl_expr (decl);
5020 if (init)
5022 DECL_INITIAL (decl) = init;
5023 if (init_const_expr_p)
5025 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5026 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5027 TREE_CONSTANT (decl) = 1;
5031 if (TREE_CODE (decl) == VAR_DECL
5032 && !DECL_PRETTY_FUNCTION_P (decl)
5033 && !dependent_type_p (TREE_TYPE (decl)))
5034 maybe_deduce_size_from_array_init (decl, init);
5036 goto finish_end;
5039 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5040 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5042 /* Take care of TYPE_DECLs up front. */
5043 if (TREE_CODE (decl) == TYPE_DECL)
5045 if (type != error_mark_node
5046 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
5048 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5049 warning (0, "shadowing previous type declaration of %q#D", decl);
5050 set_identifier_type_value (DECL_NAME (decl), decl);
5053 /* If we have installed this as the canonical typedef for this
5054 type, and that type has not been defined yet, delay emitting
5055 the debug information for it, as we will emit it later. */
5056 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5057 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5058 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5060 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5061 at_eof);
5062 goto finish_end;
5065 /* A reference will be modified here, as it is initialized. */
5066 if (! DECL_EXTERNAL (decl)
5067 && TREE_READONLY (decl)
5068 && TREE_CODE (type) == REFERENCE_TYPE)
5070 was_readonly = 1;
5071 TREE_READONLY (decl) = 0;
5074 if (TREE_CODE (decl) == VAR_DECL)
5076 /* Only PODs can have thread-local storage. Other types may require
5077 various kinds of non-trivial initialization. */
5078 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5079 error ("%qD cannot be thread-local because it has non-POD type %qT",
5080 decl, TREE_TYPE (decl));
5081 /* Convert the initializer to the type of DECL, if we have not
5082 already initialized DECL. */
5083 if (!DECL_INITIALIZED_P (decl)
5084 /* If !DECL_EXTERNAL then DECL is being defined. In the
5085 case of a static data member initialized inside the
5086 class-specifier, there can be an initializer even if DECL
5087 is *not* defined. */
5088 && (!DECL_EXTERNAL (decl) || init))
5090 if (init)
5092 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5093 if (init_const_expr_p)
5095 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5096 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5097 TREE_CONSTANT (decl) = 1;
5100 init = check_initializer (decl, init, flags, &cleanup);
5101 /* Thread-local storage cannot be dynamically initialized. */
5102 if (DECL_THREAD_LOCAL_P (decl) && init)
5104 error ("%qD is thread-local and so cannot be dynamically "
5105 "initialized", decl);
5106 init = NULL_TREE;
5109 /* Check that the initializer for a static data member was a
5110 constant. Although we check in the parser that the
5111 initializer is an integral constant expression, we do not
5112 simplify division-by-zero at the point at which it
5113 occurs. Therefore, in:
5115 struct S { static const int i = 7 / 0; };
5117 we issue an error at this point. It would
5118 probably be better to forbid division by zero in
5119 integral constant expressions. */
5120 if (DECL_EXTERNAL (decl) && init)
5122 error ("%qD cannot be initialized by a non-constant expression"
5123 " when being declared", decl);
5124 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5125 init = NULL_TREE;
5128 /* Handle:
5130 [dcl.init]
5132 The memory occupied by any object of static storage
5133 duration is zero-initialized at program startup before
5134 any other initialization takes place.
5136 We cannot create an appropriate initializer until after
5137 the type of DECL is finalized. If DECL_INITIAL is set,
5138 then the DECL is statically initialized, and any
5139 necessary zero-initialization has already been performed. */
5140 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5141 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5142 /*nelts=*/NULL_TREE,
5143 /*static_storage_p=*/true);
5144 /* Remember that the initialization for this variable has
5145 taken place. */
5146 DECL_INITIALIZED_P (decl) = 1;
5147 /* This declaration is the definition of this variable,
5148 unless we are initializing a static data member within
5149 the class specifier. */
5150 if (!DECL_EXTERNAL (decl))
5151 var_definition_p = true;
5153 /* If the variable has an array type, lay out the type, even if
5154 there is no initializer. It is valid to index through the
5155 array, and we must get TYPE_ALIGN set correctly on the array
5156 type. */
5157 else if (TREE_CODE (type) == ARRAY_TYPE)
5158 layout_type (type);
5161 /* Add this declaration to the statement-tree. This needs to happen
5162 after the call to check_initializer so that the DECL_EXPR for a
5163 reference temp is added before the DECL_EXPR for the reference itself. */
5164 if (at_function_scope_p ())
5165 add_decl_expr (decl);
5167 if (TREE_CODE (decl) == VAR_DECL)
5168 layout_var_decl (decl);
5170 /* Output the assembler code and/or RTL code for variables and functions,
5171 unless the type is an undefined structure or union.
5172 If not, it will get done when the type is completed. */
5173 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
5175 if (TREE_CODE (decl) == VAR_DECL)
5176 maybe_commonize_var (decl);
5178 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5180 /* Check for abstractness of the type. Notice that there is no
5181 need to strip array types here since the check for those types
5182 is already done within create_array_type_for_decl. */
5183 if (TREE_CODE (type) == FUNCTION_TYPE
5184 || TREE_CODE (type) == METHOD_TYPE)
5185 abstract_virtuals_error (decl, TREE_TYPE (type));
5186 else
5187 abstract_virtuals_error (decl, type);
5189 if (TREE_CODE (decl) == FUNCTION_DECL
5190 || TREE_TYPE (decl) == error_mark_node)
5191 /* No initialization required. */
5193 else if (DECL_EXTERNAL (decl)
5194 && ! (DECL_LANG_SPECIFIC (decl)
5195 && DECL_NOT_REALLY_EXTERN (decl)))
5197 if (init)
5198 DECL_INITIAL (decl) = init;
5200 else
5202 /* A variable definition. */
5203 if (DECL_FUNCTION_SCOPE_P (decl))
5205 /* Initialize the local variable. */
5206 if (processing_template_decl)
5207 DECL_INITIAL (decl) = init;
5208 else if (!TREE_STATIC (decl))
5209 initialize_local_var (decl, init);
5212 /* The variable is being defined, so determine its visibility.
5213 This needs to happen after the linkage is set. */
5214 determine_visibility (decl);
5216 /* If a variable is defined, and then a subsequent
5217 definition with external linkage is encountered, we will
5218 get here twice for the same variable. We want to avoid
5219 calling expand_static_init more than once. For variables
5220 that are not static data members, we can call
5221 expand_static_init only when we actually process the
5222 initializer. It is not legal to redeclare a static data
5223 member, so this issue does not arise in that case. */
5224 if (var_definition_p && TREE_STATIC (decl))
5225 expand_static_init (decl, init);
5229 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5230 reference, insert it in the statement-tree now. */
5231 if (cleanup)
5232 push_cleanup (decl, cleanup, false);
5234 finish_end:
5236 if (was_readonly)
5237 TREE_READONLY (decl) = 1;
5239 /* If this was marked 'used', be sure it will be output. */
5240 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5241 mark_decl_referenced (decl);
5244 /* This is here for a midend callback from c-common.c. */
5246 void
5247 finish_decl (tree decl, tree init, tree asmspec_tree)
5249 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5252 /* Returns a declaration for a VAR_DECL as if:
5254 extern "C" TYPE NAME;
5256 had been seen. Used to create compiler-generated global
5257 variables. */
5259 static tree
5260 declare_global_var (tree name, tree type)
5262 tree decl;
5264 push_to_top_level ();
5265 decl = build_decl (VAR_DECL, name, type);
5266 TREE_PUBLIC (decl) = 1;
5267 DECL_EXTERNAL (decl) = 1;
5268 DECL_ARTIFICIAL (decl) = 1;
5269 /* If the user has explicitly declared this variable (perhaps
5270 because the code we are compiling is part of a low-level runtime
5271 library), then it is possible that our declaration will be merged
5272 with theirs by pushdecl. */
5273 decl = pushdecl (decl);
5274 finish_decl (decl, NULL_TREE, NULL_TREE);
5275 pop_from_top_level ();
5277 return decl;
5280 /* Returns a pointer to the `atexit' function. Note that if
5281 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5282 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5284 static tree
5285 get_atexit_node (void)
5287 tree atexit_fndecl;
5288 tree arg_types;
5289 tree fn_type;
5290 tree fn_ptr_type;
5291 const char *name;
5292 bool use_aeabi_atexit;
5294 if (atexit_node)
5295 return atexit_node;
5297 if (flag_use_cxa_atexit)
5299 /* The declaration for `__cxa_atexit' is:
5301 int __cxa_atexit (void (*)(void *), void *, void *)
5303 We build up the argument types and then then function type
5304 itself. */
5306 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5307 /* First, build the pointer-to-function type for the first
5308 argument. */
5309 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5310 fn_type = build_function_type (void_type_node, arg_types);
5311 fn_ptr_type = build_pointer_type (fn_type);
5312 /* Then, build the rest of the argument types. */
5313 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5314 if (use_aeabi_atexit)
5316 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5317 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5319 else
5321 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5322 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5324 /* And the final __cxa_atexit type. */
5325 fn_type = build_function_type (integer_type_node, arg_types);
5326 fn_ptr_type = build_pointer_type (fn_type);
5327 if (use_aeabi_atexit)
5328 name = "__aeabi_atexit";
5329 else
5330 name = "__cxa_atexit";
5332 else
5334 /* The declaration for `atexit' is:
5336 int atexit (void (*)());
5338 We build up the argument types and then then function type
5339 itself. */
5340 fn_type = build_function_type (void_type_node, void_list_node);
5341 fn_ptr_type = build_pointer_type (fn_type);
5342 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5343 /* Build the final atexit type. */
5344 fn_type = build_function_type (integer_type_node, arg_types);
5345 name = "atexit";
5348 /* Now, build the function declaration. */
5349 push_lang_context (lang_name_c);
5350 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5351 mark_used (atexit_fndecl);
5352 pop_lang_context ();
5353 atexit_node = decay_conversion (atexit_fndecl);
5355 return atexit_node;
5358 /* Returns the __dso_handle VAR_DECL. */
5360 static tree
5361 get_dso_handle_node (void)
5363 if (dso_handle_node)
5364 return dso_handle_node;
5366 /* Declare the variable. */
5367 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5368 ptr_type_node);
5370 return dso_handle_node;
5373 /* Begin a new function with internal linkage whose job will be simply
5374 to destroy some particular variable. */
5376 static GTY(()) int start_cleanup_cnt;
5378 static tree
5379 start_cleanup_fn (void)
5381 char name[32];
5382 tree parmtypes;
5383 tree fntype;
5384 tree fndecl;
5386 push_to_top_level ();
5388 /* No need to mangle this. */
5389 push_lang_context (lang_name_c);
5391 /* Build the parameter-types. */
5392 parmtypes = void_list_node;
5393 /* Functions passed to __cxa_atexit take an additional parameter.
5394 We'll just ignore it. After we implement the new calling
5395 convention for destructors, we can eliminate the use of
5396 additional cleanup functions entirely in the -fnew-abi case. */
5397 if (flag_use_cxa_atexit)
5398 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5399 /* Build the function type itself. */
5400 fntype = build_function_type (void_type_node, parmtypes);
5401 /* Build the name of the function. */
5402 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5403 /* Build the function declaration. */
5404 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5405 /* It's a function with internal linkage, generated by the
5406 compiler. */
5407 TREE_PUBLIC (fndecl) = 0;
5408 DECL_ARTIFICIAL (fndecl) = 1;
5409 /* Make the function `inline' so that it is only emitted if it is
5410 actually needed. It is unlikely that it will be inlined, since
5411 it is only called via a function pointer, but we avoid unnecessary
5412 emissions this way. */
5413 DECL_INLINE (fndecl) = 1;
5414 DECL_DECLARED_INLINE_P (fndecl) = 1;
5415 DECL_INTERFACE_KNOWN (fndecl) = 1;
5416 /* Build the parameter. */
5417 if (flag_use_cxa_atexit)
5419 tree parmdecl;
5421 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5422 DECL_CONTEXT (parmdecl) = fndecl;
5423 TREE_USED (parmdecl) = 1;
5424 DECL_ARGUMENTS (fndecl) = parmdecl;
5427 pushdecl (fndecl);
5428 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5430 pop_lang_context ();
5432 return current_function_decl;
5435 /* Finish the cleanup function begun by start_cleanup_fn. */
5437 static void
5438 end_cleanup_fn (void)
5440 expand_or_defer_fn (finish_function (0));
5442 pop_from_top_level ();
5445 /* Generate code to handle the destruction of DECL, an object with
5446 static storage duration. */
5448 tree
5449 register_dtor_fn (tree decl)
5451 tree cleanup;
5452 tree compound_stmt;
5453 tree args;
5454 tree fcall;
5456 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5457 return void_zero_node;
5459 /* Call build_cleanup before we enter the anonymous function so that
5460 any access checks will be done relative to the current scope,
5461 rather than the scope of the anonymous function. */
5462 build_cleanup (decl);
5464 /* Now start the function. */
5465 cleanup = start_cleanup_fn ();
5467 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5468 to the original function, rather than the anonymous one. That
5469 will make the back-end think that nested functions are in use,
5470 which causes confusion. */
5472 push_deferring_access_checks (dk_no_check);
5473 fcall = build_cleanup (decl);
5474 pop_deferring_access_checks ();
5476 /* Create the body of the anonymous function. */
5477 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5478 finish_expr_stmt (fcall);
5479 finish_compound_stmt (compound_stmt);
5480 end_cleanup_fn ();
5482 /* Call atexit with the cleanup function. */
5483 cxx_mark_addressable (cleanup);
5484 mark_used (cleanup);
5485 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5486 if (flag_use_cxa_atexit)
5488 args = tree_cons (NULL_TREE,
5489 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5490 NULL_TREE);
5491 if (targetm.cxx.use_aeabi_atexit ())
5493 args = tree_cons (NULL_TREE, cleanup, args);
5494 args = tree_cons (NULL_TREE, null_pointer_node, args);
5496 else
5498 args = tree_cons (NULL_TREE, null_pointer_node, args);
5499 args = tree_cons (NULL_TREE, cleanup, args);
5502 else
5503 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5504 return build_function_call (get_atexit_node (), args);
5507 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5508 is its initializer. Generate code to handle the construction
5509 and destruction of DECL. */
5511 static void
5512 expand_static_init (tree decl, tree init)
5514 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5515 gcc_assert (TREE_STATIC (decl));
5517 /* Some variables require no initialization. */
5518 if (!init
5519 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5520 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5521 return;
5523 if (DECL_FUNCTION_SCOPE_P (decl))
5525 /* Emit code to perform this initialization but once. */
5526 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5527 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5528 tree guard, guard_addr, guard_addr_list;
5529 tree acquire_fn, release_fn, abort_fn;
5530 tree flag, begin;
5532 /* Emit code to perform this initialization but once. This code
5533 looks like:
5535 static <type> guard;
5536 if (!guard.first_byte) {
5537 if (__cxa_guard_acquire (&guard)) {
5538 bool flag = false;
5539 try {
5540 // Do initialization.
5541 flag = true; __cxa_guard_release (&guard);
5542 // Register variable for destruction at end of program.
5543 } catch {
5544 if (!flag) __cxa_guard_abort (&guard);
5548 Note that the `flag' variable is only set to 1 *after* the
5549 initialization is complete. This ensures that an exception,
5550 thrown during the construction, will cause the variable to
5551 reinitialized when we pass through this code again, as per:
5553 [stmt.dcl]
5555 If the initialization exits by throwing an exception, the
5556 initialization is not complete, so it will be tried again
5557 the next time control enters the declaration.
5559 This process should be thread-safe, too; multiple threads
5560 should not be able to initialize the variable more than
5561 once. */
5563 /* Create the guard variable. */
5564 guard = get_guard (decl);
5566 /* This optimization isn't safe on targets with relaxed memory
5567 consistency. On such targets we force synchronization in
5568 __cxa_guard_acquire. */
5569 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5571 /* Begin the conditional initialization. */
5572 if_stmt = begin_if_stmt ();
5573 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5574 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5577 if (flag_threadsafe_statics)
5579 guard_addr = build_address (guard);
5580 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5582 acquire_fn = get_identifier ("__cxa_guard_acquire");
5583 release_fn = get_identifier ("__cxa_guard_release");
5584 abort_fn = get_identifier ("__cxa_guard_abort");
5585 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5587 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5588 void_list_node);
5589 tree vfntype = build_function_type (void_type_node, argtypes);
5590 acquire_fn = push_library_fn
5591 (acquire_fn, build_function_type (integer_type_node, argtypes));
5592 release_fn = push_library_fn (release_fn, vfntype);
5593 abort_fn = push_library_fn (abort_fn, vfntype);
5595 else
5597 release_fn = identifier_global_value (release_fn);
5598 abort_fn = identifier_global_value (abort_fn);
5601 inner_if_stmt = begin_if_stmt ();
5602 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5603 inner_if_stmt);
5605 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5606 begin = get_target_expr (boolean_false_node);
5607 flag = TARGET_EXPR_SLOT (begin);
5609 TARGET_EXPR_CLEANUP (begin)
5610 = build3 (COND_EXPR, void_type_node, flag,
5611 void_zero_node,
5612 build_call (abort_fn, guard_addr_list));
5613 CLEANUP_EH_ONLY (begin) = 1;
5615 /* Do the initialization itself. */
5616 init = add_stmt_to_compound (begin, init);
5617 init = add_stmt_to_compound
5618 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5619 init = add_stmt_to_compound
5620 (init, build_call (release_fn, guard_addr_list));
5622 else
5623 init = add_stmt_to_compound (init, set_guard (guard));
5625 /* Use atexit to register a function for destroying this static
5626 variable. */
5627 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5629 finish_expr_stmt (init);
5631 if (flag_threadsafe_statics)
5633 finish_compound_stmt (inner_then_clause);
5634 finish_then_clause (inner_if_stmt);
5635 finish_if_stmt (inner_if_stmt);
5638 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5640 finish_compound_stmt (then_clause);
5641 finish_then_clause (if_stmt);
5642 finish_if_stmt (if_stmt);
5645 else
5646 static_aggregates = tree_cons (init, decl, static_aggregates);
5650 /* Make TYPE a complete type based on INITIAL_VALUE.
5651 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5652 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5653 3 if the initializer list is empty (in pedantic mode). */
5656 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5658 int failure;
5659 tree type, elt_type;
5661 if (initial_value)
5663 /* An array of character type can be initialized from a
5664 brace-enclosed string constant.
5666 FIXME: this code is duplicated from reshape_init. Probably
5667 we should just call reshape_init here? */
5668 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5669 && TREE_CODE (initial_value) == CONSTRUCTOR
5670 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5672 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5673 tree value = VEC_index (constructor_elt, v, 0)->value;
5675 if (TREE_CODE (value) == STRING_CST
5676 && VEC_length (constructor_elt, v) == 1)
5677 initial_value = value;
5681 failure = complete_array_type (ptype, initial_value, do_default);
5683 /* We can create the array before the element type is complete, which
5684 means that we didn't have these two bits set in the original type
5685 either. In completing the type, we are expected to propagate these
5686 bits. See also complete_type which does the same thing for arrays
5687 of fixed size. */
5688 type = *ptype;
5689 if (TYPE_DOMAIN (type))
5691 elt_type = TREE_TYPE (type);
5692 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5693 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5694 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5697 return failure;
5700 /* Return zero if something is declared to be a member of type
5701 CTYPE when in the context of CUR_TYPE. STRING is the error
5702 message to print in that case. Otherwise, quietly return 1. */
5704 static int
5705 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5707 if (ctype && ctype != cur_type)
5709 if (flags == DTOR_FLAG)
5710 error ("destructor for alien class %qT cannot be a member", ctype);
5711 else
5712 error ("constructor for alien class %qT cannot be a member", ctype);
5713 return 0;
5715 return 1;
5718 /* Subroutine of `grokdeclarator'. */
5720 /* Generate errors possibly applicable for a given set of specifiers.
5721 This is for ARM $7.1.2. */
5723 static void
5724 bad_specifiers (tree object,
5725 const char* type,
5726 int virtualp,
5727 int quals,
5728 int inlinep,
5729 int friendp,
5730 int raises)
5732 if (virtualp)
5733 error ("%qD declared as a %<virtual%> %s", object, type);
5734 if (inlinep)
5735 error ("%qD declared as an %<inline%> %s", object, type);
5736 if (quals)
5737 error ("%<const%> and %<volatile%> function specifiers on "
5738 "%qD invalid in %s declaration",
5739 object, type);
5740 if (friendp)
5741 error ("%q+D declared as a friend", object);
5742 if (raises
5743 && (TREE_CODE (object) == TYPE_DECL
5744 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5745 && !TYPE_REFFN_P (TREE_TYPE (object))
5746 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5747 error ("%q+D declared with an exception specification", object);
5750 /* DECL is a member function or static data member and is presently
5751 being defined. Check that the definition is taking place in a
5752 valid namespace. */
5754 static void
5755 check_class_member_definition_namespace (tree decl)
5757 /* These checks only apply to member functions and static data
5758 members. */
5759 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5760 || TREE_CODE (decl) == VAR_DECL);
5761 /* We check for problems with specializations in pt.c in
5762 check_specialization_namespace, where we can issue better
5763 diagnostics. */
5764 if (processing_specialization)
5765 return;
5766 /* There are no restrictions on the placement of
5767 explicit instantiations. */
5768 if (processing_explicit_instantiation)
5769 return;
5770 /* [class.mfct]
5772 A member function definition that appears outside of the
5773 class definition shall appear in a namespace scope enclosing
5774 the class definition.
5776 [class.static.data]
5778 The definition for a static data member shall appear in a
5779 namespace scope enclosing the member's class definition. */
5780 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5781 pedwarn ("definition of %qD is not in namespace enclosing %qT",
5782 decl, DECL_CONTEXT (decl));
5785 /* Build a PARM_DECL for the "this" parameter. TYPE is the
5786 METHOD_TYPE for a non-static member function; QUALS are the
5787 cv-qualifiers that apply to the function. */
5789 tree
5790 build_this_parm (tree type, cp_cv_quals quals)
5792 tree this_type;
5793 tree qual_type;
5794 tree parm;
5795 cp_cv_quals this_quals;
5797 this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
5798 /* The `this' parameter is implicitly `const'; it cannot be
5799 assigned to. */
5800 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
5801 qual_type = cp_build_qualified_type (this_type, this_quals);
5802 parm = build_artificial_parm (this_identifier, qual_type);
5803 cp_apply_type_quals_to_decl (this_quals, parm);
5804 return parm;
5807 /* CTYPE is class type, or null if non-class.
5808 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5809 or METHOD_TYPE.
5810 DECLARATOR is the function's name.
5811 PARMS is a chain of PARM_DECLs for the function.
5812 VIRTUALP is truthvalue of whether the function is virtual or not.
5813 FLAGS are to be passed through to `grokclassfn'.
5814 QUALS are qualifiers indicating whether the function is `const'
5815 or `volatile'.
5816 RAISES is a list of exceptions that this function can raise.
5817 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5818 not look, and -1 if we should not call `grokclassfn' at all.
5820 SFK is the kind of special function (if any) for the new function.
5822 Returns `NULL_TREE' if something goes wrong, after issuing
5823 applicable error messages. */
5825 static tree
5826 grokfndecl (tree ctype,
5827 tree type,
5828 tree declarator,
5829 tree parms,
5830 tree orig_declarator,
5831 int virtualp,
5832 enum overload_flags flags,
5833 cp_cv_quals quals,
5834 tree raises,
5835 int check,
5836 int friendp,
5837 int publicp,
5838 int inlinep,
5839 special_function_kind sfk,
5840 bool funcdef_flag,
5841 int template_count,
5842 tree in_namespace,
5843 tree* attrlist)
5845 tree decl;
5846 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5847 tree t;
5849 if (raises)
5850 type = build_exception_variant (type, raises);
5852 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5853 if (TREE_CODE (type) == METHOD_TYPE)
5855 tree parm;
5856 parm = build_this_parm (type, quals);
5857 TREE_CHAIN (parm) = parms;
5858 parms = parm;
5860 DECL_ARGUMENTS (decl) = parms;
5861 /* Propagate volatile out from type to decl. */
5862 if (TYPE_VOLATILE (type))
5863 TREE_THIS_VOLATILE (decl) = 1;
5865 if (friendp
5866 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5868 if (funcdef_flag)
5869 error
5870 ("defining explicit specialization %qD in friend declaration",
5871 orig_declarator);
5872 else
5874 tree fns = TREE_OPERAND (orig_declarator, 0);
5875 tree args = TREE_OPERAND (orig_declarator, 1);
5877 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5879 /* Something like `template <class T> friend void f<T>()'. */
5880 error ("invalid use of template-id %qD in declaration "
5881 "of primary template",
5882 orig_declarator);
5883 return NULL_TREE;
5887 /* A friend declaration of the form friend void f<>(). Record
5888 the information in the TEMPLATE_ID_EXPR. */
5889 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5891 if (TREE_CODE (fns) == COMPONENT_REF)
5893 /* Due to bison parser ickiness, we will have already looked
5894 up an operator_name or PFUNCNAME within the current class
5895 (see template_id in parse.y). If the current class contains
5896 such a name, we'll get a COMPONENT_REF here. Undo that. */
5898 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5899 == current_class_type);
5900 fns = TREE_OPERAND (fns, 1);
5902 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5903 || TREE_CODE (fns) == OVERLOAD);
5904 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5906 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5907 if (TREE_PURPOSE (t)
5908 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5910 error ("default arguments are not allowed in declaration "
5911 "of friend template specialization %qD",
5912 decl);
5913 return NULL_TREE;
5916 if (inlinep)
5918 error ("%<inline%> is not allowed in declaration of friend "
5919 "template specialization %qD",
5920 decl);
5921 return NULL_TREE;
5926 /* If this decl has namespace scope, set that up. */
5927 if (in_namespace)
5928 set_decl_namespace (decl, in_namespace, friendp);
5929 else if (!ctype)
5930 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5932 /* `main' and builtins have implicit 'C' linkage. */
5933 if ((MAIN_NAME_P (declarator)
5934 || (IDENTIFIER_LENGTH (declarator) > 10
5935 && IDENTIFIER_POINTER (declarator)[0] == '_'
5936 && IDENTIFIER_POINTER (declarator)[1] == '_'
5937 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5938 && current_lang_name == lang_name_cplusplus
5939 && ctype == NULL_TREE
5940 /* NULL_TREE means global namespace. */
5941 && DECL_CONTEXT (decl) == NULL_TREE)
5942 SET_DECL_LANGUAGE (decl, lang_c);
5944 /* Should probably propagate const out from type to decl I bet (mrs). */
5945 if (staticp)
5947 DECL_STATIC_FUNCTION_P (decl) = 1;
5948 DECL_CONTEXT (decl) = ctype;
5951 if (ctype)
5953 DECL_CONTEXT (decl) = ctype;
5954 if (funcdef_flag)
5955 check_class_member_definition_namespace (decl);
5958 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5960 if (processing_template_decl)
5961 error ("cannot declare %<::main%> to be a template");
5962 if (inlinep)
5963 error ("cannot declare %<::main%> to be inline");
5964 if (!publicp)
5965 error ("cannot declare %<::main%> to be static");
5966 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5967 integer_type_node))
5969 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
5970 tree newtype;
5971 error ("%<::main%> must return %<int%>");
5972 newtype = build_function_type (integer_type_node,
5973 oldtypeargs);
5974 TREE_TYPE (decl) = newtype;
5976 inlinep = 0;
5977 publicp = 1;
5980 /* Members of anonymous types and local classes have no linkage; make
5981 them internal. If a typedef is made later, this will be changed. */
5982 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5983 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5984 publicp = 0;
5986 if (publicp)
5988 /* [basic.link]: A name with no linkage (notably, the name of a class
5989 or enumeration declared in a local scope) shall not be used to
5990 declare an entity with linkage.
5992 Only check this for public decls for now. See core 319, 389. */
5993 t = no_linkage_check (TREE_TYPE (decl),
5994 /*relaxed_p=*/false);
5995 if (t)
5997 if (TYPE_ANONYMOUS_P (t))
5999 if (DECL_EXTERN_C_P (decl))
6000 /* Allow this; it's pretty common in C. */;
6001 else
6003 pedwarn ("non-local function %q#D uses anonymous type",
6004 decl);
6005 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6006 pedwarn ("%q+#D does not refer to the unqualified "
6007 "type, so it is not used for linkage",
6008 TYPE_NAME (t));
6011 else
6012 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6016 TREE_PUBLIC (decl) = publicp;
6017 if (! publicp)
6019 DECL_INTERFACE_KNOWN (decl) = 1;
6020 DECL_NOT_REALLY_EXTERN (decl) = 1;
6023 /* If the declaration was declared inline, mark it as such. */
6024 if (inlinep)
6025 DECL_DECLARED_INLINE_P (decl) = 1;
6026 /* We inline functions that are explicitly declared inline, or, when
6027 the user explicitly asks us to, all functions. */
6028 if (DECL_DECLARED_INLINE_P (decl)
6029 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6030 DECL_INLINE (decl) = 1;
6032 DECL_EXTERNAL (decl) = 1;
6033 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6035 error ("%smember function %qD cannot have cv-qualifier",
6036 (ctype ? "static " : "non-"), decl);
6037 quals = TYPE_UNQUALIFIED;
6040 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
6041 grok_op_properties (decl, /*complain=*/true);
6043 if (ctype && decl_function_context (decl))
6044 DECL_NO_STATIC_CHAIN (decl) = 1;
6046 if (funcdef_flag)
6047 /* Make the init_value nonzero so pushdecl knows this is not
6048 tentative. error_mark_node is replaced later with the BLOCK. */
6049 DECL_INITIAL (decl) = error_mark_node;
6051 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6052 TREE_NOTHROW (decl) = 1;
6054 /* Caller will do the rest of this. */
6055 if (check < 0)
6056 return decl;
6058 if (ctype != NULL_TREE)
6060 if (sfk == sfk_constructor)
6061 DECL_CONSTRUCTOR_P (decl) = 1;
6063 grokclassfn (ctype, decl, flags);
6066 decl = check_explicit_specialization (orig_declarator, decl,
6067 template_count,
6068 2 * funcdef_flag +
6069 4 * (friendp != 0));
6070 if (decl == error_mark_node)
6071 return NULL_TREE;
6073 if (attrlist)
6075 cplus_decl_attributes (&decl, *attrlist, 0);
6076 *attrlist = NULL_TREE;
6079 if (ctype != NULL_TREE
6080 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6081 && check)
6083 tree old_decl;
6085 old_decl = check_classfn (ctype, decl,
6086 (processing_template_decl
6087 > template_class_depth (ctype))
6088 ? current_template_parms
6089 : NULL_TREE);
6090 if (old_decl)
6092 tree ok;
6093 tree pushed_scope;
6095 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6096 /* Because grokfndecl is always supposed to return a
6097 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6098 here. We depend on our callers to figure out that its
6099 really a template that's being returned. */
6100 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6102 if (DECL_STATIC_FUNCTION_P (old_decl)
6103 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6104 /* Remove the `this' parm added by grokclassfn.
6105 XXX Isn't this done in start_function, too? */
6106 revert_static_member_fn (decl);
6107 if (DECL_ARTIFICIAL (old_decl))
6108 error ("definition of implicitly-declared %qD", old_decl);
6110 /* Since we've smashed OLD_DECL to its
6111 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6112 if (TREE_CODE (decl) == TEMPLATE_DECL)
6113 decl = DECL_TEMPLATE_RESULT (decl);
6115 /* Attempt to merge the declarations. This can fail, in
6116 the case of some invalid specialization declarations. */
6117 pushed_scope = push_scope (ctype);
6118 ok = duplicate_decls (decl, old_decl, friendp);
6119 if (pushed_scope)
6120 pop_scope (pushed_scope);
6121 if (!ok)
6123 error ("no %q#D member function declared in class %qT",
6124 decl, ctype);
6125 return NULL_TREE;
6127 return old_decl;
6131 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6132 return NULL_TREE;
6134 if (ctype == NULL_TREE || check)
6135 return decl;
6137 if (virtualp)
6138 DECL_VIRTUAL_P (decl) = 1;
6140 return decl;
6143 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6144 the linkage that DECL will receive in the object file. */
6146 static void
6147 set_linkage_for_static_data_member (tree decl)
6149 /* A static data member always has static storage duration and
6150 external linkage. Note that static data members are forbidden in
6151 local classes -- the only situation in which a class has
6152 non-external linkage. */
6153 TREE_PUBLIC (decl) = 1;
6154 TREE_STATIC (decl) = 1;
6155 /* For non-template classes, static data members are always put
6156 out in exactly those files where they are defined, just as
6157 with ordinary namespace-scope variables. */
6158 if (!processing_template_decl)
6159 DECL_INTERFACE_KNOWN (decl) = 1;
6162 /* Create a VAR_DECL named NAME with the indicated TYPE.
6164 If SCOPE is non-NULL, it is the class type or namespace containing
6165 the variable. If SCOPE is NULL, the variable should is created in
6166 the innermost enclosings scope. */
6168 static tree
6169 grokvardecl (tree type,
6170 tree name,
6171 const cp_decl_specifier_seq *declspecs,
6172 int initialized,
6173 int constp,
6174 tree scope)
6176 tree decl;
6177 tree explicit_scope;
6179 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6181 /* Compute the scope in which to place the variable, but remember
6182 whether or not that scope was explicitly specified by the user. */
6183 explicit_scope = scope;
6184 if (!scope)
6186 /* An explicit "extern" specifier indicates a namespace-scope
6187 variable. */
6188 if (declspecs->storage_class == sc_extern)
6189 scope = current_namespace;
6190 else if (!at_function_scope_p ())
6191 scope = current_scope ();
6194 if (scope
6195 && (/* If the variable is a namespace-scope variable declared in a
6196 template, we need DECL_LANG_SPECIFIC. */
6197 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6198 /* Similarly for namespace-scope variables with language linkage
6199 other than C++. */
6200 || (TREE_CODE (scope) == NAMESPACE_DECL
6201 && current_lang_name != lang_name_cplusplus)
6202 /* Similarly for static data members. */
6203 || TYPE_P (scope)))
6204 decl = build_lang_decl (VAR_DECL, name, type);
6205 else
6206 decl = build_decl (VAR_DECL, name, type);
6208 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6209 set_decl_namespace (decl, explicit_scope, 0);
6210 else
6211 DECL_CONTEXT (decl) = scope;
6213 if (declspecs->storage_class == sc_extern)
6215 DECL_THIS_EXTERN (decl) = 1;
6216 DECL_EXTERNAL (decl) = !initialized;
6219 if (DECL_CLASS_SCOPE_P (decl))
6221 set_linkage_for_static_data_member (decl);
6222 /* This function is only called with out-of-class definitions. */
6223 DECL_EXTERNAL (decl) = 0;
6224 check_class_member_definition_namespace (decl);
6226 /* At top level, either `static' or no s.c. makes a definition
6227 (perhaps tentative), and absence of `static' makes it public. */
6228 else if (toplevel_bindings_p ())
6230 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6231 && (DECL_THIS_EXTERN (decl) || ! constp));
6232 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6234 /* Not at top level, only `static' makes a static definition. */
6235 else
6237 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6238 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6241 if (declspecs->specs[(int)ds_thread])
6243 if (targetm.have_tls)
6244 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6245 else
6246 /* A mere warning is sure to result in improper semantics
6247 at runtime. Don't bother to allow this to compile. */
6248 error ("thread-local storage not supported for this target");
6251 if (TREE_PUBLIC (decl))
6253 /* [basic.link]: A name with no linkage (notably, the name of a class
6254 or enumeration declared in a local scope) shall not be used to
6255 declare an entity with linkage.
6257 Only check this for public decls for now. */
6258 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6259 if (t)
6261 if (TYPE_ANONYMOUS_P (t))
6263 if (DECL_EXTERN_C_P (decl))
6264 /* Allow this; it's pretty common in C. */
6266 else
6268 /* DRs 132, 319 and 389 seem to indicate types with
6269 no linkage can only be used to declare extern "C"
6270 entities. Since it's not always an error in the
6271 ISO C++ 90 Standard, we only issue a warning. */
6272 warning (0, "non-local variable %q#D uses anonymous type",
6273 decl);
6274 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6275 warning (0, "%q+#D does not refer to the unqualified "
6276 "type, so it is not used for linkage",
6277 TYPE_NAME (t));
6280 else
6281 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6284 else
6285 DECL_INTERFACE_KNOWN (decl) = 1;
6287 return decl;
6290 /* Create and return a canonical pointer to member function type, for
6291 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
6293 tree
6294 build_ptrmemfunc_type (tree type)
6296 tree field, fields;
6297 tree t;
6298 tree unqualified_variant = NULL_TREE;
6300 if (type == error_mark_node)
6301 return type;
6303 /* If a canonical type already exists for this type, use it. We use
6304 this method instead of type_hash_canon, because it only does a
6305 simple equality check on the list of field members. */
6307 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6308 return t;
6310 /* Make sure that we always have the unqualified pointer-to-member
6311 type first. */
6312 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6313 unqualified_variant
6314 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6316 t = make_aggr_type (RECORD_TYPE);
6317 xref_basetypes (t, NULL_TREE);
6319 /* Let the front-end know this is a pointer to member function... */
6320 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6321 /* ... and not really an aggregate. */
6322 SET_IS_AGGR_TYPE (t, 0);
6324 field = build_decl (FIELD_DECL, pfn_identifier, type);
6325 fields = field;
6327 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6328 TREE_CHAIN (field) = fields;
6329 fields = field;
6331 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6333 /* Zap out the name so that the back-end will give us the debugging
6334 information for this anonymous RECORD_TYPE. */
6335 TYPE_NAME (t) = NULL_TREE;
6337 /* If this is not the unqualified form of this pointer-to-member
6338 type, set the TYPE_MAIN_VARIANT for this type to be the
6339 unqualified type. Since they are actually RECORD_TYPEs that are
6340 not variants of each other, we must do this manually. */
6341 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6343 t = build_qualified_type (t, cp_type_quals (type));
6344 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6345 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6346 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6349 /* Cache this pointer-to-member type so that we can find it again
6350 later. */
6351 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6353 return t;
6356 /* Create and return a pointer to data member type. */
6358 tree
6359 build_ptrmem_type (tree class_type, tree member_type)
6361 if (TREE_CODE (member_type) == METHOD_TYPE)
6363 tree arg_types;
6365 arg_types = TYPE_ARG_TYPES (member_type);
6366 class_type = (cp_build_qualified_type
6367 (class_type,
6368 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6369 member_type
6370 = build_method_type_directly (class_type,
6371 TREE_TYPE (member_type),
6372 TREE_CHAIN (arg_types));
6373 return build_ptrmemfunc_type (build_pointer_type (member_type));
6375 else
6377 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6378 return build_offset_type (class_type, member_type);
6382 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6383 Check to see that the definition is valid. Issue appropriate error
6384 messages. Return 1 if the definition is particularly bad, or 0
6385 otherwise. */
6388 check_static_variable_definition (tree decl, tree type)
6390 /* Motion 10 at San Diego: If a static const integral data member is
6391 initialized with an integral constant expression, the initializer
6392 may appear either in the declaration (within the class), or in
6393 the definition, but not both. If it appears in the class, the
6394 member is a member constant. The file-scope definition is always
6395 required. */
6396 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6398 error ("invalid in-class initialization of static data member "
6399 "of non-integral type %qT",
6400 type);
6401 /* If we just return the declaration, crashes will sometimes
6402 occur. We therefore return void_type_node, as if this were a
6403 friend declaration, to cause callers to completely ignore
6404 this declaration. */
6405 return 1;
6407 else if (!CP_TYPE_CONST_P (type))
6408 error ("ISO C++ forbids in-class initialization of non-const "
6409 "static member %qD",
6410 decl);
6411 else if (pedantic && !INTEGRAL_TYPE_P (type))
6412 pedwarn ("ISO C++ forbids initialization of member constant "
6413 "%qD of non-integral type %qT", decl, type);
6415 return 0;
6418 /* Given the SIZE (i.e., number of elements) in an array, compute an
6419 appropriate index type for the array. If non-NULL, NAME is the
6420 name of the thing being declared. */
6422 tree
6423 compute_array_index_type (tree name, tree size)
6425 tree type;
6426 tree itype;
6428 if (error_operand_p (size))
6429 return error_mark_node;
6431 type = TREE_TYPE (size);
6432 /* The array bound must be an integer type. */
6433 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6435 if (name)
6436 error ("size of array %qD has non-integral type %qT", name, type);
6437 else
6438 error ("size of array has non-integral type %qT", type);
6439 size = integer_one_node;
6440 type = TREE_TYPE (size);
6443 if (abi_version_at_least (2)
6444 /* We should only handle value dependent expressions specially. */
6445 ? value_dependent_expression_p (size)
6446 /* But for abi-1, we handled all instances in templates. This
6447 effects the manglings produced. */
6448 : processing_template_decl)
6449 return build_index_type (build_min (MINUS_EXPR, sizetype,
6450 size, integer_one_node));
6452 /* The size might be the result of a cast. */
6453 STRIP_TYPE_NOPS (size);
6455 /* It might be a const variable or enumeration constant. */
6456 size = integral_constant_value (size);
6458 /* Normally, the array-bound will be a constant. */
6459 if (TREE_CODE (size) == INTEGER_CST)
6461 /* Check to see if the array bound overflowed. Make that an
6462 error, no matter how generous we're being. */
6463 int old_flag_pedantic_errors = flag_pedantic_errors;
6464 int old_pedantic = pedantic;
6465 pedantic = flag_pedantic_errors = 1;
6466 constant_expression_warning (size);
6467 pedantic = old_pedantic;
6468 flag_pedantic_errors = old_flag_pedantic_errors;
6470 /* An array must have a positive number of elements. */
6471 if (INT_CST_LT (size, integer_zero_node))
6473 if (name)
6474 error ("size of array %qD is negative", name);
6475 else
6476 error ("size of array is negative");
6477 size = integer_one_node;
6479 /* As an extension we allow zero-sized arrays. We always allow
6480 them in system headers because glibc uses them. */
6481 else if (integer_zerop (size) && pedantic && !in_system_header)
6483 if (name)
6484 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6485 else
6486 pedwarn ("ISO C++ forbids zero-size array");
6489 else if (TREE_CONSTANT (size))
6491 /* `(int) &fn' is not a valid array bound. */
6492 if (name)
6493 error ("size of array %qD is not an integral constant-expression",
6494 name);
6495 else
6496 error ("size of array is not an integral constant-expression");
6497 size = integer_one_node;
6499 else if (pedantic)
6501 if (name)
6502 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6503 else
6504 pedwarn ("ISO C++ forbids variable-size array");
6507 if (processing_template_decl && !TREE_CONSTANT (size))
6508 /* A variable sized array. */
6509 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6510 else
6512 HOST_WIDE_INT saved_processing_template_decl;
6514 /* Compute the index of the largest element in the array. It is
6515 one less than the number of elements in the array. We save
6516 and restore PROCESSING_TEMPLATE_DECL so that computations in
6517 cp_build_binary_op will be appropriately folded. */
6518 saved_processing_template_decl = processing_template_decl;
6519 processing_template_decl = 0;
6520 itype = cp_build_binary_op (MINUS_EXPR,
6521 cp_convert (ssizetype, size),
6522 cp_convert (ssizetype, integer_one_node));
6523 itype = fold (itype);
6524 processing_template_decl = saved_processing_template_decl;
6526 if (!TREE_CONSTANT (itype))
6527 /* A variable sized array. */
6528 itype = variable_size (itype);
6529 /* Make sure that there was no overflow when creating to a signed
6530 index type. (For example, on a 32-bit machine, an array with
6531 size 2^32 - 1 is too big.) */
6532 else if (TREE_CODE (itype) == INTEGER_CST
6533 && TREE_OVERFLOW (itype))
6535 error ("overflow in array dimension");
6536 TREE_OVERFLOW (itype) = 0;
6540 /* Create and return the appropriate index type. */
6541 return build_index_type (itype);
6544 /* Returns the scope (if any) in which the entity declared by
6545 DECLARATOR will be located. If the entity was declared with an
6546 unqualified name, NULL_TREE is returned. */
6548 tree
6549 get_scope_of_declarator (const cp_declarator *declarator)
6551 while (declarator && declarator->kind != cdk_id)
6552 declarator = declarator->declarator;
6554 /* If the declarator-id is a SCOPE_REF, the scope in which the
6555 declaration occurs is the first operand. */
6556 if (declarator
6557 && declarator->u.id.qualifying_scope)
6558 return declarator->u.id.qualifying_scope;
6560 /* Otherwise, the declarator is not a qualified name; the entity will
6561 be declared in the current scope. */
6562 return NULL_TREE;
6565 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6566 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6567 with this type. */
6569 static tree
6570 create_array_type_for_decl (tree name, tree type, tree size)
6572 tree itype = NULL_TREE;
6573 const char* error_msg;
6575 /* If things have already gone awry, bail now. */
6576 if (type == error_mark_node || size == error_mark_node)
6577 return error_mark_node;
6579 /* Assume that everything will go OK. */
6580 error_msg = NULL;
6582 /* There are some types which cannot be array elements. */
6583 switch (TREE_CODE (type))
6585 case VOID_TYPE:
6586 error_msg = "array of void";
6587 break;
6589 case FUNCTION_TYPE:
6590 error_msg = "array of functions";
6591 break;
6593 case REFERENCE_TYPE:
6594 error_msg = "array of references";
6595 break;
6597 case METHOD_TYPE:
6598 error_msg = "array of function members";
6599 break;
6601 default:
6602 break;
6605 /* If something went wrong, issue an error-message and return. */
6606 if (error_msg)
6608 if (name)
6609 error ("declaration of %qD as %s", name, error_msg);
6610 else
6611 error ("creating %s", error_msg);
6613 return error_mark_node;
6616 /* [dcl.array]
6618 The constant expressions that specify the bounds of the arrays
6619 can be omitted only for the first member of the sequence. */
6620 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6622 if (name)
6623 error ("declaration of %qD as multidimensional array must "
6624 "have bounds for all dimensions except the first",
6625 name);
6626 else
6627 error ("multidimensional array must have bounds for all "
6628 "dimensions except the first");
6630 return error_mark_node;
6633 /* Figure out the index type for the array. */
6634 if (size)
6635 itype = compute_array_index_type (name, size);
6637 /* [dcl.array]
6638 T is called the array element type; this type shall not be [...] an
6639 abstract class type. */
6640 abstract_virtuals_error (name, type);
6642 return build_cplus_array_type (type, itype);
6645 /* Check that it's OK to declare a function with the indicated TYPE.
6646 SFK indicates the kind of special function (if any) that this
6647 function is. OPTYPE is the type given in a conversion operator
6648 declaration, or the class type for a constructor/destructor.
6649 Returns the actual return type of the function; that
6650 may be different than TYPE if an error occurs, or for certain
6651 special functions. */
6653 static tree
6654 check_special_function_return_type (special_function_kind sfk,
6655 tree type,
6656 tree optype)
6658 switch (sfk)
6660 case sfk_constructor:
6661 if (type)
6662 error ("return type specification for constructor invalid");
6664 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6665 type = build_pointer_type (optype);
6666 else
6667 type = void_type_node;
6668 break;
6670 case sfk_destructor:
6671 if (type)
6672 error ("return type specification for destructor invalid");
6673 /* We can't use the proper return type here because we run into
6674 problems with ambiguous bases and covariant returns.
6675 Java classes are left unchanged because (void *) isn't a valid
6676 Java type, and we don't want to change the Java ABI. */
6677 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6678 type = build_pointer_type (void_type_node);
6679 else
6680 type = void_type_node;
6681 break;
6683 case sfk_conversion:
6684 if (type && !same_type_p (type, optype))
6685 error ("operator %qT declared to return %qT", optype, type);
6686 else if (type)
6687 pedwarn ("return type specified for %<operator %T%>", optype);
6688 type = optype;
6689 break;
6691 default:
6692 gcc_unreachable ();
6695 return type;
6698 /* A variable or data member (whose unqualified name is IDENTIFIER)
6699 has been declared with the indicated TYPE. If the TYPE is not
6700 acceptable, issue an error message and return a type to use for
6701 error-recovery purposes. */
6703 tree
6704 check_var_type (tree identifier, tree type)
6706 if (VOID_TYPE_P (type))
6708 if (!identifier)
6709 error ("unnamed variable or field declared void");
6710 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6712 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6713 error ("variable or field %qE declared void", identifier);
6715 else
6716 error ("variable or field declared void");
6717 type = integer_type_node;
6720 return type;
6723 /* Given declspecs and a declarator (abstract or otherwise), determine
6724 the name and type of the object declared and construct a DECL node
6725 for it.
6727 DECLSPECS is a chain of tree_list nodes whose value fields
6728 are the storage classes and type specifiers.
6730 DECL_CONTEXT says which syntactic context this declaration is in:
6731 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6732 FUNCDEF for a function definition. Like NORMAL but a few different
6733 error messages in each case. Return value may be zero meaning
6734 this definition is too screwy to try to parse.
6735 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6736 handle member functions (which have FIELD context).
6737 Return value may be zero meaning this definition is too screwy to
6738 try to parse.
6739 PARM for a parameter declaration (either within a function prototype
6740 or before a function body). Make a PARM_DECL, or return void_type_node.
6741 CATCHPARM for a parameter declaration before a catch clause.
6742 TYPENAME if for a typename (in a cast or sizeof).
6743 Don't make a DECL node; just return the ..._TYPE node.
6744 FIELD for a struct or union field; make a FIELD_DECL.
6745 BITFIELD for a field with specified width.
6746 INITIALIZED is 1 if the decl has an initializer.
6748 ATTRLIST is a pointer to the list of attributes, which may be NULL
6749 if there are none; *ATTRLIST may be modified if attributes from inside
6750 the declarator should be applied to the declaration.
6752 When this function is called, scoping variables (such as
6753 CURRENT_CLASS_TYPE) should reflect the scope in which the
6754 declaration occurs, not the scope in which the new declaration will
6755 be placed. For example, on:
6757 void S::f() { ... }
6759 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6760 should not be `S'. */
6762 tree
6763 grokdeclarator (const cp_declarator *declarator,
6764 const cp_decl_specifier_seq *declspecs,
6765 enum decl_context decl_context,
6766 int initialized,
6767 tree* attrlist)
6769 tree type = NULL_TREE;
6770 int longlong = 0;
6771 int virtualp, explicitp, friendp, inlinep, staticp;
6772 int explicit_int = 0;
6773 int explicit_char = 0;
6774 int defaulted_int = 0;
6775 tree dependent_name = NULL_TREE;
6777 tree typedef_decl = NULL_TREE;
6778 const char *name = NULL;
6779 tree typedef_type = NULL_TREE;
6780 /* True if this declarator is a function definition. */
6781 bool funcdef_flag = false;
6782 cp_declarator_kind innermost_code = cdk_error;
6783 int bitfield = 0;
6784 #if 0
6785 /* See the code below that used this. */
6786 tree decl_attr = NULL_TREE;
6787 #endif
6789 /* Keep track of what sort of function is being processed
6790 so that we can warn about default return values, or explicit
6791 return values which do not match prescribed defaults. */
6792 special_function_kind sfk = sfk_none;
6794 tree dname = NULL_TREE;
6795 tree ctor_return_type = NULL_TREE;
6796 enum overload_flags flags = NO_SPECIAL;
6797 /* cv-qualifiers that apply to the declarator, for a declaration of
6798 a member function. */
6799 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
6800 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
6801 int type_quals;
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 (dependent_name && !friendp)
7261 error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
7262 return error_mark_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 memfn_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 /* ISO C++ 12.4/2. A destructor may not be declared
7484 const or volatile. A destructor may not be
7485 static.
7487 ISO C++ 12.1. A constructor may not be declared
7488 const or volatile. A constructor may not be
7489 virtual. A constructor may not be static. */
7490 if (staticp == 2)
7491 error ((flags == DTOR_FLAG)
7492 ? "destructor cannot be static member function"
7493 : "constructor cannot be static member function");
7494 if (memfn_quals)
7496 error ((flags == DTOR_FLAG)
7497 ? "destructors may not be cv-qualified"
7498 : "constructors may not be cv-qualified");
7499 memfn_quals = TYPE_UNQUALIFIED;
7502 if (decl_context == FIELD
7503 && !member_function_or_else (ctype,
7504 current_class_type,
7505 flags))
7506 return error_mark_node;
7508 if (flags != DTOR_FLAG)
7510 /* It's a constructor. */
7511 if (explicitp == 1)
7512 explicitp = 2;
7513 if (virtualp)
7515 pedwarn ("constructors cannot be declared virtual");
7516 virtualp = 0;
7518 if (decl_context == FIELD
7519 && sfk != sfk_constructor)
7520 return error_mark_node;
7522 if (decl_context == FIELD)
7523 staticp = 0;
7525 else if (friendp)
7527 if (initialized)
7528 error ("can't initialize friend function %qs", name);
7529 if (virtualp)
7531 /* Cannot be both friend and virtual. */
7532 error ("virtual functions cannot be friends");
7533 friendp = 0;
7535 if (decl_context == NORMAL)
7536 error ("friend declaration not in class definition");
7537 if (current_function_decl && funcdef_flag)
7538 error ("can't define friend function %qs in a local "
7539 "class definition",
7540 name);
7543 arg_types = grokparms (declarator->u.function.parameters,
7544 &parms);
7546 if (inner_declarator
7547 && inner_declarator->kind == cdk_id
7548 && inner_declarator->u.id.sfk == sfk_destructor
7549 && arg_types != void_list_node)
7551 error ("destructors may not have parameters");
7552 arg_types = void_list_node;
7553 parms = NULL_TREE;
7556 type = build_function_type (type, arg_types);
7558 break;
7560 case cdk_pointer:
7561 case cdk_reference:
7562 case cdk_ptrmem:
7563 /* Filter out pointers-to-references and references-to-references.
7564 We can get these if a TYPE_DECL is used. */
7566 if (TREE_CODE (type) == REFERENCE_TYPE)
7568 error (declarator->kind == cdk_reference
7569 ? "cannot declare reference to %q#T"
7570 : "cannot declare pointer to %q#T", type);
7571 type = TREE_TYPE (type);
7573 else if (VOID_TYPE_P (type))
7575 if (declarator->kind == cdk_reference)
7576 error ("cannot declare reference to %q#T", type);
7577 else if (declarator->kind == cdk_ptrmem)
7578 error ("cannot declare pointer to %q#T member", type);
7581 /* We now know that the TYPE_QUALS don't apply to the decl,
7582 but to the target of the pointer. */
7583 type_quals = TYPE_UNQUALIFIED;
7585 if (declarator->kind == cdk_ptrmem
7586 && (TREE_CODE (type) == FUNCTION_TYPE || memfn_quals))
7588 memfn_quals |= cp_type_quals (type);
7589 type = build_memfn_type (type,
7590 declarator->u.pointer.class_type,
7591 memfn_quals);
7592 memfn_quals = TYPE_UNQUALIFIED;
7595 if (declarator->kind == cdk_reference)
7597 if (!VOID_TYPE_P (type))
7598 type = build_reference_type (type);
7600 else if (TREE_CODE (type) == METHOD_TYPE)
7601 type = build_ptrmemfunc_type (build_pointer_type (type));
7602 else if (declarator->kind == cdk_ptrmem)
7604 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7605 != NAMESPACE_DECL);
7606 if (declarator->u.pointer.class_type == error_mark_node)
7607 /* We will already have complained. */
7608 type = error_mark_node;
7609 else
7610 type = build_ptrmem_type (declarator->u.pointer.class_type,
7611 type);
7613 else
7614 type = build_pointer_type (type);
7616 /* Process a list of type modifier keywords (such as
7617 const or volatile) that were given inside the `*' or `&'. */
7619 if (declarator->u.pointer.qualifiers)
7621 type
7622 = cp_build_qualified_type (type,
7623 declarator->u.pointer.qualifiers);
7624 type_quals = cp_type_quals (type);
7626 ctype = NULL_TREE;
7627 break;
7629 case cdk_error:
7630 break;
7632 default:
7633 gcc_unreachable ();
7637 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7638 && TREE_CODE (type) != FUNCTION_TYPE
7639 && TREE_CODE (type) != METHOD_TYPE)
7641 error ("template-id %qD used as a declarator",
7642 unqualified_id);
7643 unqualified_id = dname;
7646 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7647 qualified with a class-name, turn it into a METHOD_TYPE, unless
7648 we know that the function is static. We take advantage of this
7649 opportunity to do other processing that pertains to entities
7650 explicitly declared to be class members. Note that if DECLARATOR
7651 is non-NULL, we know it is a cdk_id declarator; otherwise, we
7652 would not have exited the loop above. */
7653 if (declarator
7654 && declarator->u.id.qualifying_scope
7655 && TYPE_P (declarator->u.id.qualifying_scope))
7657 tree t;
7659 ctype = declarator->u.id.qualifying_scope;
7660 ctype = TYPE_MAIN_VARIANT (ctype);
7661 t = ctype;
7662 while (t != NULL_TREE && CLASS_TYPE_P (t))
7664 /* You're supposed to have one `template <...>' for every
7665 template class, but you don't need one for a full
7666 specialization. For example:
7668 template <class T> struct S{};
7669 template <> struct S<int> { void f(); };
7670 void S<int>::f () {}
7672 is correct; there shouldn't be a `template <>' for the
7673 definition of `S<int>::f'. */
7674 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7675 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7676 /* T is an explicit (not partial) specialization. All
7677 containing classes must therefore also be explicitly
7678 specialized. */
7679 break;
7680 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7681 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7682 template_count += 1;
7684 t = TYPE_MAIN_DECL (t);
7685 t = DECL_CONTEXT (t);
7688 if (ctype == current_class_type)
7690 if (friendp)
7691 pedwarn ("member functions are implicitly friends of their class");
7692 else
7693 pedwarn ("extra qualification %<%T::%> on member %qs",
7694 ctype, name);
7696 else if (/* If the qualifying type is already complete, then we
7697 can skip the following checks. */
7698 !COMPLETE_TYPE_P (ctype)
7699 && (/* If the function is being defined, then
7700 qualifying type must certainly be complete. */
7701 funcdef_flag
7702 /* A friend declaration of "T::f" is OK, even if
7703 "T" is a template parameter. But, if this
7704 function is not a friend, the qualifying type
7705 must be a class. */
7706 || (!friendp && !CLASS_TYPE_P (ctype))
7707 /* For a declaration, the type need not be
7708 complete, if either it is dependent (since there
7709 is no meaningful definition of complete in that
7710 case) or the qualifying class is currently being
7711 defined. */
7712 || !(dependent_type_p (ctype)
7713 || currently_open_class (ctype)))
7714 /* Check that the qualifying type is complete. */
7715 && !complete_type_or_else (ctype, NULL_TREE))
7716 return error_mark_node;
7717 else if (TREE_CODE (type) == FUNCTION_TYPE)
7719 tree sname = declarator->u.id.unqualified_name;
7721 if (current_class_type
7722 && (!friendp || funcdef_flag))
7724 error (funcdef_flag
7725 ? "cannot define member function %<%T::%s%> within %<%T%>"
7726 : "cannot declare member function %<%T::%s%> within %<%T%>",
7727 ctype, name, current_class_type);
7728 return error_mark_node;
7731 if (TREE_CODE (sname) == IDENTIFIER_NODE
7732 && NEW_DELETE_OPNAME_P (sname))
7733 /* Overloaded operator new and operator delete
7734 are always static functions. */
7736 else
7737 type = build_memfn_type (type, ctype, memfn_quals);
7739 else if (declspecs->specs[(int)ds_typedef]
7740 && current_class_type)
7742 error ("cannot declare member %<%T::%s%> within %qT",
7743 ctype, name, current_class_type);
7744 return error_mark_node;
7748 /* Now TYPE has the actual type. */
7750 if (returned_attrs)
7752 if (attrlist)
7753 *attrlist = chainon (returned_attrs, *attrlist);
7754 else
7755 attrlist = &returned_attrs;
7758 /* Did array size calculations overflow? */
7760 if (TREE_CODE (type) == ARRAY_TYPE
7761 && COMPLETE_TYPE_P (type)
7762 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7763 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7765 error ("size of array %qs is too large", name);
7766 /* If we proceed with the array type as it is, we'll eventually
7767 crash in tree_low_cst(). */
7768 type = error_mark_node;
7771 if ((decl_context == FIELD || decl_context == PARM)
7772 && !processing_template_decl
7773 && variably_modified_type_p (type, NULL_TREE))
7775 if (decl_context == FIELD)
7776 error ("data member may not have variably modified type %qT", type);
7777 else
7778 error ("parameter may not have variably modified type %qT", type);
7779 type = error_mark_node;
7782 if (explicitp == 1 || (explicitp && friendp))
7784 /* [dcl.fct.spec] The explicit specifier shall only be used in
7785 declarations of constructors within a class definition. */
7786 error ("only declarations of constructors can be %<explicit%>");
7787 explicitp = 0;
7790 if (storage_class == sc_mutable)
7792 if (decl_context != FIELD || friendp)
7794 error ("non-member %qs cannot be declared %<mutable%>", name);
7795 storage_class = sc_none;
7797 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7799 error ("non-object member %qs cannot be declared %<mutable%>", name);
7800 storage_class = sc_none;
7802 else if (TREE_CODE (type) == FUNCTION_TYPE
7803 || TREE_CODE (type) == METHOD_TYPE)
7805 error ("function %qs cannot be declared %<mutable%>", name);
7806 storage_class = sc_none;
7808 else if (staticp)
7810 error ("static %qs cannot be declared %<mutable%>", name);
7811 storage_class = sc_none;
7813 else if (type_quals & TYPE_QUAL_CONST)
7815 error ("const %qs cannot be declared %<mutable%>", name);
7816 storage_class = sc_none;
7820 /* If this is declaring a typedef name, return a TYPE_DECL. */
7821 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7823 tree decl;
7825 /* Note that the grammar rejects storage classes
7826 in typenames, fields or parameters. */
7827 if (current_lang_name == lang_name_java)
7828 TYPE_FOR_JAVA (type) = 1;
7830 /* This declaration:
7832 typedef void f(int) const;
7834 declares a function type which is not a member of any
7835 particular class, but which is cv-qualified; for
7836 example "f S::*" declares a pointer to a const-qualified
7837 member function of S. We record the cv-qualification in the
7838 function type. */
7839 if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
7840 type = cp_build_qualified_type (type, memfn_quals);
7842 if (decl_context == FIELD)
7843 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7844 else
7845 decl = build_decl (TYPE_DECL, unqualified_id, type);
7846 if (id_declarator && declarator->u.id.qualifying_scope)
7847 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7849 if (decl_context != FIELD)
7851 if (!current_function_decl)
7852 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7853 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7854 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7855 (current_function_decl)))
7856 /* The TYPE_DECL is "abstract" because there will be
7857 clones of this constructor/destructor, and there will
7858 be copies of this TYPE_DECL generated in those
7859 clones. */
7860 DECL_ABSTRACT (decl) = 1;
7862 else if (constructor_name_p (unqualified_id, current_class_type))
7863 pedwarn ("ISO C++ forbids nested type %qD with same name "
7864 "as enclosing class",
7865 unqualified_id);
7867 /* If the user declares "typedef struct {...} foo" then the
7868 struct will have an anonymous name. Fill that name in now.
7869 Nothing can refer to it, so nothing needs know about the name
7870 change. */
7871 if (type != error_mark_node
7872 && unqualified_id
7873 && TYPE_NAME (type)
7874 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7875 && TYPE_ANONYMOUS_P (type)
7876 /* Don't do this if there are attributes. */
7877 && (!attrlist || !*attrlist)
7878 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7880 tree oldname = TYPE_NAME (type);
7881 tree t;
7883 /* Replace the anonymous name with the real name everywhere. */
7884 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7885 if (TYPE_NAME (t) == oldname)
7886 TYPE_NAME (t) = decl;
7888 if (TYPE_LANG_SPECIFIC (type))
7889 TYPE_WAS_ANONYMOUS (type) = 1;
7891 /* If this is a typedef within a template class, the nested
7892 type is a (non-primary) template. The name for the
7893 template needs updating as well. */
7894 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7895 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7896 = TYPE_IDENTIFIER (type);
7898 /* FIXME remangle member functions; member functions of a
7899 type with external linkage have external linkage. */
7902 /* Any qualifiers on a function type typedef have already been
7903 dealt with. */
7904 if (memfn_quals && !ctype && TREE_CODE (type) == FUNCTION_TYPE)
7905 memfn_quals = TYPE_UNQUALIFIED;
7907 if (signed_p
7908 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7909 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7911 bad_specifiers (decl, "type", virtualp,
7912 memfn_quals != TYPE_UNQUALIFIED,
7913 inlinep, friendp, raises != NULL_TREE);
7915 return decl;
7918 /* Detect the case of an array type of unspecified size
7919 which came, as such, direct from a typedef name.
7920 We must copy the type, so that the array's domain can be
7921 individually set by the object's initializer. */
7923 if (type && typedef_type
7924 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7925 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7926 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7928 /* Detect where we're using a typedef of function type to declare a
7929 function. PARMS will not be set, so we must create it now. */
7931 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7933 tree decls = NULL_TREE;
7934 tree args;
7936 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7938 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7940 TREE_CHAIN (decl) = decls;
7941 decls = decl;
7944 parms = nreverse (decls);
7946 if (decl_context != TYPENAME)
7948 /* A cv-qualifier-seq shall only be part of the function type
7949 for a non-static member function. [8.3.5/4 dcl.fct] */
7950 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7951 && (current_class_type == NULL_TREE || staticp) )
7953 error ("qualified function types cannot be used to declare %s functions",
7954 (staticp? "static member" : "free"));
7955 type = TYPE_MAIN_VARIANT (type);
7958 /* The qualifiers on the function type become the qualifiers on
7959 the non-static member function. */
7960 memfn_quals |= cp_type_quals (type);
7964 /* If this is a type name (such as, in a cast or sizeof),
7965 compute the type and return it now. */
7967 if (decl_context == TYPENAME)
7969 /* Note that the grammar rejects storage classes
7970 in typenames, fields or parameters. */
7971 if (type_quals != TYPE_UNQUALIFIED)
7972 type_quals = TYPE_UNQUALIFIED;
7974 /* Special case: "friend class foo" looks like a TYPENAME context. */
7975 if (friendp)
7977 if (type_quals != TYPE_UNQUALIFIED)
7979 error ("type qualifiers specified for friend class declaration");
7980 type_quals = TYPE_UNQUALIFIED;
7982 if (inlinep)
7984 error ("%<inline%> specified for friend class declaration");
7985 inlinep = 0;
7988 if (!current_aggr)
7990 /* Don't allow friend declaration without a class-key. */
7991 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7992 pedwarn ("template parameters cannot be friends");
7993 else if (TREE_CODE (type) == TYPENAME_TYPE)
7994 pedwarn ("friend declaration requires class-key, "
7995 "i.e. %<friend class %T::%D%>",
7996 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7997 else
7998 pedwarn ("friend declaration requires class-key, "
7999 "i.e. %<friend %#T%>",
8000 type);
8003 /* Only try to do this stuff if we didn't already give up. */
8004 if (type != integer_type_node)
8006 /* A friendly class? */
8007 if (current_class_type)
8008 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8009 /*complain=*/true);
8010 else
8011 error ("trying to make class %qT a friend of global scope",
8012 type);
8014 type = void_type_node;
8017 else if (memfn_quals)
8019 if (ctype == NULL_TREE)
8021 if (TREE_CODE (type) != METHOD_TYPE)
8022 error ("invalid qualifiers on non-member function type");
8023 else
8024 ctype = TYPE_METHOD_BASETYPE (type);
8026 if (ctype)
8027 type = build_memfn_type (type, ctype, memfn_quals);
8030 return type;
8032 else if (unqualified_id == NULL_TREE && decl_context != PARM
8033 && decl_context != CATCHPARM
8034 && TREE_CODE (type) != UNION_TYPE
8035 && ! bitfield)
8037 error ("abstract declarator %qT used as declaration", type);
8038 return error_mark_node;
8041 /* Only functions may be declared using an operator-function-id. */
8042 if (unqualified_id
8043 && IDENTIFIER_OPNAME_P (unqualified_id)
8044 && TREE_CODE (type) != FUNCTION_TYPE
8045 && TREE_CODE (type) != METHOD_TYPE)
8047 error ("declaration of %qD as non-function", unqualified_id);
8048 return error_mark_node;
8051 /* We don't check parameter types here because we can emit a better
8052 error message later. */
8053 if (decl_context != PARM)
8054 type = check_var_type (unqualified_id, type);
8056 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8057 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8059 if (decl_context == PARM || decl_context == CATCHPARM)
8061 if (ctype || in_namespace)
8062 error ("cannot use %<::%> in parameter declaration");
8064 /* A parameter declared as an array of T is really a pointer to T.
8065 One declared as a function is really a pointer to a function.
8066 One declared as a member is really a pointer to member. */
8068 if (TREE_CODE (type) == ARRAY_TYPE)
8070 /* Transfer const-ness of array into that of type pointed to. */
8071 type = build_pointer_type (TREE_TYPE (type));
8072 type_quals = TYPE_UNQUALIFIED;
8074 else if (TREE_CODE (type) == FUNCTION_TYPE)
8075 type = build_pointer_type (type);
8079 tree decl;
8081 if (decl_context == PARM)
8083 decl = cp_build_parm_decl (unqualified_id, type);
8085 bad_specifiers (decl, "parameter", virtualp,
8086 memfn_quals != TYPE_UNQUALIFIED,
8087 inlinep, friendp, raises != NULL_TREE);
8089 else if (decl_context == FIELD)
8091 /* The C99 flexible array extension. */
8092 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8093 && TYPE_DOMAIN (type) == NULL_TREE)
8095 tree itype = compute_array_index_type (dname, integer_zero_node);
8096 type = build_cplus_array_type (TREE_TYPE (type), itype);
8099 if (type == error_mark_node)
8101 /* Happens when declaring arrays of sizes which
8102 are error_mark_node, for example. */
8103 decl = NULL_TREE;
8105 else if (in_namespace && !friendp)
8107 /* Something like struct S { int N::j; }; */
8108 error ("invalid use of %<::%>");
8109 decl = NULL_TREE;
8111 else if (TREE_CODE (type) == FUNCTION_TYPE)
8113 int publicp = 0;
8114 tree function_context;
8116 if (friendp == 0)
8118 if (ctype == NULL_TREE)
8119 ctype = current_class_type;
8121 if (ctype == NULL_TREE)
8123 error ("can't make %qD into a method -- not in a class",
8124 unqualified_id);
8125 return error_mark_node;
8128 /* ``A union may [ ... ] not [ have ] virtual functions.''
8129 ARM 9.5 */
8130 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8132 error ("function %qD declared virtual inside a union",
8133 unqualified_id);
8134 return error_mark_node;
8137 if (NEW_DELETE_OPNAME_P (unqualified_id))
8139 if (virtualp)
8141 error ("%qD cannot be declared virtual, since it "
8142 "is always static",
8143 unqualified_id);
8144 virtualp = 0;
8147 else if (staticp < 2)
8148 type = build_memfn_type (type, ctype, memfn_quals);
8151 /* Check that the name used for a destructor makes sense. */
8152 if (sfk == sfk_destructor)
8154 if (!ctype)
8156 gcc_assert (friendp);
8157 error ("expected qualified name in friend declaration "
8158 "for destructor %qD",
8159 id_declarator->u.id.unqualified_name);
8160 return error_mark_node;
8163 if (!same_type_p (TREE_OPERAND
8164 (id_declarator->u.id.unqualified_name, 0),
8165 ctype))
8167 error ("declaration of %qD as member of %qT",
8168 id_declarator->u.id.unqualified_name, ctype);
8169 return error_mark_node;
8173 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8174 function_context = (ctype != NULL_TREE) ?
8175 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8176 publicp = (! friendp || ! staticp)
8177 && function_context == NULL_TREE;
8178 decl = grokfndecl (ctype, type,
8179 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8180 ? unqualified_id : dname,
8181 parms,
8182 unqualified_id,
8183 virtualp, flags, memfn_quals, raises,
8184 friendp ? -1 : 0, friendp, publicp, inlinep,
8185 sfk,
8186 funcdef_flag, template_count, in_namespace, attrlist);
8187 if (decl == NULL_TREE)
8188 return error_mark_node;
8189 #if 0
8190 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8191 /* The decl and setting of decl_attr is also turned off. */
8192 decl = build_decl_attribute_variant (decl, decl_attr);
8193 #endif
8195 /* [class.conv.ctor]
8197 A constructor declared without the function-specifier
8198 explicit that can be called with a single parameter
8199 specifies a conversion from the type of its first
8200 parameter to the type of its class. Such a constructor
8201 is called a converting constructor. */
8202 if (explicitp == 2)
8203 DECL_NONCONVERTING_P (decl) = 1;
8204 else if (DECL_CONSTRUCTOR_P (decl))
8206 /* The constructor can be called with exactly one
8207 parameter if there is at least one parameter, and
8208 any subsequent parameters have default arguments.
8209 Ignore any compiler-added parms. */
8210 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8212 if (arg_types == void_list_node
8213 || (arg_types
8214 && TREE_CHAIN (arg_types)
8215 && TREE_CHAIN (arg_types) != void_list_node
8216 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8217 DECL_NONCONVERTING_P (decl) = 1;
8220 else if (TREE_CODE (type) == METHOD_TYPE)
8222 /* We only get here for friend declarations of
8223 members of other classes. */
8224 /* All method decls are public, so tell grokfndecl to set
8225 TREE_PUBLIC, also. */
8226 decl = grokfndecl (ctype, type,
8227 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8228 ? unqualified_id : dname,
8229 parms,
8230 unqualified_id,
8231 virtualp, flags, memfn_quals, raises,
8232 friendp ? -1 : 0, friendp, 1, 0, sfk,
8233 funcdef_flag, template_count, in_namespace,
8234 attrlist);
8235 if (decl == NULL_TREE)
8236 return error_mark_node;
8238 else if (!staticp && !dependent_type_p (type)
8239 && !COMPLETE_TYPE_P (complete_type (type))
8240 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8242 if (unqualified_id)
8243 error ("field %qD has incomplete type", unqualified_id);
8244 else
8245 error ("name %qT has incomplete type", type);
8247 /* If we're instantiating a template, tell them which
8248 instantiation made the field's type be incomplete. */
8249 if (current_class_type
8250 && TYPE_NAME (current_class_type)
8251 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8252 && declspecs->type
8253 && declspecs->type == type)
8254 error (" in instantiation of template %qT",
8255 current_class_type);
8257 type = error_mark_node;
8258 decl = NULL_TREE;
8260 else
8262 if (friendp)
8264 error ("%qE is neither function nor member function; "
8265 "cannot be declared friend", unqualified_id);
8266 friendp = 0;
8268 decl = NULL_TREE;
8271 if (friendp)
8273 /* Friends are treated specially. */
8274 if (ctype == current_class_type)
8275 ; /* We already issued a pedwarn. */
8276 else if (decl && DECL_NAME (decl))
8278 if (template_class_depth (current_class_type) == 0)
8280 decl = check_explicit_specialization
8281 (unqualified_id, decl, template_count,
8282 2 * funcdef_flag + 4);
8283 if (decl == error_mark_node)
8284 return error_mark_node;
8287 decl = do_friend (ctype, unqualified_id, decl,
8288 *attrlist, flags,
8289 funcdef_flag);
8290 return decl;
8292 else
8293 return error_mark_node;
8296 /* Structure field. It may not be a function, except for C++. */
8298 if (decl == NULL_TREE)
8300 if (initialized)
8302 if (!staticp)
8304 /* An attempt is being made to initialize a non-static
8305 member. But, from [class.mem]:
8307 4 A member-declarator can contain a
8308 constant-initializer only if it declares a static
8309 member (_class.static_) of integral or enumeration
8310 type, see _class.static.data_.
8312 This used to be relatively common practice, but
8313 the rest of the compiler does not correctly
8314 handle the initialization unless the member is
8315 static so we make it static below. */
8316 pedwarn ("ISO C++ forbids initialization of member %qD",
8317 unqualified_id);
8318 pedwarn ("making %qD static", unqualified_id);
8319 staticp = 1;
8322 if (uses_template_parms (type))
8323 /* We'll check at instantiation time. */
8325 else if (check_static_variable_definition (unqualified_id,
8326 type))
8327 /* If we just return the declaration, crashes
8328 will sometimes occur. We therefore return
8329 void_type_node, as if this was a friend
8330 declaration, to cause callers to completely
8331 ignore this declaration. */
8332 return error_mark_node;
8335 if (staticp)
8337 /* C++ allows static class members. All other work
8338 for this is done by grokfield. */
8339 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8340 set_linkage_for_static_data_member (decl);
8341 /* Even if there is an in-class initialization, DECL
8342 is considered undefined until an out-of-class
8343 definition is provided. */
8344 DECL_EXTERNAL (decl) = 1;
8346 if (thread_p)
8348 if (targetm.have_tls)
8349 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8350 else
8351 /* A mere warning is sure to result in improper
8352 semantics at runtime. Don't bother to allow this to
8353 compile. */
8354 error ("thread-local storage not supported for this target");
8357 else
8359 decl = build_decl (FIELD_DECL, unqualified_id, type);
8360 DECL_NONADDRESSABLE_P (decl) = bitfield;
8361 if (storage_class == sc_mutable)
8363 DECL_MUTABLE_P (decl) = 1;
8364 storage_class = sc_none;
8368 bad_specifiers (decl, "field", virtualp,
8369 memfn_quals != TYPE_UNQUALIFIED,
8370 inlinep, friendp, raises != NULL_TREE);
8373 else if (TREE_CODE (type) == FUNCTION_TYPE
8374 || TREE_CODE (type) == METHOD_TYPE)
8376 tree original_name;
8377 int publicp = 0;
8379 if (!unqualified_id)
8380 return error_mark_node;
8382 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8383 original_name = dname;
8384 else
8385 original_name = unqualified_id;
8387 if (storage_class == sc_auto)
8388 error ("storage class %<auto%> invalid for function %qs", name);
8389 else if (storage_class == sc_register)
8390 error ("storage class %<register%> invalid for function %qs", name);
8391 else if (thread_p)
8392 error ("storage class %<__thread%> invalid for function %qs", name);
8394 /* Function declaration not at top level.
8395 Storage classes other than `extern' are not allowed
8396 and `extern' makes no difference. */
8397 if (! toplevel_bindings_p ()
8398 && (storage_class == sc_static
8399 || declspecs->specs[(int)ds_inline])
8400 && pedantic)
8402 if (storage_class == sc_static)
8403 pedwarn ("%<static%> specified invalid for function %qs "
8404 "declared out of global scope", name);
8405 else
8406 pedwarn ("%<inline%> specifier invalid for function %qs "
8407 "declared out of global scope", name);
8410 if (ctype == NULL_TREE)
8412 if (virtualp)
8414 error ("virtual non-class function %qs", name);
8415 virtualp = 0;
8418 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8419 && !NEW_DELETE_OPNAME_P (original_name))
8420 type = build_method_type_directly (ctype,
8421 TREE_TYPE (type),
8422 TYPE_ARG_TYPES (type));
8424 /* Record presence of `static'. */
8425 publicp = (ctype != NULL_TREE
8426 || storage_class == sc_extern
8427 || storage_class != sc_static);
8429 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8430 virtualp, flags, memfn_quals, raises,
8431 1, friendp,
8432 publicp, inlinep, sfk, funcdef_flag,
8433 template_count, in_namespace, attrlist);
8434 if (decl == NULL_TREE)
8435 return error_mark_node;
8437 if (staticp == 1)
8439 int invalid_static = 0;
8441 /* Don't allow a static member function in a class, and forbid
8442 declaring main to be static. */
8443 if (TREE_CODE (type) == METHOD_TYPE)
8445 pedwarn ("cannot declare member function %qD to have "
8446 "static linkage", decl);
8447 invalid_static = 1;
8449 else if (current_function_decl)
8451 /* FIXME need arm citation */
8452 error ("cannot declare static function inside another function");
8453 invalid_static = 1;
8456 if (invalid_static)
8458 staticp = 0;
8459 storage_class = sc_none;
8463 else
8465 /* It's a variable. */
8467 /* An uninitialized decl with `extern' is a reference. */
8468 decl = grokvardecl (type, unqualified_id,
8469 declspecs,
8470 initialized,
8471 (type_quals & TYPE_QUAL_CONST) != 0,
8472 ctype ? ctype : in_namespace);
8473 bad_specifiers (decl, "variable", virtualp,
8474 memfn_quals != TYPE_UNQUALIFIED,
8475 inlinep, friendp, raises != NULL_TREE);
8477 if (ctype)
8479 DECL_CONTEXT (decl) = ctype;
8480 if (staticp == 1)
8482 pedwarn ("%<static%> may not be used when defining "
8483 "(as opposed to declaring) a static data member");
8484 staticp = 0;
8485 storage_class = sc_none;
8487 if (storage_class == sc_register && TREE_STATIC (decl))
8489 error ("static member %qD declared %<register%>", decl);
8490 storage_class = sc_none;
8492 if (storage_class == sc_extern && pedantic)
8494 pedwarn ("cannot explicitly declare member %q#D to have "
8495 "extern linkage",
8496 decl);
8497 storage_class = sc_none;
8502 /* Record `register' declaration for warnings on &
8503 and in case doing stupid register allocation. */
8505 if (storage_class == sc_register)
8506 DECL_REGISTER (decl) = 1;
8507 else if (storage_class == sc_extern)
8508 DECL_THIS_EXTERN (decl) = 1;
8509 else if (storage_class == sc_static)
8510 DECL_THIS_STATIC (decl) = 1;
8512 /* Record constancy and volatility. There's no need to do this
8513 when processing a template; we'll do this for the instantiated
8514 declaration based on the type of DECL. */
8515 if (!processing_template_decl)
8516 cp_apply_type_quals_to_decl (type_quals, decl);
8518 return decl;
8522 /* Subroutine of start_function. Ensure that each of the parameter
8523 types (as listed in PARMS) is complete, as is required for a
8524 function definition. */
8526 static void
8527 require_complete_types_for_parms (tree parms)
8529 for (; parms; parms = TREE_CHAIN (parms))
8531 if (dependent_type_p (TREE_TYPE (parms)))
8532 continue;
8533 if (!VOID_TYPE_P (TREE_TYPE (parms))
8534 && complete_type_or_else (TREE_TYPE (parms), parms))
8536 relayout_decl (parms);
8537 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8539 else
8540 /* grokparms or complete_type_or_else will have already issued
8541 an error. */
8542 TREE_TYPE (parms) = error_mark_node;
8546 /* Returns nonzero if T is a local variable. */
8549 local_variable_p (tree t)
8551 if ((TREE_CODE (t) == VAR_DECL
8552 /* A VAR_DECL with a context that is a _TYPE is a static data
8553 member. */
8554 && !TYPE_P (CP_DECL_CONTEXT (t))
8555 /* Any other non-local variable must be at namespace scope. */
8556 && !DECL_NAMESPACE_SCOPE_P (t))
8557 || (TREE_CODE (t) == PARM_DECL))
8558 return 1;
8560 return 0;
8563 /* Returns nonzero if T is an automatic local variable or a label.
8564 (These are the declarations that need to be remapped when the code
8565 containing them is duplicated.) */
8568 nonstatic_local_decl_p (tree t)
8570 return ((local_variable_p (t) && !TREE_STATIC (t))
8571 || TREE_CODE (t) == LABEL_DECL
8572 || TREE_CODE (t) == RESULT_DECL);
8575 /* Like local_variable_p, but suitable for use as a tree-walking
8576 function. */
8578 static tree
8579 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8580 void *data ATTRIBUTE_UNUSED)
8582 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8583 return *tp;
8584 else if (TYPE_P (*tp))
8585 *walk_subtrees = 0;
8587 return NULL_TREE;
8591 /* Check that ARG, which is a default-argument expression for a
8592 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8593 something goes wrong. DECL may also be a _TYPE node, rather than a
8594 DECL, if there is no DECL available. */
8596 tree
8597 check_default_argument (tree decl, tree arg)
8599 tree var;
8600 tree decl_type;
8602 if (TREE_CODE (arg) == DEFAULT_ARG)
8603 /* We get a DEFAULT_ARG when looking at an in-class declaration
8604 with a default argument. Ignore the argument for now; we'll
8605 deal with it after the class is complete. */
8606 return arg;
8608 if (TYPE_P (decl))
8610 decl_type = decl;
8611 decl = NULL_TREE;
8613 else
8614 decl_type = TREE_TYPE (decl);
8616 if (arg == error_mark_node
8617 || decl == error_mark_node
8618 || TREE_TYPE (arg) == error_mark_node
8619 || decl_type == error_mark_node)
8620 /* Something already went wrong. There's no need to check
8621 further. */
8622 return error_mark_node;
8624 /* [dcl.fct.default]
8626 A default argument expression is implicitly converted to the
8627 parameter type. */
8628 if (!TREE_TYPE (arg)
8629 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8631 if (decl)
8632 error ("default argument for %q#D has type %qT",
8633 decl, TREE_TYPE (arg));
8634 else
8635 error ("default argument for parameter of type %qT has type %qT",
8636 decl_type, TREE_TYPE (arg));
8638 return error_mark_node;
8641 /* [dcl.fct.default]
8643 Local variables shall not be used in default argument
8644 expressions.
8646 The keyword `this' shall not be used in a default argument of a
8647 member function. */
8648 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8649 NULL);
8650 if (var)
8652 error ("default argument %qE uses local variable %qD", arg, var);
8653 return error_mark_node;
8656 /* All is well. */
8657 return arg;
8660 /* Decode the list of parameter types for a function type.
8661 Given the list of things declared inside the parens,
8662 return a list of types.
8664 If this parameter does not end with an ellipsis, we append
8665 void_list_node.
8667 *PARMS is set to the chain of PARM_DECLs created. */
8669 static tree
8670 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8672 tree result = NULL_TREE;
8673 tree decls = NULL_TREE;
8674 int ellipsis = !first_parm || first_parm->ellipsis_p;
8675 cp_parameter_declarator *parm;
8676 int any_error = 0;
8678 for (parm = first_parm; parm != NULL; parm = parm->next)
8680 tree type = NULL_TREE;
8681 tree init = parm->default_argument;
8682 tree attrs;
8683 tree decl;
8685 if (parm == no_parameters)
8686 break;
8688 attrs = parm->decl_specifiers.attributes;
8689 parm->decl_specifiers.attributes = NULL_TREE;
8690 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8691 PARM, init != NULL_TREE, &attrs);
8692 if (! decl || TREE_TYPE (decl) == error_mark_node)
8693 continue;
8695 if (attrs)
8696 cplus_decl_attributes (&decl, attrs, 0);
8698 type = TREE_TYPE (decl);
8699 if (VOID_TYPE_P (type))
8701 if (same_type_p (type, void_type_node)
8702 && DECL_SELF_REFERENCE_P (type)
8703 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8704 /* this is a parmlist of `(void)', which is ok. */
8705 break;
8706 cxx_incomplete_type_error (decl, type);
8707 /* It's not a good idea to actually create parameters of
8708 type `void'; other parts of the compiler assume that a
8709 void type terminates the parameter list. */
8710 type = error_mark_node;
8711 TREE_TYPE (decl) = error_mark_node;
8714 if (type != error_mark_node)
8716 /* Top-level qualifiers on the parameters are
8717 ignored for function types. */
8718 type = cp_build_qualified_type (type, 0);
8719 if (TREE_CODE (type) == METHOD_TYPE)
8721 error ("parameter %qD invalidly declared method type", decl);
8722 type = build_pointer_type (type);
8723 TREE_TYPE (decl) = type;
8725 else if (abstract_virtuals_error (decl, type))
8726 any_error = 1; /* Seems like a good idea. */
8727 else if (POINTER_TYPE_P (type))
8729 /* [dcl.fct]/6, parameter types cannot contain pointers
8730 (references) to arrays of unknown bound. */
8731 tree t = TREE_TYPE (type);
8732 int ptr = TYPE_PTR_P (type);
8734 while (1)
8736 if (TYPE_PTR_P (t))
8737 ptr = 1;
8738 else if (TREE_CODE (t) != ARRAY_TYPE)
8739 break;
8740 else if (!TYPE_DOMAIN (t))
8741 break;
8742 t = TREE_TYPE (t);
8744 if (TREE_CODE (t) == ARRAY_TYPE)
8745 error ("parameter %qD includes %s to array of unknown "
8746 "bound %qT",
8747 decl, ptr ? "pointer" : "reference", t);
8750 if (any_error)
8751 init = NULL_TREE;
8752 else if (init && !processing_template_decl)
8753 init = check_default_argument (decl, init);
8756 TREE_CHAIN (decl) = decls;
8757 decls = decl;
8758 result = tree_cons (init, type, result);
8760 decls = nreverse (decls);
8761 result = nreverse (result);
8762 if (!ellipsis)
8763 result = chainon (result, void_list_node);
8764 *parms = decls;
8766 return result;
8770 /* D is a constructor or overloaded `operator='.
8772 Let T be the class in which D is declared. Then, this function
8773 returns:
8775 -1 if D's is an ill-formed constructor or copy assignment operator
8776 whose first parameter is of type `T'.
8777 0 if D is not a copy constructor or copy assignment
8778 operator.
8779 1 if D is a copy constructor or copy assignment operator whose
8780 first parameter is a reference to const qualified T.
8781 2 if D is a copy constructor or copy assignment operator whose
8782 first parameter is a reference to non-const qualified T.
8784 This function can be used as a predicate. Positive values indicate
8785 a copy constructor and nonzero values indicate a copy assignment
8786 operator. */
8789 copy_fn_p (tree d)
8791 tree args;
8792 tree arg_type;
8793 int result = 1;
8795 if (!DECL_FUNCTION_MEMBER_P (d))
8796 /* Non-members are invalid. We complained, but kept the declaration. */
8797 return 0;
8799 if (TREE_CODE (d) == TEMPLATE_DECL
8800 || (DECL_TEMPLATE_INFO (d)
8801 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
8802 /* Instantiations of template member functions are never copy
8803 functions. Note that member functions of templated classes are
8804 represented as template functions internally, and we must
8805 accept those as copy functions. */
8806 return 0;
8808 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8809 if (!args)
8810 return 0;
8812 arg_type = TREE_VALUE (args);
8813 if (arg_type == error_mark_node)
8814 return 0;
8816 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8818 /* Pass by value copy assignment operator. */
8819 result = -1;
8821 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8822 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8824 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8825 result = 2;
8827 else
8828 return 0;
8830 args = TREE_CHAIN (args);
8832 if (args && args != void_list_node && !TREE_PURPOSE (args))
8833 /* There are more non-optional args. */
8834 return 0;
8836 return result;
8839 /* Remember any special properties of member function DECL. */
8841 void grok_special_member_properties (tree decl)
8843 tree class_type;
8845 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8846 return;
8848 class_type = DECL_CONTEXT (decl);
8849 if (DECL_CONSTRUCTOR_P (decl))
8851 int ctor = copy_fn_p (decl);
8853 TYPE_HAS_CONSTRUCTOR (class_type) = 1;
8855 if (ctor > 0)
8857 /* [class.copy]
8859 A non-template constructor for class X is a copy
8860 constructor if its first parameter is of type X&, const
8861 X&, volatile X& or const volatile X&, and either there
8862 are no other parameters or else all other parameters have
8863 default arguments. */
8864 TYPE_HAS_INIT_REF (class_type) = 1;
8865 if (ctor > 1)
8866 TYPE_HAS_CONST_INIT_REF (class_type) = 1;
8868 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8869 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
8871 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8873 /* [class.copy]
8875 A non-template assignment operator for class X is a copy
8876 assignment operator if its parameter is of type X, X&, const
8877 X&, volatile X& or const volatile X&. */
8879 int assop = copy_fn_p (decl);
8881 if (assop)
8883 TYPE_HAS_ASSIGN_REF (class_type) = 1;
8884 if (assop != 1)
8885 TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
8890 /* Check a constructor DECL has the correct form. Complains
8891 if the class has a constructor of the form X(X). */
8894 grok_ctor_properties (tree ctype, tree decl)
8896 int ctor_parm = copy_fn_p (decl);
8898 if (ctor_parm < 0)
8900 /* [class.copy]
8902 A declaration of a constructor for a class X is ill-formed if
8903 its first parameter is of type (optionally cv-qualified) X
8904 and either there are no other parameters or else all other
8905 parameters have default arguments.
8907 We *don't* complain about member template instantiations that
8908 have this form, though; they can occur as we try to decide
8909 what constructor to use during overload resolution. Since
8910 overload resolution will never prefer such a constructor to
8911 the non-template copy constructor (which is either explicitly
8912 or implicitly defined), there's no need to worry about their
8913 existence. Theoretically, they should never even be
8914 instantiated, but that's hard to forestall. */
8915 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8916 ctype, ctype);
8917 return 0;
8920 return 1;
8923 /* An operator with this code is unary, but can also be binary. */
8925 static int
8926 ambi_op_p (enum tree_code code)
8928 return (code == INDIRECT_REF
8929 || code == ADDR_EXPR
8930 || code == UNARY_PLUS_EXPR
8931 || code == NEGATE_EXPR
8932 || code == PREINCREMENT_EXPR
8933 || code == PREDECREMENT_EXPR);
8936 /* An operator with this name can only be unary. */
8938 static int
8939 unary_op_p (enum tree_code code)
8941 return (code == TRUTH_NOT_EXPR
8942 || code == BIT_NOT_EXPR
8943 || code == COMPONENT_REF
8944 || code == TYPE_EXPR);
8947 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8948 errors are issued for invalid declarations. */
8950 void
8951 grok_op_properties (tree decl, bool complain)
8953 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8954 tree argtype;
8955 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8956 tree name = DECL_NAME (decl);
8957 enum tree_code operator_code;
8958 int arity;
8959 bool ellipsis_p;
8960 tree class_type;
8962 /* Count the number of arguments and check for ellipsis. */
8963 for (argtype = argtypes, arity = 0;
8964 argtype && argtype != void_list_node;
8965 argtype = TREE_CHAIN (argtype))
8966 ++arity;
8967 ellipsis_p = !argtype;
8969 class_type = DECL_CONTEXT (decl);
8970 if (class_type && !CLASS_TYPE_P (class_type))
8971 class_type = NULL_TREE;
8973 if (DECL_CONV_FN_P (decl))
8974 operator_code = TYPE_EXPR;
8975 else
8978 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8979 if (ansi_opname (CODE) == name) \
8981 operator_code = (CODE); \
8982 break; \
8984 else if (ansi_assopname (CODE) == name) \
8986 operator_code = (CODE); \
8987 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8988 break; \
8991 #include "operators.def"
8992 #undef DEF_OPERATOR
8994 gcc_unreachable ();
8996 while (0);
8997 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8998 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9000 if (class_type)
9001 switch (operator_code)
9003 case NEW_EXPR:
9004 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9005 break;
9007 case DELETE_EXPR:
9008 TYPE_GETS_DELETE (class_type) |= 1;
9009 break;
9011 case VEC_NEW_EXPR:
9012 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9013 break;
9015 case VEC_DELETE_EXPR:
9016 TYPE_GETS_DELETE (class_type) |= 2;
9017 break;
9019 default:
9020 break;
9023 /* [basic.std.dynamic.allocation]/1:
9025 A program is ill-formed if an allocation function is declared
9026 in a namespace scope other than global scope or declared static
9027 in global scope.
9029 The same also holds true for deallocation functions. */
9030 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9031 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9033 if (DECL_NAMESPACE_SCOPE_P (decl))
9035 if (CP_DECL_CONTEXT (decl) != global_namespace)
9036 error ("%qD may not be declared within a namespace", decl);
9037 else if (!TREE_PUBLIC (decl))
9038 error ("%qD may not be declared as static", decl);
9042 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9043 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9044 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9045 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9046 else
9048 /* An operator function must either be a non-static member function
9049 or have at least one parameter of a class, a reference to a class,
9050 an enumeration, or a reference to an enumeration. 13.4.0.6 */
9051 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9053 if (operator_code == TYPE_EXPR
9054 || operator_code == CALL_EXPR
9055 || operator_code == COMPONENT_REF
9056 || operator_code == ARRAY_REF
9057 || operator_code == NOP_EXPR)
9059 error ("%qD must be a nonstatic member function", decl);
9060 return;
9062 else
9064 tree p;
9066 if (DECL_STATIC_FUNCTION_P (decl))
9068 error ("%qD must be either a non-static member "
9069 "function or a non-member function", decl);
9070 return;
9073 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9075 tree arg = non_reference (TREE_VALUE (p));
9076 if (arg == error_mark_node)
9077 return;
9079 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9080 because these checks are performed even on
9081 template functions. */
9082 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9083 break;
9086 if (!p || p == void_list_node)
9088 if (!complain)
9089 return;
9091 error ("%qD must have an argument of class or "
9092 "enumerated type",
9093 decl);
9098 /* There are no restrictions on the arguments to an overloaded
9099 "operator ()". */
9100 if (operator_code == CALL_EXPR)
9101 return;
9103 /* Warn about conversion operators that will never be used. */
9104 if (IDENTIFIER_TYPENAME_P (name)
9105 && ! DECL_TEMPLATE_INFO (decl)
9106 && warn_conversion
9107 /* Warn only declaring the function; there is no need to
9108 warn again about out-of-class definitions. */
9109 && class_type == current_class_type)
9111 tree t = TREE_TYPE (name);
9112 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9113 const char *what = 0;
9115 if (ref)
9116 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9118 if (TREE_CODE (t) == VOID_TYPE)
9119 what = "void";
9120 else if (class_type)
9122 if (t == class_type)
9123 what = "the same type";
9124 /* Don't force t to be complete here. */
9125 else if (IS_AGGR_TYPE (t)
9126 && COMPLETE_TYPE_P (t)
9127 && DERIVED_FROM_P (t, class_type))
9128 what = "a base class";
9131 if (what)
9132 warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9133 "conversion operator",
9134 ref ? "a reference to " : "", what);
9137 if (operator_code == COND_EXPR)
9139 /* 13.4.0.3 */
9140 error ("ISO C++ prohibits overloading operator ?:");
9142 else if (ellipsis_p)
9143 error ("%qD must not have variable number of arguments", decl);
9144 else if (ambi_op_p (operator_code))
9146 if (arity == 1)
9147 /* We pick the one-argument operator codes by default, so
9148 we don't have to change anything. */
9150 else if (arity == 2)
9152 /* If we thought this was a unary operator, we now know
9153 it to be a binary operator. */
9154 switch (operator_code)
9156 case INDIRECT_REF:
9157 operator_code = MULT_EXPR;
9158 break;
9160 case ADDR_EXPR:
9161 operator_code = BIT_AND_EXPR;
9162 break;
9164 case UNARY_PLUS_EXPR:
9165 operator_code = PLUS_EXPR;
9166 break;
9168 case NEGATE_EXPR:
9169 operator_code = MINUS_EXPR;
9170 break;
9172 case PREINCREMENT_EXPR:
9173 operator_code = POSTINCREMENT_EXPR;
9174 break;
9176 case PREDECREMENT_EXPR:
9177 operator_code = POSTDECREMENT_EXPR;
9178 break;
9180 default:
9181 gcc_unreachable ();
9184 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9186 if ((operator_code == POSTINCREMENT_EXPR
9187 || operator_code == POSTDECREMENT_EXPR)
9188 && ! processing_template_decl
9189 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9191 if (methodp)
9192 error ("postfix %qD must take %<int%> as its argument",
9193 decl);
9194 else
9195 error
9196 ("postfix %qD must take %<int%> as its second argument",
9197 decl);
9200 else
9202 if (methodp)
9203 error ("%qD must take either zero or one argument", decl);
9204 else
9205 error ("%qD must take either one or two arguments", decl);
9208 /* More Effective C++ rule 6. */
9209 if (warn_ecpp
9210 && (operator_code == POSTINCREMENT_EXPR
9211 || operator_code == POSTDECREMENT_EXPR
9212 || operator_code == PREINCREMENT_EXPR
9213 || operator_code == PREDECREMENT_EXPR))
9215 tree arg = TREE_VALUE (argtypes);
9216 tree ret = TREE_TYPE (TREE_TYPE (decl));
9217 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9218 arg = TREE_TYPE (arg);
9219 arg = TYPE_MAIN_VARIANT (arg);
9220 if (operator_code == PREINCREMENT_EXPR
9221 || operator_code == PREDECREMENT_EXPR)
9223 if (TREE_CODE (ret) != REFERENCE_TYPE
9224 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9225 arg))
9226 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9227 build_reference_type (arg));
9229 else
9231 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9232 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9236 else if (unary_op_p (operator_code))
9238 if (arity != 1)
9240 if (methodp)
9241 error ("%qD must take %<void%>", decl);
9242 else
9243 error ("%qD must take exactly one argument", decl);
9246 else /* if (binary_op_p (operator_code)) */
9248 if (arity != 2)
9250 if (methodp)
9251 error ("%qD must take exactly one argument", decl);
9252 else
9253 error ("%qD must take exactly two arguments", decl);
9256 /* More Effective C++ rule 7. */
9257 if (warn_ecpp
9258 && (operator_code == TRUTH_ANDIF_EXPR
9259 || operator_code == TRUTH_ORIF_EXPR
9260 || operator_code == COMPOUND_EXPR))
9261 warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9262 decl);
9265 /* Effective C++ rule 23. */
9266 if (warn_ecpp
9267 && arity == 2
9268 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9269 && (operator_code == PLUS_EXPR
9270 || operator_code == MINUS_EXPR
9271 || operator_code == TRUNC_DIV_EXPR
9272 || operator_code == MULT_EXPR
9273 || operator_code == TRUNC_MOD_EXPR)
9274 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9275 warning (OPT_Weffc__, "%qD should return by value", decl);
9277 /* [over.oper]/8 */
9278 for (; argtypes && argtypes != void_list_node;
9279 argtypes = TREE_CHAIN (argtypes))
9280 if (TREE_PURPOSE (argtypes))
9282 TREE_PURPOSE (argtypes) = NULL_TREE;
9283 if (operator_code == POSTINCREMENT_EXPR
9284 || operator_code == POSTDECREMENT_EXPR)
9286 if (pedantic)
9287 pedwarn ("%qD cannot have default arguments", decl);
9289 else
9290 error ("%qD cannot have default arguments", decl);
9297 /* Return a string giving the keyword associate with CODE. */
9299 static const char *
9300 tag_name (enum tag_types code)
9302 switch (code)
9304 case record_type:
9305 return "struct";
9306 case class_type:
9307 return "class";
9308 case union_type:
9309 return "union";
9310 case enum_type:
9311 return "enum";
9312 case typename_type:
9313 return "typename";
9314 default:
9315 gcc_unreachable ();
9319 /* Name lookup in an elaborated-type-specifier (after the keyword
9320 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
9321 elaborated-type-specifier is invalid, issue a diagnostic and return
9322 error_mark_node; otherwise, return the *_TYPE to which it referred.
9323 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
9325 tree
9326 check_elaborated_type_specifier (enum tag_types tag_code,
9327 tree decl,
9328 bool allow_template_p)
9330 tree type;
9332 /* In the case of:
9334 struct S { struct S *p; };
9336 name lookup will find the TYPE_DECL for the implicit "S::S"
9337 typedef. Adjust for that here. */
9338 if (DECL_SELF_REFERENCE_P (decl))
9339 decl = TYPE_NAME (TREE_TYPE (decl));
9341 type = TREE_TYPE (decl);
9343 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9344 is false for this case as well. */
9345 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9347 error ("using template type parameter %qT after %qs",
9348 type, tag_name (tag_code));
9349 return error_mark_node;
9351 /* [dcl.type.elab]
9353 If the identifier resolves to a typedef-name or a template
9354 type-parameter, the elaborated-type-specifier is ill-formed.
9356 In other words, the only legitimate declaration to use in the
9357 elaborated type specifier is the implicit typedef created when
9358 the type is declared. */
9359 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9360 && tag_code != typename_type)
9362 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9363 error ("%q+D has a previous declaration here", decl);
9364 return error_mark_node;
9366 else if (TREE_CODE (type) != RECORD_TYPE
9367 && TREE_CODE (type) != UNION_TYPE
9368 && tag_code != enum_type
9369 && tag_code != typename_type)
9371 error ("%qT referred to as %qs", type, tag_name (tag_code));
9372 error ("%q+T has a previous declaration here", type);
9373 return error_mark_node;
9375 else if (TREE_CODE (type) != ENUMERAL_TYPE
9376 && tag_code == enum_type)
9378 error ("%qT referred to as enum", type);
9379 error ("%q+T has a previous declaration here", type);
9380 return error_mark_node;
9382 else if (!allow_template_p
9383 && TREE_CODE (type) == RECORD_TYPE
9384 && CLASSTYPE_IS_TEMPLATE (type))
9386 /* If a class template appears as elaborated type specifier
9387 without a template header such as:
9389 template <class T> class C {};
9390 void f(class C); // No template header here
9392 then the required template argument is missing. */
9393 error ("template argument required for %<%s %T%>",
9394 tag_name (tag_code),
9395 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9396 return error_mark_node;
9399 return type;
9402 /* Lookup NAME in elaborate type specifier in scope according to
9403 SCOPE and issue diagnostics if necessary.
9404 Return *_TYPE node upon success, NULL_TREE when the NAME is not
9405 found, and ERROR_MARK_NODE for type error. */
9407 static tree
9408 lookup_and_check_tag (enum tag_types tag_code, tree name,
9409 tag_scope scope, bool template_header_p)
9411 tree t;
9412 tree decl;
9413 if (scope == ts_global)
9415 /* First try ordinary name lookup, ignoring hidden class name
9416 injected via friend declaration. */
9417 decl = lookup_name_prefer_type (name, 2);
9418 /* If that fails, the name will be placed in the smallest
9419 non-class, non-function-prototype scope according to 3.3.1/5.
9420 We may already have a hidden name declared as friend in this
9421 scope. So lookup again but not ignoring hidden name.
9422 If we find one, that name will be made visible rather than
9423 creating a new tag. */
9424 if (!decl)
9425 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9427 else
9428 decl = lookup_type_scope (name, scope);
9430 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9431 decl = DECL_TEMPLATE_RESULT (decl);
9433 if (decl && TREE_CODE (decl) == TYPE_DECL)
9435 /* Look for invalid nested type:
9436 class C {
9437 class C {};
9438 }; */
9439 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9441 error ("%qD has the same name as the class in which it is "
9442 "declared",
9443 decl);
9444 return error_mark_node;
9447 /* Two cases we need to consider when deciding if a class
9448 template is allowed as an elaborated type specifier:
9449 1. It is a self reference to its own class.
9450 2. It comes with a template header.
9452 For example:
9454 template <class T> class C {
9455 class C *c1; // DECL_SELF_REFERENCE_P is true
9456 class D;
9458 template <class U> class C; // template_header_p is true
9459 template <class T> class C<T>::D {
9460 class C *c2; // DECL_SELF_REFERENCE_P is true
9461 }; */
9463 t = check_elaborated_type_specifier (tag_code,
9464 decl,
9465 template_header_p
9466 | DECL_SELF_REFERENCE_P (decl));
9467 return t;
9469 else
9470 return NULL_TREE;
9473 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9474 Define the tag as a forward-reference if it is not defined.
9476 If a declaration is given, process it here, and report an error if
9477 multiple declarations are not identical.
9479 SCOPE is TS_CURRENT when this is also a definition. Only look in
9480 the current frame for the name (since C++ allows new names in any
9481 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9482 declaration. Only look beginning from the current scope outward up
9483 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
9485 TEMPLATE_HEADER_P is true when this declaration is preceded by
9486 a set of template parameters. */
9488 tree
9489 xref_tag (enum tag_types tag_code, tree name,
9490 tag_scope scope, bool template_header_p)
9492 enum tree_code code;
9493 tree t;
9494 tree context = NULL_TREE;
9496 timevar_push (TV_NAME_LOOKUP);
9498 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9500 switch (tag_code)
9502 case record_type:
9503 case class_type:
9504 code = RECORD_TYPE;
9505 break;
9506 case union_type:
9507 code = UNION_TYPE;
9508 break;
9509 case enum_type:
9510 code = ENUMERAL_TYPE;
9511 break;
9512 default:
9513 gcc_unreachable ();
9516 /* In case of anonymous name, xref_tag is only called to
9517 make type node and push name. Name lookup is not required. */
9518 if (ANON_AGGRNAME_P (name))
9519 t = NULL_TREE;
9520 else
9521 t = lookup_and_check_tag (tag_code, name,
9522 scope, template_header_p);
9524 if (t == error_mark_node)
9525 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9527 if (scope != ts_current && t && current_class_type
9528 && template_class_depth (current_class_type)
9529 && template_header_p)
9531 /* Since SCOPE is not TS_CURRENT, we are not looking at a
9532 definition of this tag. Since, in addition, we are currently
9533 processing a (member) template declaration of a template
9534 class, we must be very careful; consider:
9536 template <class X>
9537 struct S1
9539 template <class U>
9540 struct S2
9541 { template <class V>
9542 friend struct S1; };
9544 Here, the S2::S1 declaration should not be confused with the
9545 outer declaration. In particular, the inner version should
9546 have a template parameter of level 2, not level 1. This
9547 would be particularly important if the member declaration
9548 were instead:
9550 template <class V = U> friend struct S1;
9552 say, when we should tsubst into `U' when instantiating
9553 S2. On the other hand, when presented with:
9555 template <class T>
9556 struct S1 {
9557 template <class U>
9558 struct S2 {};
9559 template <class U>
9560 friend struct S2;
9563 we must find the inner binding eventually. We
9564 accomplish this by making sure that the new type we
9565 create to represent this declaration has the right
9566 TYPE_CONTEXT. */
9567 context = TYPE_CONTEXT (t);
9568 t = NULL_TREE;
9571 if (! t)
9573 /* If no such tag is yet defined, create a forward-reference node
9574 and record it as the "definition".
9575 When a real declaration of this type is found,
9576 the forward-reference will be altered into a real type. */
9577 if (code == ENUMERAL_TYPE)
9579 error ("use of enum %q#D without previous declaration", name);
9580 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9582 else
9584 t = make_aggr_type (code);
9585 TYPE_CONTEXT (t) = context;
9586 t = pushtag (name, t, scope);
9589 else
9591 if (template_header_p && IS_AGGR_TYPE (t))
9592 redeclare_class_template (t, current_template_parms);
9593 else if (!processing_template_decl
9594 && CLASS_TYPE_P (t)
9595 && CLASSTYPE_IS_TEMPLATE (t))
9597 error ("redeclaration of %qT as a non-template", t);
9598 t = error_mark_node;
9601 /* Make injected friend class visible. */
9602 if (scope != ts_within_enclosing_non_class
9603 && hidden_name_p (TYPE_NAME (t)))
9605 DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9606 DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9608 if (TYPE_TEMPLATE_INFO (t))
9610 DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9611 DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9616 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9619 tree
9620 xref_tag_from_type (tree old, tree id, tag_scope scope)
9622 enum tag_types tag_kind;
9624 if (TREE_CODE (old) == RECORD_TYPE)
9625 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9626 else
9627 tag_kind = union_type;
9629 if (id == NULL_TREE)
9630 id = TYPE_IDENTIFIER (old);
9632 return xref_tag (tag_kind, id, scope, false);
9635 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9636 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9637 access_* node, and the TREE_VALUE is the type of the base-class.
9638 Non-NULL TREE_TYPE indicates virtual inheritance. */
9640 void
9641 xref_basetypes (tree ref, tree base_list)
9643 tree *basep;
9644 tree binfo, base_binfo;
9645 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9646 unsigned max_bases = 0; /* Maximum direct bases. */
9647 int i;
9648 tree default_access;
9649 tree igo_prev; /* Track Inheritance Graph Order. */
9651 if (ref == error_mark_node)
9652 return;
9654 /* The base of a derived class is private by default, all others are
9655 public. */
9656 default_access = (TREE_CODE (ref) == RECORD_TYPE
9657 && CLASSTYPE_DECLARED_CLASS (ref)
9658 ? access_private_node : access_public_node);
9660 /* First, make sure that any templates in base-classes are
9661 instantiated. This ensures that if we call ourselves recursively
9662 we do not get confused about which classes are marked and which
9663 are not. */
9664 basep = &base_list;
9665 while (*basep)
9667 tree basetype = TREE_VALUE (*basep);
9669 if (!(processing_template_decl && uses_template_parms (basetype))
9670 && !complete_type_or_else (basetype, NULL))
9671 /* An incomplete type. Remove it from the list. */
9672 *basep = TREE_CHAIN (*basep);
9673 else
9675 max_bases++;
9676 if (TREE_TYPE (*basep))
9677 max_vbases++;
9678 if (CLASS_TYPE_P (basetype))
9679 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9680 basep = &TREE_CHAIN (*basep);
9684 TYPE_MARKED_P (ref) = 1;
9686 /* The binfo slot should be empty, unless this is an (ill-formed)
9687 redefinition. */
9688 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9689 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9691 binfo = make_tree_binfo (max_bases);
9693 TYPE_BINFO (ref) = binfo;
9694 BINFO_OFFSET (binfo) = size_zero_node;
9695 BINFO_TYPE (binfo) = ref;
9697 if (max_bases)
9699 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9700 /* An aggregate cannot have baseclasses. */
9701 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9703 if (TREE_CODE (ref) == UNION_TYPE)
9704 error ("derived union %qT invalid", ref);
9707 if (max_bases > 1)
9709 if (TYPE_FOR_JAVA (ref))
9710 error ("Java class %qT cannot have multiple bases", ref);
9713 if (max_vbases)
9715 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9717 if (TYPE_FOR_JAVA (ref))
9718 error ("Java class %qT cannot have virtual bases", ref);
9721 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9723 tree access = TREE_PURPOSE (base_list);
9724 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9725 tree basetype = TREE_VALUE (base_list);
9727 if (access == access_default_node)
9728 access = default_access;
9730 if (TREE_CODE (basetype) == TYPE_DECL)
9731 basetype = TREE_TYPE (basetype);
9732 if (TREE_CODE (basetype) != RECORD_TYPE
9733 && TREE_CODE (basetype) != TYPENAME_TYPE
9734 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9735 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9737 error ("base type %qT fails to be a struct or class type",
9738 basetype);
9739 continue;
9742 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9743 TYPE_FOR_JAVA (ref) = 1;
9745 base_binfo = NULL_TREE;
9746 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9748 base_binfo = TYPE_BINFO (basetype);
9749 /* The original basetype could have been a typedef'd type. */
9750 basetype = BINFO_TYPE (base_binfo);
9752 /* Inherit flags from the base. */
9753 TYPE_HAS_NEW_OPERATOR (ref)
9754 |= TYPE_HAS_NEW_OPERATOR (basetype);
9755 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9756 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9757 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9758 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9759 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9760 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9761 CLASSTYPE_REPEATED_BASE_P (ref)
9762 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9765 /* We must do this test after we've seen through a typedef
9766 type. */
9767 if (TYPE_MARKED_P (basetype))
9769 if (basetype == ref)
9770 error ("recursive type %qT undefined", basetype);
9771 else
9772 error ("duplicate base type %qT invalid", basetype);
9773 continue;
9775 TYPE_MARKED_P (basetype) = 1;
9777 base_binfo = copy_binfo (base_binfo, basetype, ref,
9778 &igo_prev, via_virtual);
9779 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9780 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9782 BINFO_BASE_APPEND (binfo, base_binfo);
9783 BINFO_BASE_ACCESS_APPEND (binfo, access);
9786 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9787 /* If we have space in the vbase vector, we must have shared at
9788 least one of them, and are therefore diamond shaped. */
9789 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9791 /* Unmark all the types. */
9792 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9793 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9794 TYPE_MARKED_P (ref) = 0;
9796 /* Now see if we have a repeated base type. */
9797 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9799 for (base_binfo = binfo; base_binfo;
9800 base_binfo = TREE_CHAIN (base_binfo))
9802 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9804 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9805 break;
9807 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9809 for (base_binfo = binfo; base_binfo;
9810 base_binfo = TREE_CHAIN (base_binfo))
9811 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9812 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9813 else
9814 break;
9819 /* Begin compiling the definition of an enumeration type.
9820 NAME is its name.
9821 Returns the type object, as yet incomplete.
9822 Also records info about it so that build_enumerator
9823 may be used to declare the individual values as they are read. */
9825 tree
9826 start_enum (tree name)
9828 tree enumtype;
9830 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9832 /* If this is the real definition for a previous forward reference,
9833 fill in the contents in the same object that used to be the
9834 forward reference. */
9836 enumtype = lookup_and_check_tag (enum_type, name,
9837 /*tag_scope=*/ts_current,
9838 /*template_header_p=*/false);
9840 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9842 error ("multiple definition of %q#T", enumtype);
9843 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9844 /* Clear out TYPE_VALUES, and start again. */
9845 TYPE_VALUES (enumtype) = NULL_TREE;
9847 else
9849 /* In case of error, make a dummy enum to allow parsing to
9850 continue. */
9851 if (enumtype == error_mark_node)
9852 name = make_anon_name ();
9854 enumtype = make_node (ENUMERAL_TYPE);
9855 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9858 return enumtype;
9861 /* After processing and defining all the values of an enumeration type,
9862 install their decls in the enumeration type and finish it off.
9863 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9865 void
9866 finish_enum (tree enumtype)
9868 tree values;
9869 tree decl;
9870 tree value;
9871 tree minnode;
9872 tree maxnode;
9873 tree t;
9874 bool unsignedp;
9875 bool use_short_enum;
9876 int lowprec;
9877 int highprec;
9878 int precision;
9879 integer_type_kind itk;
9880 tree underlying_type = NULL_TREE;
9882 /* We built up the VALUES in reverse order. */
9883 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9885 /* For an enum defined in a template, just set the type of the values;
9886 all further processing is postponed until the template is
9887 instantiated. We need to set the type so that tsubst of a CONST_DECL
9888 works. */
9889 if (processing_template_decl)
9891 for (values = TYPE_VALUES (enumtype);
9892 values;
9893 values = TREE_CHAIN (values))
9894 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9895 if (at_function_scope_p ())
9896 add_stmt (build_min (TAG_DEFN, enumtype));
9897 return;
9900 /* Determine the minimum and maximum values of the enumerators. */
9901 if (TYPE_VALUES (enumtype))
9903 minnode = maxnode = NULL_TREE;
9905 for (values = TYPE_VALUES (enumtype);
9906 values;
9907 values = TREE_CHAIN (values))
9909 decl = TREE_VALUE (values);
9911 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9912 each enumerator has the type of its enumeration. Prior to the
9913 closing brace, the type of each enumerator is the type of its
9914 initializing value. */
9915 TREE_TYPE (decl) = enumtype;
9917 /* Update the minimum and maximum values, if appropriate. */
9918 value = DECL_INITIAL (decl);
9919 if (value == error_mark_node)
9920 value = integer_zero_node;
9921 /* Figure out what the minimum and maximum values of the
9922 enumerators are. */
9923 if (!minnode)
9924 minnode = maxnode = value;
9925 else if (tree_int_cst_lt (maxnode, value))
9926 maxnode = value;
9927 else if (tree_int_cst_lt (value, minnode))
9928 minnode = value;
9931 else
9932 /* [dcl.enum]
9934 If the enumerator-list is empty, the underlying type is as if
9935 the enumeration had a single enumerator with value 0. */
9936 minnode = maxnode = integer_zero_node;
9938 /* Compute the number of bits require to represent all values of the
9939 enumeration. We must do this before the type of MINNODE and
9940 MAXNODE are transformed, since min_precision relies on the
9941 TREE_TYPE of the value it is passed. */
9942 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9943 lowprec = min_precision (minnode, unsignedp);
9944 highprec = min_precision (maxnode, unsignedp);
9945 precision = MAX (lowprec, highprec);
9947 /* Determine the underlying type of the enumeration.
9949 [dcl.enum]
9951 The underlying type of an enumeration is an integral type that
9952 can represent all the enumerator values defined in the
9953 enumeration. It is implementation-defined which integral type is
9954 used as the underlying type for an enumeration except that the
9955 underlying type shall not be larger than int unless the value of
9956 an enumerator cannot fit in an int or unsigned int.
9958 We use "int" or an "unsigned int" as the underlying type, even if
9959 a smaller integral type would work, unless the user has
9960 explicitly requested that we use the smallest possible type. The
9961 user can request that for all enumerations with a command line
9962 flag, or for just one enumeration with an attribute. */
9964 use_short_enum = flag_short_enums
9965 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9967 for (itk = (use_short_enum ? itk_char : itk_int);
9968 itk != itk_none;
9969 itk++)
9971 underlying_type = integer_types[itk];
9972 if (TYPE_PRECISION (underlying_type) >= precision
9973 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9974 break;
9976 if (itk == itk_none)
9978 /* DR 377
9980 IF no integral type can represent all the enumerator values, the
9981 enumeration is ill-formed. */
9982 error ("no integral type can represent all of the enumerator values "
9983 "for %qT", enumtype);
9984 precision = TYPE_PRECISION (long_long_integer_type_node);
9985 underlying_type = integer_types[itk_unsigned_long_long];
9988 /* Compute the minium and maximum values for the type.
9990 [dcl.enum]
9992 For an enumeration where emin is the smallest enumerator and emax
9993 is the largest, the values of the enumeration are the values of the
9994 underlying type in the range bmin to bmax, where bmin and bmax are,
9995 respectively, the smallest and largest values of the smallest bit-
9996 field that can store emin and emax. */
9998 /* The middle-end currently assumes that types with TYPE_PRECISION
9999 narrower than their underlying type are suitably zero or sign
10000 extended to fill their mode. g++ doesn't make these guarantees.
10001 Until the middle-end can represent such paradoxical types, we
10002 set the TYPE_PRECISION to the width of the underlying type. */
10003 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10005 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10007 /* [dcl.enum]
10009 The value of sizeof() applied to an enumeration type, an object
10010 of an enumeration type, or an enumerator, is the value of sizeof()
10011 applied to the underlying type. */
10012 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10013 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10014 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10015 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10016 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10017 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10019 /* Convert each of the enumerators to the type of the underlying
10020 type of the enumeration. */
10021 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10023 location_t saved_location;
10025 decl = TREE_VALUE (values);
10026 saved_location = input_location;
10027 input_location = DECL_SOURCE_LOCATION (decl);
10028 value = perform_implicit_conversion (underlying_type,
10029 DECL_INITIAL (decl));
10030 input_location = saved_location;
10032 /* Do not clobber shared ints. */
10033 value = copy_node (value);
10035 TREE_TYPE (value) = enumtype;
10036 DECL_INITIAL (decl) = value;
10037 TREE_VALUE (values) = value;
10040 /* Fix up all variant types of this enum type. */
10041 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10043 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10044 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10045 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10046 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10047 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10048 TYPE_MODE (t) = TYPE_MODE (enumtype);
10049 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10050 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10051 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10052 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10055 /* Finish debugging output for this type. */
10056 rest_of_type_compilation (enumtype, namespace_bindings_p ());
10059 /* Build and install a CONST_DECL for an enumeration constant of the
10060 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10061 Assignment of sequential values by default is handled here. */
10063 void
10064 build_enumerator (tree name, tree value, tree enumtype)
10066 tree decl;
10067 tree context;
10068 tree type;
10070 /* If the VALUE was erroneous, pretend it wasn't there; that will
10071 result in the enum being assigned the next value in sequence. */
10072 if (value == error_mark_node)
10073 value = NULL_TREE;
10075 /* Remove no-op casts from the value. */
10076 if (value)
10077 STRIP_TYPE_NOPS (value);
10079 if (! processing_template_decl)
10081 /* Validate and default VALUE. */
10082 if (value != NULL_TREE)
10084 value = integral_constant_value (value);
10086 if (TREE_CODE (value) == INTEGER_CST)
10088 value = perform_integral_promotions (value);
10089 constant_expression_warning (value);
10091 else
10093 error ("enumerator value for %qD not integer constant", name);
10094 value = NULL_TREE;
10098 /* Default based on previous value. */
10099 if (value == NULL_TREE)
10101 if (TYPE_VALUES (enumtype))
10103 HOST_WIDE_INT hi;
10104 unsigned HOST_WIDE_INT lo;
10105 tree prev_value;
10106 bool overflowed;
10108 /* The next value is the previous value plus one. We can
10109 safely assume that the previous value is an INTEGER_CST.
10110 add_double doesn't know the type of the target expression,
10111 so we must check with int_fits_type_p as well. */
10112 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10113 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10114 TREE_INT_CST_HIGH (prev_value),
10115 1, 0, &lo, &hi);
10116 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10117 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10119 if (overflowed)
10121 error ("overflow in enumeration values at %qD", name);
10122 value = error_mark_node;
10125 else
10126 value = integer_zero_node;
10129 /* Remove no-op casts from the value. */
10130 STRIP_TYPE_NOPS (value);
10133 /* C++ associates enums with global, function, or class declarations. */
10134 context = current_scope ();
10136 /* Build the actual enumeration constant. Note that the enumeration
10137 constants have the type of their initializers until the
10138 enumeration is complete:
10140 [ dcl.enum ]
10142 Following the closing brace of an enum-specifier, each enumer-
10143 ator has the type of its enumeration. Prior to the closing
10144 brace, the type of each enumerator is the type of its
10145 initializing value.
10147 In finish_enum we will reset the type. Of course, if we're
10148 processing a template, there may be no value. */
10149 type = value ? TREE_TYPE (value) : NULL_TREE;
10151 if (context && context == current_class_type)
10152 /* This enum declaration is local to the class. We need the full
10153 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
10154 decl = build_lang_decl (CONST_DECL, name, type);
10155 else
10156 /* It's a global enum, or it's local to a function. (Note local to
10157 a function could mean local to a class method. */
10158 decl = build_decl (CONST_DECL, name, type);
10160 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10161 TREE_CONSTANT (decl) = 1;
10162 TREE_INVARIANT (decl) = 1;
10163 TREE_READONLY (decl) = 1;
10164 DECL_INITIAL (decl) = value;
10166 if (context && context == current_class_type)
10167 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10168 on the TYPE_FIELDS list for `S'. (That's so that you can say
10169 things like `S::i' later.) */
10170 finish_member_declaration (decl);
10171 else
10172 pushdecl (decl);
10174 /* Add this enumeration constant to the list for this type. */
10175 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10179 /* We're defining DECL. Make sure that it's type is OK. */
10181 static void
10182 check_function_type (tree decl, tree current_function_parms)
10184 tree fntype = TREE_TYPE (decl);
10185 tree return_type = complete_type (TREE_TYPE (fntype));
10187 /* In a function definition, arg types must be complete. */
10188 require_complete_types_for_parms (current_function_parms);
10190 if (dependent_type_p (return_type))
10191 return;
10192 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10194 tree args = TYPE_ARG_TYPES (fntype);
10196 error ("return type %q#T is incomplete", return_type);
10198 /* Make it return void instead. */
10199 if (TREE_CODE (fntype) == METHOD_TYPE)
10200 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10201 void_type_node,
10202 TREE_CHAIN (args));
10203 else
10204 fntype = build_function_type (void_type_node, args);
10205 TREE_TYPE (decl)
10206 = build_exception_variant (fntype,
10207 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10209 else
10210 abstract_virtuals_error (decl, TREE_TYPE (fntype));
10213 /* Create the FUNCTION_DECL for a function definition.
10214 DECLSPECS and DECLARATOR are the parts of the declaration;
10215 they describe the function's name and the type it returns,
10216 but twisted together in a fashion that parallels the syntax of C.
10218 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10219 DECLARATOR is really the DECL for the function we are about to
10220 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10221 indicating that the function is an inline defined in-class.
10223 This function creates a binding context for the function body
10224 as well as setting up the FUNCTION_DECL in current_function_decl.
10226 For C++, we must first check whether that datum makes any sense.
10227 For example, "class A local_a(1,2);" means that variable local_a
10228 is an aggregate of type A, which should have a constructor
10229 applied to it with the argument list [1, 2]. */
10231 void
10232 start_preparsed_function (tree decl1, tree attrs, int flags)
10234 tree ctype = NULL_TREE;
10235 tree fntype;
10236 tree restype;
10237 int doing_friend = 0;
10238 struct cp_binding_level *bl;
10239 tree current_function_parms;
10240 struct c_fileinfo *finfo
10241 = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
10242 bool honor_interface;
10244 /* Sanity check. */
10245 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10246 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10248 fntype = TREE_TYPE (decl1);
10249 if (TREE_CODE (fntype) == METHOD_TYPE)
10250 ctype = TYPE_METHOD_BASETYPE (fntype);
10252 /* ISO C++ 11.4/5. A friend function defined in a class is in
10253 the (lexical) scope of the class in which it is defined. */
10254 if (!ctype && DECL_FRIEND_P (decl1))
10256 ctype = DECL_FRIEND_CONTEXT (decl1);
10258 /* CTYPE could be null here if we're dealing with a template;
10259 for example, `inline friend float foo()' inside a template
10260 will have no CTYPE set. */
10261 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10262 ctype = NULL_TREE;
10263 else
10264 doing_friend = 1;
10267 if (DECL_DECLARED_INLINE_P (decl1)
10268 && lookup_attribute ("noinline", attrs))
10269 warning (0, "inline function %q+D given attribute noinline", decl1);
10271 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10272 /* This is a constructor, we must ensure that any default args
10273 introduced by this definition are propagated to the clones
10274 now. The clones are used directly in overload resolution. */
10275 adjust_clone_args (decl1);
10277 /* Sometimes we don't notice that a function is a static member, and
10278 build a METHOD_TYPE for it. Fix that up now. */
10279 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10280 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10282 revert_static_member_fn (decl1);
10283 ctype = NULL_TREE;
10286 /* Set up current_class_type, and enter the scope of the class, if
10287 appropriate. */
10288 if (ctype)
10289 push_nested_class (ctype);
10290 else if (DECL_STATIC_FUNCTION_P (decl1))
10291 push_nested_class (DECL_CONTEXT (decl1));
10293 /* Now that we have entered the scope of the class, we must restore
10294 the bindings for any template parameters surrounding DECL1, if it
10295 is an inline member template. (Order is important; consider the
10296 case where a template parameter has the same name as a field of
10297 the class.) It is not until after this point that
10298 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
10299 if (flags & SF_INCLASS_INLINE)
10300 maybe_begin_member_template_processing (decl1);
10302 /* Effective C++ rule 15. */
10303 if (warn_ecpp
10304 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10305 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10306 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
10308 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10309 error_mark_node is replaced below (in poplevel) with the BLOCK. */
10310 if (!DECL_INITIAL (decl1))
10311 DECL_INITIAL (decl1) = error_mark_node;
10313 /* This function exists in static storage.
10314 (This does not mean `static' in the C sense!) */
10315 TREE_STATIC (decl1) = 1;
10317 /* We must call push_template_decl after current_class_type is set
10318 up. (If we are processing inline definitions after exiting a
10319 class scope, current_class_type will be NULL_TREE until set above
10320 by push_nested_class.) */
10321 if (processing_template_decl)
10323 /* FIXME: Handle error_mark_node more gracefully. */
10324 tree newdecl1 = push_template_decl (decl1);
10325 if (newdecl1 != error_mark_node)
10326 decl1 = newdecl1;
10329 /* We are now in the scope of the function being defined. */
10330 current_function_decl = decl1;
10332 /* Save the parm names or decls from this function's declarator
10333 where store_parm_decls will find them. */
10334 current_function_parms = DECL_ARGUMENTS (decl1);
10336 /* Make sure the parameter and return types are reasonable. When
10337 you declare a function, these types can be incomplete, but they
10338 must be complete when you define the function. */
10339 check_function_type (decl1, current_function_parms);
10340 /* Make sure no default arg is missing. */
10341 check_default_args (decl1);
10343 /* Build the return declaration for the function. */
10344 restype = TREE_TYPE (fntype);
10345 /* Promote the value to int before returning it. */
10346 if (c_promoting_integer_type_p (restype))
10347 restype = type_promotes_to (restype);
10348 if (DECL_RESULT (decl1) == NULL_TREE)
10350 tree resdecl;
10352 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10353 DECL_ARTIFICIAL (resdecl) = 1;
10354 DECL_IGNORED_P (resdecl) = 1;
10355 DECL_RESULT (decl1) = resdecl;
10357 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10360 /* Initialize RTL machinery. We cannot do this until
10361 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10362 even when processing a template; this is how we get
10363 CFUN set up, and our per-function variables initialized.
10364 FIXME factor out the non-RTL stuff. */
10365 bl = current_binding_level;
10366 allocate_struct_function (decl1);
10367 current_binding_level = bl;
10369 /* Even though we're inside a function body, we still don't want to
10370 call expand_expr to calculate the size of a variable-sized array.
10371 We haven't necessarily assigned RTL to all variables yet, so it's
10372 not safe to try to expand expressions involving them. */
10373 cfun->x_dont_save_pending_sizes_p = 1;
10375 /* Start the statement-tree, start the tree now. */
10376 DECL_SAVED_TREE (decl1) = push_stmt_list ();
10378 /* Let the user know we're compiling this function. */
10379 announce_function (decl1);
10381 /* Record the decl so that the function name is defined.
10382 If we already have a decl for this name, and it is a FUNCTION_DECL,
10383 use the old decl. */
10384 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10386 /* A specialization is not used to guide overload resolution. */
10387 if (!DECL_FUNCTION_MEMBER_P (decl1)
10388 && !(DECL_USE_TEMPLATE (decl1) &&
10389 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10391 tree olddecl = pushdecl (decl1);
10393 if (olddecl == error_mark_node)
10394 /* If something went wrong when registering the declaration,
10395 use DECL1; we have to have a FUNCTION_DECL to use when
10396 parsing the body of the function. */
10398 else
10399 /* Otherwise, OLDDECL is either a previous declaration of
10400 the same function or DECL1 itself. */
10401 decl1 = olddecl;
10403 else
10405 /* We need to set the DECL_CONTEXT. */
10406 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10407 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10409 fntype = TREE_TYPE (decl1);
10411 /* If #pragma weak applies, mark the decl appropriately now.
10412 The pragma only applies to global functions. Because
10413 determining whether or not the #pragma applies involves
10414 computing the mangled name for the declaration, we cannot
10415 apply the pragma until after we have merged this declaration
10416 with any previous declarations; if the original declaration
10417 has a linkage specification, that specification applies to
10418 the definition as well, and may affect the mangled name. */
10419 if (!DECL_CONTEXT (decl1))
10420 maybe_apply_pragma_weak (decl1);
10423 /* Reset these in case the call to pushdecl changed them. */
10424 current_function_decl = decl1;
10425 cfun->decl = decl1;
10427 /* If we are (erroneously) defining a function that we have already
10428 defined before, wipe out what we knew before. */
10429 if (!DECL_PENDING_INLINE_P (decl1))
10430 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10432 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10434 /* We know that this was set up by `grokclassfn'. We do not
10435 wait until `store_parm_decls', since evil parse errors may
10436 never get us to that point. Here we keep the consistency
10437 between `current_class_type' and `current_class_ptr'. */
10438 tree t = DECL_ARGUMENTS (decl1);
10440 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10441 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10443 cp_function_chain->x_current_class_ref
10444 = build_indirect_ref (t, NULL);
10445 cp_function_chain->x_current_class_ptr = t;
10447 /* Constructors and destructors need to know whether they're "in
10448 charge" of initializing virtual base classes. */
10449 t = TREE_CHAIN (t);
10450 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10452 current_in_charge_parm = t;
10453 t = TREE_CHAIN (t);
10455 if (DECL_HAS_VTT_PARM_P (decl1))
10457 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10458 current_vtt_parm = t;
10462 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10463 /* Implicitly-defined methods (like the
10464 destructor for a class in which no destructor
10465 is explicitly declared) must not be defined
10466 until their definition is needed. So, we
10467 ignore interface specifications for
10468 compiler-generated functions. */
10469 && !DECL_ARTIFICIAL (decl1));
10471 if (DECL_INTERFACE_KNOWN (decl1))
10473 tree ctx = decl_function_context (decl1);
10475 if (DECL_NOT_REALLY_EXTERN (decl1))
10476 DECL_EXTERNAL (decl1) = 0;
10478 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10479 && TREE_PUBLIC (ctx))
10480 /* This is a function in a local class in an extern inline
10481 function. */
10482 comdat_linkage (decl1);
10484 /* If this function belongs to an interface, it is public.
10485 If it belongs to someone else's interface, it is also external.
10486 This only affects inlines and template instantiations. */
10487 else if (!finfo->interface_unknown && honor_interface)
10489 if (DECL_DECLARED_INLINE_P (decl1)
10490 || DECL_TEMPLATE_INSTANTIATION (decl1)
10491 || processing_template_decl)
10493 DECL_EXTERNAL (decl1)
10494 = (finfo->interface_only
10495 || (DECL_DECLARED_INLINE_P (decl1)
10496 && ! flag_implement_inlines
10497 && !DECL_VINDEX (decl1)));
10499 /* For WIN32 we also want to put these in linkonce sections. */
10500 maybe_make_one_only (decl1);
10502 else
10503 DECL_EXTERNAL (decl1) = 0;
10504 DECL_INTERFACE_KNOWN (decl1) = 1;
10505 /* If this function is in an interface implemented in this file,
10506 make sure that the backend knows to emit this function
10507 here. */
10508 if (!DECL_EXTERNAL (decl1))
10509 mark_needed (decl1);
10511 else if (finfo->interface_unknown && finfo->interface_only
10512 && honor_interface)
10514 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10515 interface, we will have both finfo->interface_unknown and
10516 finfo->interface_only set. In that case, we don't want to
10517 use the normal heuristics because someone will supply a
10518 #pragma implementation elsewhere, and deducing it here would
10519 produce a conflict. */
10520 comdat_linkage (decl1);
10521 DECL_EXTERNAL (decl1) = 0;
10522 DECL_INTERFACE_KNOWN (decl1) = 1;
10523 DECL_DEFER_OUTPUT (decl1) = 1;
10525 else
10527 /* This is a definition, not a reference.
10528 So clear DECL_EXTERNAL. */
10529 DECL_EXTERNAL (decl1) = 0;
10531 if ((DECL_DECLARED_INLINE_P (decl1)
10532 || DECL_TEMPLATE_INSTANTIATION (decl1))
10533 && ! DECL_INTERFACE_KNOWN (decl1)
10534 /* Don't try to defer nested functions for now. */
10535 && ! decl_function_context (decl1))
10536 DECL_DEFER_OUTPUT (decl1) = 1;
10537 else
10538 DECL_INTERFACE_KNOWN (decl1) = 1;
10541 /* Determine the ELF visibility attribute for the function. We must not
10542 do this before calling "pushdecl", as we must allow "duplicate_decls"
10543 to merge any attributes appropriately. We also need to wait until
10544 linkage is set. */
10545 if (!DECL_CLONED_FUNCTION_P (decl1))
10546 determine_visibility (decl1);
10548 begin_scope (sk_function_parms, decl1);
10550 ++function_depth;
10552 if (DECL_DESTRUCTOR_P (decl1)
10553 || (DECL_CONSTRUCTOR_P (decl1)
10554 && targetm.cxx.cdtor_returns_this ()))
10556 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10557 DECL_CONTEXT (cdtor_label) = current_function_decl;
10560 start_fname_decls ();
10562 store_parm_decls (current_function_parms);
10566 /* Like start_preparsed_function, except that instead of a
10567 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10569 Returns 1 on success. If the DECLARATOR is not suitable for a function
10570 (it defines a datum instead), we return 0, which tells
10571 yyparse to report a parse error. */
10574 start_function (cp_decl_specifier_seq *declspecs,
10575 const cp_declarator *declarator,
10576 tree attrs)
10578 tree decl1;
10580 if (have_extern_spec)
10582 declspecs->storage_class = sc_extern;
10583 /* This should only be done once on the outermost decl. */
10584 have_extern_spec = false;
10587 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10588 /* If the declarator is not suitable for a function definition,
10589 cause a syntax error. */
10590 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10591 return 0;
10593 if (DECL_MAIN_P (decl1))
10594 /* main must return int. grokfndecl should have corrected it
10595 (and issued a diagnostic) if the user got it wrong. */
10596 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10597 integer_type_node));
10599 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10601 return 1;
10604 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10605 FN. */
10607 static bool
10608 use_eh_spec_block (tree fn)
10610 return (flag_exceptions && flag_enforce_eh_specs
10611 && !processing_template_decl
10612 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10613 /* We insert the EH_SPEC_BLOCK only in the original
10614 function; then, it is copied automatically to the
10615 clones. */
10616 && !DECL_CLONED_FUNCTION_P (fn)
10617 /* Implicitly-generated constructors and destructors have
10618 exception specifications. However, those specifications
10619 are the union of the possible exceptions specified by the
10620 constructors/destructors for bases and members, so no
10621 unallowed exception will ever reach this function. By
10622 not creating the EH_SPEC_BLOCK we save a little memory,
10623 and we avoid spurious warnings about unreachable
10624 code. */
10625 && !DECL_ARTIFICIAL (fn));
10628 /* Store the parameter declarations into the current function declaration.
10629 This is called after parsing the parameter declarations, before
10630 digesting the body of the function.
10632 Also install to binding contour return value identifier, if any. */
10634 static void
10635 store_parm_decls (tree current_function_parms)
10637 tree fndecl = current_function_decl;
10638 tree parm;
10640 /* This is a chain of any other decls that came in among the parm
10641 declarations. If a parm is declared with enum {foo, bar} x;
10642 then CONST_DECLs for foo and bar are put here. */
10643 tree nonparms = NULL_TREE;
10645 if (current_function_parms)
10647 /* This case is when the function was defined with an ANSI prototype.
10648 The parms already have decls, so we need not do anything here
10649 except record them as in effect
10650 and complain if any redundant old-style parm decls were written. */
10652 tree specparms = current_function_parms;
10653 tree next;
10655 /* Must clear this because it might contain TYPE_DECLs declared
10656 at class level. */
10657 current_binding_level->names = NULL;
10659 /* If we're doing semantic analysis, then we'll call pushdecl
10660 for each of these. We must do them in reverse order so that
10661 they end in the correct forward order. */
10662 specparms = nreverse (specparms);
10664 for (parm = specparms; parm; parm = next)
10666 next = TREE_CHAIN (parm);
10667 if (TREE_CODE (parm) == PARM_DECL)
10669 if (DECL_NAME (parm) == NULL_TREE
10670 || TREE_CODE (parm) != VOID_TYPE)
10671 pushdecl (parm);
10672 else
10673 error ("parameter %qD declared void", parm);
10675 else
10677 /* If we find an enum constant or a type tag,
10678 put it aside for the moment. */
10679 TREE_CHAIN (parm) = NULL_TREE;
10680 nonparms = chainon (nonparms, parm);
10684 /* Get the decls in their original chain order and record in the
10685 function. This is all and only the PARM_DECLs that were
10686 pushed into scope by the loop above. */
10687 DECL_ARGUMENTS (fndecl) = getdecls ();
10689 else
10690 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10692 /* Now store the final chain of decls for the arguments
10693 as the decl-chain of the current lexical scope.
10694 Put the enumerators in as well, at the front so that
10695 DECL_ARGUMENTS is not modified. */
10696 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10698 if (use_eh_spec_block (current_function_decl))
10699 current_eh_spec_block = begin_eh_spec_block ();
10703 /* We have finished doing semantic analysis on DECL, but have not yet
10704 generated RTL for its body. Save away our current state, so that
10705 when we want to generate RTL later we know what to do. */
10707 static void
10708 save_function_data (tree decl)
10710 struct language_function *f;
10712 /* Save the language-specific per-function data so that we can
10713 get it back when we really expand this function. */
10714 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10716 /* Make a copy. */
10717 f = GGC_NEW (struct language_function);
10718 memcpy (f, cp_function_chain, sizeof (struct language_function));
10719 DECL_SAVED_FUNCTION_DATA (decl) = f;
10721 /* Clear out the bits we don't need. */
10722 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10723 f->bindings = NULL;
10724 f->x_local_names = NULL;
10728 /* Set the return value of the constructor (if present). */
10730 static void
10731 finish_constructor_body (void)
10733 tree val;
10734 tree exprstmt;
10736 if (targetm.cxx.cdtor_returns_this ())
10738 /* Any return from a constructor will end up here. */
10739 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10741 val = DECL_ARGUMENTS (current_function_decl);
10742 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10743 DECL_RESULT (current_function_decl), val);
10744 /* Return the address of the object. */
10745 exprstmt = build_stmt (RETURN_EXPR, val);
10746 add_stmt (exprstmt);
10750 /* Do all the processing for the beginning of a destructor; set up the
10751 vtable pointers and cleanups for bases and members. */
10753 static void
10754 begin_destructor_body (void)
10756 tree compound_stmt;
10758 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10759 issued an error message. We still want to try to process the
10760 body of the function, but initialize_vtbl_ptrs will crash if
10761 TYPE_BINFO is NULL. */
10762 if (COMPLETE_TYPE_P (current_class_type))
10764 compound_stmt = begin_compound_stmt (0);
10765 /* Make all virtual function table pointers in non-virtual base
10766 classes point to CURRENT_CLASS_TYPE's virtual function
10767 tables. */
10768 initialize_vtbl_ptrs (current_class_ptr);
10769 finish_compound_stmt (compound_stmt);
10771 /* And insert cleanups for our bases and members so that they
10772 will be properly destroyed if we throw. */
10773 push_base_cleanups ();
10777 /* At the end of every destructor we generate code to delete the object if
10778 necessary. Do that now. */
10780 static void
10781 finish_destructor_body (void)
10783 tree exprstmt;
10785 /* Any return from a destructor will end up here; that way all base
10786 and member cleanups will be run when the function returns. */
10787 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10789 /* In a virtual destructor, we must call delete. */
10790 if (DECL_VIRTUAL_P (current_function_decl))
10792 tree if_stmt;
10793 tree virtual_size = cxx_sizeof (current_class_type);
10795 /* [class.dtor]
10797 At the point of definition of a virtual destructor (including
10798 an implicit definition), non-placement operator delete shall
10799 be looked up in the scope of the destructor's class and if
10800 found shall be accessible and unambiguous. */
10801 exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
10802 virtual_size,
10803 /*global_p=*/false,
10804 /*placement=*/NULL_TREE,
10805 /*alloc_fn=*/NULL_TREE);
10807 if_stmt = begin_if_stmt ();
10808 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10809 current_in_charge_parm,
10810 integer_one_node),
10811 if_stmt);
10812 finish_expr_stmt (exprstmt);
10813 finish_then_clause (if_stmt);
10814 finish_if_stmt (if_stmt);
10817 if (targetm.cxx.cdtor_returns_this ())
10819 tree val;
10821 val = DECL_ARGUMENTS (current_function_decl);
10822 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10823 DECL_RESULT (current_function_decl), val);
10824 /* Return the address of the object. */
10825 exprstmt = build_stmt (RETURN_EXPR, val);
10826 add_stmt (exprstmt);
10830 /* Do the necessary processing for the beginning of a function body, which
10831 in this case includes member-initializers, but not the catch clauses of
10832 a function-try-block. Currently, this means opening a binding level
10833 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
10835 tree
10836 begin_function_body (void)
10838 tree stmt;
10840 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10841 return NULL_TREE;
10843 if (processing_template_decl)
10844 /* Do nothing now. */;
10845 else
10846 /* Always keep the BLOCK node associated with the outermost pair of
10847 curly braces of a function. These are needed for correct
10848 operation of dwarfout.c. */
10849 keep_next_level (true);
10851 stmt = begin_compound_stmt (BCS_FN_BODY);
10853 if (processing_template_decl)
10854 /* Do nothing now. */;
10855 else if (DECL_DESTRUCTOR_P (current_function_decl))
10856 begin_destructor_body ();
10858 return stmt;
10861 /* Do the processing for the end of a function body. Currently, this means
10862 closing out the cleanups for fully-constructed bases and members, and in
10863 the case of the destructor, deleting the object if desired. Again, this
10864 is only meaningful for [cd]tors, since they are the only functions where
10865 there is a significant distinction between the main body and any
10866 function catch clauses. Handling, say, main() return semantics here
10867 would be wrong, as flowing off the end of a function catch clause for
10868 main() would also need to return 0. */
10870 void
10871 finish_function_body (tree compstmt)
10873 if (compstmt == NULL_TREE)
10874 return;
10876 /* Close the block. */
10877 finish_compound_stmt (compstmt);
10879 if (processing_template_decl)
10880 /* Do nothing now. */;
10881 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10882 finish_constructor_body ();
10883 else if (DECL_DESTRUCTOR_P (current_function_decl))
10884 finish_destructor_body ();
10887 /* Given a function, returns the BLOCK corresponding to the outermost level
10888 of curly braces, skipping the artificial block created for constructor
10889 initializers. */
10891 static tree
10892 outer_curly_brace_block (tree fndecl)
10894 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
10895 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10896 /* Skip the artificial function body block. */
10897 block = BLOCK_SUBBLOCKS (block);
10898 return block;
10901 /* Finish up a function declaration and compile that function
10902 all the way to assembler language output. The free the storage
10903 for the function definition.
10905 FLAGS is a bitwise or of the following values:
10906 2 - INCLASS_INLINE
10907 We just finished processing the body of an in-class inline
10908 function definition. (This processing will have taken place
10909 after the class definition is complete.) */
10911 tree
10912 finish_function (int flags)
10914 tree fndecl = current_function_decl;
10915 tree fntype, ctype = NULL_TREE;
10916 int inclass_inline = (flags & 2) != 0;
10917 int nested;
10919 /* When we get some parse errors, we can end up without a
10920 current_function_decl, so cope. */
10921 if (fndecl == NULL_TREE)
10922 return error_mark_node;
10924 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10925 && DECL_VIRTUAL_P (fndecl)
10926 && !processing_template_decl)
10928 tree fnclass = DECL_CONTEXT (fndecl);
10929 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10930 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10933 nested = function_depth > 1;
10934 fntype = TREE_TYPE (fndecl);
10936 /* TREE_READONLY (fndecl) = 1;
10937 This caused &foo to be of type ptr-to-const-function
10938 which then got a warning when stored in a ptr-to-function variable. */
10940 gcc_assert (building_stmt_tree ());
10942 /* For a cloned function, we've already got all the code we need;
10943 there's no need to add any extra bits. */
10944 if (!DECL_CLONED_FUNCTION_P (fndecl))
10946 if (DECL_MAIN_P (current_function_decl))
10948 tree stmt;
10950 /* Make it so that `main' always returns 0 by default (or
10951 1 for VMS). */
10952 #if VMS_TARGET
10953 stmt = finish_return_stmt (integer_one_node);
10954 #else
10955 stmt = finish_return_stmt (integer_zero_node);
10956 #endif
10957 /* Hack. We don't want the middle-end to warn that this
10958 return is unreachable, so put the statement on the
10959 special line 0. */
10960 #ifdef USE_MAPPED_LOCATION
10961 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10962 #else
10963 annotate_with_file_line (stmt, input_filename, 0);
10964 #endif
10967 if (use_eh_spec_block (current_function_decl))
10968 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10969 (TREE_TYPE (current_function_decl)),
10970 current_eh_spec_block);
10973 /* If we're saving up tree structure, tie off the function now. */
10974 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10976 finish_fname_decls ();
10978 /* If this function can't throw any exceptions, remember that. */
10979 if (!processing_template_decl
10980 && !cp_function_chain->can_throw
10981 && !flag_non_call_exceptions)
10982 TREE_NOTHROW (fndecl) = 1;
10984 /* This must come after expand_function_end because cleanups might
10985 have declarations (from inline functions) that need to go into
10986 this function's blocks. */
10988 /* If the current binding level isn't the outermost binding level
10989 for this function, either there is a bug, or we have experienced
10990 syntax errors and the statement tree is malformed. */
10991 if (current_binding_level->kind != sk_function_parms)
10993 /* Make sure we have already experienced errors. */
10994 gcc_assert (errorcount);
10996 /* Throw away the broken statement tree and extra binding
10997 levels. */
10998 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11000 while (current_binding_level->kind != sk_function_parms)
11002 if (current_binding_level->kind == sk_class)
11003 pop_nested_class ();
11004 else
11005 poplevel (0, 0, 0);
11008 poplevel (1, 0, 1);
11010 /* Statements should always be full-expressions at the outermost set
11011 of curly braces for a function. */
11012 gcc_assert (stmts_are_full_exprs_p ());
11014 /* Set up the named return value optimization, if we can. Candidate
11015 variables are selected in check_return_value. */
11016 if (current_function_return_value)
11018 tree r = current_function_return_value;
11019 tree outer;
11021 if (r != error_mark_node
11022 /* This is only worth doing for fns that return in memory--and
11023 simpler, since we don't have to worry about promoted modes. */
11024 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11025 /* Only allow this for variables declared in the outer scope of
11026 the function so we know that their lifetime always ends with a
11027 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11028 we were to do this optimization in tree-ssa. */
11029 && (outer = outer_curly_brace_block (fndecl))
11030 && chain_member (r, BLOCK_VARS (outer)))
11031 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11033 current_function_return_value = NULL_TREE;
11036 /* Remember that we were in class scope. */
11037 if (current_class_name)
11038 ctype = current_class_type;
11040 /* Must mark the RESULT_DECL as being in this function. */
11041 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11043 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11044 to the FUNCTION_DECL node itself. */
11045 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11047 /* Save away current state, if appropriate. */
11048 if (!processing_template_decl)
11049 save_function_data (fndecl);
11051 /* Complain if there's just no return statement. */
11052 if (warn_return_type
11053 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11054 && !dependent_type_p (TREE_TYPE (fntype))
11055 && !current_function_returns_value && !current_function_returns_null
11056 /* Don't complain if we abort or throw. */
11057 && !current_function_returns_abnormally
11058 && !DECL_NAME (DECL_RESULT (fndecl))
11059 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
11060 inline function, as we might never be compiled separately. */
11061 && (DECL_INLINE (fndecl) || processing_template_decl)
11062 /* Structor return values (if any) are set by the compiler. */
11063 && !DECL_CONSTRUCTOR_P (fndecl)
11064 && !DECL_DESTRUCTOR_P (fndecl))
11065 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11067 /* Store the end of the function, so that we get good line number
11068 info for the epilogue. */
11069 cfun->function_end_locus = input_location;
11071 /* Genericize before inlining. */
11072 if (!processing_template_decl)
11074 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11075 cp_genericize (fndecl);
11076 /* Clear out the bits we don't need. */
11077 f->x_current_class_ptr = NULL;
11078 f->x_current_class_ref = NULL;
11079 f->x_eh_spec_block = NULL;
11080 f->x_in_charge_parm = NULL;
11081 f->x_vtt_parm = NULL;
11082 f->x_return_value = NULL;
11083 f->bindings = NULL;
11085 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11086 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11088 /* Clear out the bits we don't need. */
11089 local_names = NULL;
11091 /* We're leaving the context of this function, so zap cfun. It's still in
11092 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
11093 cfun = NULL;
11094 current_function_decl = NULL;
11096 /* If this is an in-class inline definition, we may have to pop the
11097 bindings for the template parameters that we added in
11098 maybe_begin_member_template_processing when start_function was
11099 called. */
11100 if (inclass_inline)
11101 maybe_end_member_template_processing ();
11103 /* Leave the scope of the class. */
11104 if (ctype)
11105 pop_nested_class ();
11107 --function_depth;
11109 /* Clean up. */
11110 if (! nested)
11111 /* Let the error reporting routines know that we're outside a
11112 function. For a nested function, this value is used in
11113 cxx_pop_function_context and then reset via pop_function_context. */
11114 current_function_decl = NULL_TREE;
11116 return fndecl;
11119 /* Create the FUNCTION_DECL for a function definition.
11120 DECLSPECS and DECLARATOR are the parts of the declaration;
11121 they describe the return type and the name of the function,
11122 but twisted together in a fashion that parallels the syntax of C.
11124 This function creates a binding context for the function body
11125 as well as setting up the FUNCTION_DECL in current_function_decl.
11127 Returns a FUNCTION_DECL on success.
11129 If the DECLARATOR is not suitable for a function (it defines a datum
11130 instead), we return 0, which tells yyparse to report a parse error.
11132 May return void_type_node indicating that this method is actually
11133 a friend. See grokfield for more details.
11135 Came here with a `.pushlevel' .
11137 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11138 CHANGES TO CODE IN `grokfield'. */
11140 tree
11141 start_method (cp_decl_specifier_seq *declspecs,
11142 const cp_declarator *declarator, tree attrlist)
11144 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11145 &attrlist);
11147 if (fndecl == error_mark_node)
11148 return error_mark_node;
11150 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11152 error ("invalid member function declaration");
11153 return error_mark_node;
11156 if (attrlist)
11157 cplus_decl_attributes (&fndecl, attrlist, 0);
11159 /* Pass friends other than inline friend functions back. */
11160 if (fndecl == void_type_node)
11161 return fndecl;
11163 if (DECL_IN_AGGR_P (fndecl))
11165 if (DECL_CONTEXT (fndecl)
11166 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11167 error ("%qD is already defined in class %qT", fndecl,
11168 DECL_CONTEXT (fndecl));
11169 return error_mark_node;
11172 check_template_shadow (fndecl);
11174 DECL_DECLARED_INLINE_P (fndecl) = 1;
11175 if (flag_default_inline)
11176 DECL_INLINE (fndecl) = 1;
11178 /* We process method specializations in finish_struct_1. */
11179 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11181 fndecl = push_template_decl (fndecl);
11182 if (fndecl == error_mark_node)
11183 return fndecl;
11186 if (! DECL_FRIEND_P (fndecl))
11188 if (TREE_CHAIN (fndecl))
11190 fndecl = copy_node (fndecl);
11191 TREE_CHAIN (fndecl) = NULL_TREE;
11195 finish_decl (fndecl, NULL_TREE, NULL_TREE);
11197 /* Make a place for the parms. */
11198 begin_scope (sk_function_parms, fndecl);
11200 DECL_IN_AGGR_P (fndecl) = 1;
11201 return fndecl;
11204 /* Go through the motions of finishing a function definition.
11205 We don't compile this method until after the whole class has
11206 been processed.
11208 FINISH_METHOD must return something that looks as though it
11209 came from GROKFIELD (since we are defining a method, after all).
11211 This is called after parsing the body of the function definition.
11212 STMTS is the chain of statements that makes up the function body.
11214 DECL is the ..._DECL that `start_method' provided. */
11216 tree
11217 finish_method (tree decl)
11219 tree fndecl = decl;
11220 tree old_initial;
11222 tree link;
11224 if (decl == void_type_node)
11225 return decl;
11227 old_initial = DECL_INITIAL (fndecl);
11229 /* Undo the level for the parms (from start_method).
11230 This is like poplevel, but it causes nothing to be
11231 saved. Saving information here confuses symbol-table
11232 output routines. Besides, this information will
11233 be correctly output when this method is actually
11234 compiled. */
11236 /* Clear out the meanings of the local variables of this level;
11237 also record in each decl which block it belongs to. */
11239 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11241 if (DECL_NAME (link) != NULL_TREE)
11242 pop_binding (DECL_NAME (link), link);
11243 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11244 DECL_CONTEXT (link) = NULL_TREE;
11247 poplevel (0, 0, 0);
11249 DECL_INITIAL (fndecl) = old_initial;
11251 /* We used to check if the context of FNDECL was different from
11252 current_class_type as another way to get inside here. This didn't work
11253 for String.cc in libg++. */
11254 if (DECL_FRIEND_P (fndecl))
11256 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11257 fndecl);
11258 decl = void_type_node;
11261 return decl;
11265 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11266 we can lay it out later, when and if its type becomes complete. */
11268 void
11269 maybe_register_incomplete_var (tree var)
11271 gcc_assert (TREE_CODE (var) == VAR_DECL);
11273 /* Keep track of variables with incomplete types. */
11274 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11275 && DECL_EXTERNAL (var))
11277 tree inner_type = TREE_TYPE (var);
11279 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11280 inner_type = TREE_TYPE (inner_type);
11281 inner_type = TYPE_MAIN_VARIANT (inner_type);
11283 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11284 /* RTTI TD entries are created while defining the type_info. */
11285 || (TYPE_LANG_SPECIFIC (inner_type)
11286 && TYPE_BEING_DEFINED (inner_type)))
11287 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11291 /* Called when a class type (given by TYPE) is defined. If there are
11292 any existing VAR_DECLs whose type hsa been completed by this
11293 declaration, update them now. */
11295 void
11296 complete_vars (tree type)
11298 tree *list = &incomplete_vars;
11300 gcc_assert (CLASS_TYPE_P (type));
11301 while (*list)
11303 if (same_type_p (type, TREE_PURPOSE (*list)))
11305 tree var = TREE_VALUE (*list);
11306 tree type = TREE_TYPE (var);
11307 /* Complete the type of the variable. The VAR_DECL itself
11308 will be laid out in expand_expr. */
11309 complete_type (type);
11310 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11311 /* Remove this entry from the list. */
11312 *list = TREE_CHAIN (*list);
11314 else
11315 list = &TREE_CHAIN (*list);
11318 /* Check for pending declarations which may have abstract type. */
11319 complete_type_check_abstract (type);
11322 /* If DECL is of a type which needs a cleanup, build that cleanup
11323 here. */
11325 tree
11326 cxx_maybe_build_cleanup (tree decl)
11328 tree type = TREE_TYPE (decl);
11330 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11332 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11333 tree rval;
11334 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11335 && CLASSTYPE_VBASECLASSES (type));
11337 if (TREE_CODE (type) == ARRAY_TYPE)
11338 rval = decl;
11339 else
11341 cxx_mark_addressable (decl);
11342 rval = build_unary_op (ADDR_EXPR, decl, 0);
11345 /* Optimize for space over speed here. */
11346 if (!has_vbases || flag_expensive_optimizations)
11347 flags |= LOOKUP_NONVIRTUAL;
11349 rval = build_delete (TREE_TYPE (rval), rval,
11350 sfk_complete_destructor, flags, 0);
11352 return rval;
11354 return NULL_TREE;
11357 /* When a stmt has been parsed, this function is called. */
11359 void
11360 finish_stmt (void)
11364 /* DECL was originally constructed as a non-static member function,
11365 but turned out to be static. Update it accordingly. */
11367 void
11368 revert_static_member_fn (tree decl)
11370 tree tmp;
11371 tree function = TREE_TYPE (decl);
11372 tree args = TYPE_ARG_TYPES (function);
11374 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11375 != TYPE_UNQUALIFIED)
11376 error ("static member function %q#D declared with type qualifiers", decl);
11378 args = TREE_CHAIN (args);
11379 tmp = build_function_type (TREE_TYPE (function), args);
11380 tmp = build_qualified_type (tmp, cp_type_quals (function));
11381 tmp = build_exception_variant (tmp,
11382 TYPE_RAISES_EXCEPTIONS (function));
11383 TREE_TYPE (decl) = tmp;
11384 if (DECL_ARGUMENTS (decl))
11385 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11386 DECL_STATIC_FUNCTION_P (decl) = 1;
11389 /* Initialize the variables used during compilation of a C++
11390 function. */
11392 void
11393 cxx_push_function_context (struct function * f)
11395 struct language_function *p = GGC_CNEW (struct language_function);
11396 f->language = p;
11398 /* Whenever we start a new function, we destroy temporaries in the
11399 usual way. */
11400 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11402 if (f->decl)
11404 tree fn = f->decl;
11406 if (DECL_SAVED_FUNCTION_DATA (fn))
11408 /* If we already parsed this function, and we're just expanding it
11409 now, restore saved state. */
11410 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11412 /* We don't need the saved data anymore. Unless this is an inline
11413 function; we need the named return value info for
11414 declare_return_variable. */
11415 if (! DECL_INLINE (fn))
11416 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11421 /* Free the language-specific parts of F, now that we've finished
11422 compiling the function. */
11424 void
11425 cxx_pop_function_context (struct function * f)
11427 f->language = 0;
11430 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11431 one of the language-independent trees. */
11433 enum cp_tree_node_structure_enum
11434 cp_tree_node_structure (union lang_tree_node * t)
11436 switch (TREE_CODE (&t->generic))
11438 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11439 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11440 case OVERLOAD: return TS_CP_OVERLOAD;
11441 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11442 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11443 case PTRMEM_CST: return TS_CP_PTRMEM;
11444 case BASELINK: return TS_CP_BASELINK;
11445 default: return TS_CP_GENERIC;
11449 /* Build the void_list_node (void_type_node having been created). */
11450 tree
11451 build_void_list_node (void)
11453 tree t = build_tree_list (NULL_TREE, void_type_node);
11454 return t;
11457 bool
11458 cp_missing_noreturn_ok_p (tree decl)
11460 /* A missing noreturn is ok for the `main' function. */
11461 return DECL_MAIN_P (decl);
11464 /* Return the COMDAT group into which DECL should be placed. */
11466 const char *
11467 cxx_comdat_group (tree decl)
11469 tree name;
11471 /* Virtual tables, construction virtual tables, and virtual table
11472 tables all go in a single COMDAT group, named after the primary
11473 virtual table. */
11474 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11475 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11476 /* For all other DECLs, the COMDAT group is the mangled name of the
11477 declaration itself. */
11478 else
11480 while (DECL_THUNK_P (decl))
11482 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11483 into the same section as the target function. In that case
11484 we must return target's name. */
11485 tree target = THUNK_TARGET (decl);
11486 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11487 && DECL_SECTION_NAME (target) != NULL
11488 && DECL_ONE_ONLY (target))
11489 decl = target;
11490 else
11491 break;
11493 name = DECL_ASSEMBLER_NAME (decl);
11496 return IDENTIFIER_POINTER (name);
11499 #include "gt-cp-decl.h"