Merge C++ from gomp-20050608-branch.
[official-gcc.git] / gcc / cp / decl.c
blobd0866dc5b3dd3f0f7a122f89546c544b1a486352
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
4 Contributed by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
24 /* Process declarations and symbol lookup for C++ front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "hashtab.h"
46 #include "tm_p.h"
47 #include "target.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
50 #include "diagnostic.h"
51 #include "debug.h"
52 #include "timevar.h"
53 #include "tree-flow.h"
55 static tree grokparms (cp_parameter_declarator *, tree *);
56 static const char *redeclaration_error_message (tree, tree);
58 static int decl_jump_unsafe (tree);
59 static void require_complete_types_for_parms (tree);
60 static int ambi_op_p (enum tree_code);
61 static int unary_op_p (enum tree_code);
62 static void push_local_name (tree);
63 static tree grok_reference_init (tree, tree, tree, tree *);
64 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
65 int, int, tree);
66 static void record_unknown_type (tree, const char *);
67 static tree builtin_function_1 (const char *, tree, tree,
68 enum built_in_function code,
69 enum built_in_class cl, const char *,
70 tree);
71 static tree build_library_fn_1 (tree, enum tree_code, tree);
72 static int member_function_or_else (tree, tree, enum overload_flags);
73 static void bad_specifiers (tree, const char *, int, int, int, int,
74 int);
75 static void check_for_uninitialized_const_var (tree);
76 static hashval_t typename_hash (const void *);
77 static int typename_compare (const void *, const void *);
78 static tree local_variable_p_walkfn (tree *, int *, void *);
79 static tree record_builtin_java_type (const char *, int);
80 static const char *tag_name (enum tag_types);
81 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
82 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
83 static void maybe_deduce_size_from_array_init (tree, tree);
84 static void layout_var_decl (tree);
85 static void maybe_commonize_var (tree);
86 static tree check_initializer (tree, tree, int, tree *);
87 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
88 static void save_function_data (tree);
89 static void check_function_type (tree, tree);
90 static void finish_constructor_body (void);
91 static void begin_destructor_body (void);
92 static void finish_destructor_body (void);
93 static tree create_array_type_for_decl (tree, tree, tree);
94 static tree get_atexit_node (void);
95 static tree get_dso_handle_node (void);
96 static tree start_cleanup_fn (void);
97 static void end_cleanup_fn (void);
98 static tree cp_make_fname_decl (tree, int);
99 static void initialize_predefined_identifiers (void);
100 static tree check_special_function_return_type
101 (special_function_kind, tree, tree);
102 static tree push_cp_library_fn (enum tree_code, tree);
103 static tree build_cp_library_fn (tree, enum tree_code, tree);
104 static void store_parm_decls (tree);
105 static void initialize_local_var (tree, tree);
106 static void expand_static_init (tree, tree);
107 static tree next_initializable_field (tree);
109 /* Erroneous argument lists can use this *IFF* they do not modify it. */
110 tree error_mark_list;
112 /* The following symbols are subsumed in the cp_global_trees array, and
113 listed here individually for documentation purposes.
115 C++ extensions
116 tree wchar_decl_node;
118 tree vtable_entry_type;
119 tree delta_type_node;
120 tree __t_desc_type_node;
122 tree class_type_node;
123 tree unknown_type_node;
125 Array type `vtable_entry_type[]'
127 tree vtbl_type_node;
128 tree vtbl_ptr_type_node;
130 Namespaces,
132 tree std_node;
133 tree abi_node;
135 A FUNCTION_DECL which can call `abort'. Not necessarily the
136 one that the user will declare, but sufficient to be called
137 by routines that want to abort the program.
139 tree abort_fndecl;
141 The FUNCTION_DECL for the default `::operator delete'.
143 tree global_delete_fndecl;
145 Used by RTTI
146 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
147 tree tinfo_var_id;
151 tree cp_global_trees[CPTI_MAX];
153 /* Indicates that there is a type value in some namespace, although
154 that is not necessarily in scope at the moment. */
156 tree global_type_node;
158 /* The node that holds the "name" of the global scope. */
159 tree global_scope_name;
161 #define local_names cp_function_chain->x_local_names
163 /* A list of objects which have constructors or destructors
164 which reside in the global scope. The decl is stored in
165 the TREE_VALUE slot and the initializer is stored
166 in the TREE_PURPOSE slot. */
167 tree static_aggregates;
169 /* -- end of C++ */
171 /* A node for the integer constants 2, and 3. */
173 tree integer_two_node, integer_three_node;
175 /* Used only for jumps to as-yet undefined labels, since jumps to
176 defined labels can have their validity checked immediately. */
178 struct named_label_use_entry GTY(())
180 struct named_label_use_entry *next;
181 /* The binding level to which this entry is *currently* attached.
182 This is initially the binding level in which the goto appeared,
183 but is modified as scopes are closed. */
184 struct cp_binding_level *binding_level;
185 /* The head of the names list that was current when the goto appeared,
186 or the inner scope popped. These are the decls that will *not* be
187 skipped when jumping to the label. */
188 tree names_in_scope;
189 /* The location of the goto, for error reporting. */
190 location_t o_goto_locus;
191 /* True if an OpenMP structured block scope has been closed since
192 the goto appeared. This means that the branch from the label will
193 illegally exit an OpenMP scope. */
194 bool in_omp_scope;
197 /* A list of all LABEL_DECLs in the function that have names. Here so
198 we can clear out their names' definitions at the end of the
199 function, and so we can check the validity of jumps to these labels. */
201 struct named_label_entry GTY(())
203 /* The decl itself. */
204 tree label_decl;
206 /* The binding level to which the label is *currently* attached.
207 This is initially set to the binding level in which the label
208 is defined, but is modified as scopes are closed. */
209 struct cp_binding_level *binding_level;
210 /* The head of the names list that was current when the label was
211 defined, or the inner scope popped. These are the decls that will
212 be skipped when jumping to the label. */
213 tree names_in_scope;
214 /* A tree list of all decls from all binding levels that would be
215 crossed by a backward branch to the label. */
216 tree bad_decls;
218 /* A list of uses of the label, before the label is defined. */
219 struct named_label_use_entry *uses;
221 /* The following bits are set after the label is defined, and are
222 updated as scopes are popped. They indicate that a backward jump
223 to the label will illegally enter a scope of the given flavour. */
224 bool in_try_scope;
225 bool in_catch_scope;
226 bool in_omp_scope;
229 #define named_labels cp_function_chain->x_named_labels
231 /* The number of function bodies which we are currently processing.
232 (Zero if we are at namespace scope, one inside the body of a
233 function, two inside the body of a function in a local class, etc.) */
234 int function_depth;
236 /* States indicating how grokdeclarator() should handle declspecs marked
237 with __attribute__((deprecated)). An object declared as
238 __attribute__((deprecated)) suppresses warnings of uses of other
239 deprecated items. */
241 enum deprecated_states {
242 DEPRECATED_NORMAL,
243 DEPRECATED_SUPPRESS
246 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248 /* True if a declaration with an `extern' linkage specifier is being
249 processed. */
250 bool have_extern_spec;
253 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
254 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
255 time the VAR_DECL was declared, the type was incomplete. */
257 static GTY(()) tree incomplete_vars;
259 /* Returns the kind of template specialization we are currently
260 processing, given that it's declaration contained N_CLASS_SCOPES
261 explicit scope qualifications. */
263 tmpl_spec_kind
264 current_tmpl_spec_kind (int n_class_scopes)
266 int n_template_parm_scopes = 0;
267 int seen_specialization_p = 0;
268 int innermost_specialization_p = 0;
269 struct cp_binding_level *b;
271 /* Scan through the template parameter scopes. */
272 for (b = current_binding_level;
273 b->kind == sk_template_parms;
274 b = b->level_chain)
276 /* If we see a specialization scope inside a parameter scope,
277 then something is wrong. That corresponds to a declaration
278 like:
280 template <class T> template <> ...
282 which is always invalid since [temp.expl.spec] forbids the
283 specialization of a class member template if the enclosing
284 class templates are not explicitly specialized as well. */
285 if (b->explicit_spec_p)
287 if (n_template_parm_scopes == 0)
288 innermost_specialization_p = 1;
289 else
290 seen_specialization_p = 1;
292 else if (seen_specialization_p == 1)
293 return tsk_invalid_member_spec;
295 ++n_template_parm_scopes;
298 /* Handle explicit instantiations. */
299 if (processing_explicit_instantiation)
301 if (n_template_parm_scopes != 0)
302 /* We've seen a template parameter list during an explicit
303 instantiation. For example:
305 template <class T> template void f(int);
307 This is erroneous. */
308 return tsk_invalid_expl_inst;
309 else
310 return tsk_expl_inst;
313 if (n_template_parm_scopes < n_class_scopes)
314 /* We've not seen enough template headers to match all the
315 specialized classes present. For example:
317 template <class T> void R<T>::S<T>::f(int);
319 This is invalid; there needs to be one set of template
320 parameters for each class. */
321 return tsk_insufficient_parms;
322 else if (n_template_parm_scopes == n_class_scopes)
323 /* We're processing a non-template declaration (even though it may
324 be a member of a template class.) For example:
326 template <class T> void S<T>::f(int);
328 The `class T' maches the `S<T>', leaving no template headers
329 corresponding to the `f'. */
330 return tsk_none;
331 else if (n_template_parm_scopes > n_class_scopes + 1)
332 /* We've got too many template headers. For example:
334 template <> template <class T> void f (T);
336 There need to be more enclosing classes. */
337 return tsk_excessive_parms;
338 else
339 /* This must be a template. It's of the form:
341 template <class T> template <class U> void S<T>::f(U);
343 This is a specialization if the innermost level was a
344 specialization; otherwise it's just a definition of the
345 template. */
346 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
349 /* Exit the current scope. */
351 void
352 finish_scope (void)
354 poplevel (0, 0, 0);
357 /* When a label goes out of scope, check to see if that label was used
358 in a valid manner, and issue any appropriate warnings or errors. */
360 static void
361 pop_label (tree label, tree old_value)
363 if (!processing_template_decl)
365 if (DECL_INITIAL (label) == NULL_TREE)
367 location_t location;
369 error ("label %q+D used but not defined", label);
370 #ifdef USE_MAPPED_LOCATION
371 location = input_location; /* FIXME want (input_filename, (line)0) */
372 #else
373 location.file = input_filename;
374 location.line = 0;
375 #endif
376 /* Avoid crashing later. */
377 define_label (location, DECL_NAME (label));
379 else if (!TREE_USED (label))
380 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
383 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
386 /* At the end of a function, all labels declared within the function
387 go out of scope. BLOCK is the top-level block for the
388 function. */
390 static int
391 pop_labels_1 (void **slot, void *data)
393 struct named_label_entry *ent = (struct named_label_entry *) *slot;
394 tree block = (tree) data;
396 pop_label (ent->label_decl, NULL_TREE);
398 /* Put the labels into the "variables" of the top-level block,
399 so debugger can see them. */
400 TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);
401 BLOCK_VARS (block) = ent->label_decl;
403 htab_clear_slot (named_labels, slot);
405 return 1;
408 static void
409 pop_labels (tree block)
411 if (named_labels)
413 htab_traverse (named_labels, pop_labels_1, block);
414 named_labels = NULL;
418 /* At the end of a block with local labels, restore the outer definition. */
420 static void
421 pop_local_label (tree label, tree old_value)
423 struct named_label_entry dummy;
424 void **slot;
426 pop_label (label, old_value);
428 dummy.label_decl = label;
429 slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
430 htab_clear_slot (named_labels, slot);
433 /* The following two routines are used to interface to Objective-C++.
434 The binding level is purposely treated as an opaque type. */
436 void *
437 objc_get_current_scope (void)
439 return current_binding_level;
442 /* The following routine is used by the NeXT-style SJLJ exceptions;
443 variables get marked 'volatile' so as to not be clobbered by
444 _setjmp()/_longjmp() calls. All variables in the current scope,
445 as well as parent scopes up to (but not including) ENCLOSING_BLK
446 shall be thusly marked. */
448 void
449 objc_mark_locals_volatile (void *enclosing_blk)
451 struct cp_binding_level *scope;
453 for (scope = current_binding_level;
454 scope && scope != enclosing_blk;
455 scope = scope->level_chain)
457 tree decl;
459 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
460 objc_volatilize_decl (decl);
462 /* Do not climb up past the current function. */
463 if (scope->kind == sk_function_parms)
464 break;
468 /* Update data for defined and undefined labels when leaving a scope. */
470 static int
471 poplevel_named_label_1 (void **slot, void *data)
473 struct named_label_entry *ent = (struct named_label_entry *) *slot;
474 struct cp_binding_level *bl = (struct cp_binding_level *) data;
475 struct cp_binding_level *obl = bl->level_chain;
477 if (ent->binding_level == bl)
479 tree decl;
481 for (decl = ent->names_in_scope; decl; decl = TREE_CHAIN (decl))
482 if (decl_jump_unsafe (decl))
483 ent->bad_decls = tree_cons (NULL, decl, ent->bad_decls);
485 ent->binding_level = obl;
486 ent->names_in_scope = obl->names;
487 switch (bl->kind)
489 case sk_try:
490 ent->in_try_scope = true;
491 break;
492 case sk_catch:
493 ent->in_catch_scope = true;
494 break;
495 case sk_omp:
496 ent->in_omp_scope = true;
497 break;
498 default:
499 break;
502 else if (ent->uses)
504 struct named_label_use_entry *use;
506 for (use = ent->uses; use ; use = use->next)
507 if (use->binding_level == bl)
509 use->binding_level = obl;
510 use->names_in_scope = obl->names;
511 if (bl->kind == sk_omp)
512 use->in_omp_scope = true;
516 return 1;
519 /* Exit a binding level.
520 Pop the level off, and restore the state of the identifier-decl mappings
521 that were in effect when this level was entered.
523 If KEEP == 1, this level had explicit declarations, so
524 and create a "block" (a BLOCK node) for the level
525 to record its declarations and subblocks for symbol table output.
527 If FUNCTIONBODY is nonzero, this level is the body of a function,
528 so create a block as if KEEP were set and also clear out all
529 label names.
531 If REVERSE is nonzero, reverse the order of decls before putting
532 them into the BLOCK. */
534 tree
535 poplevel (int keep, int reverse, int functionbody)
537 tree link;
538 /* The chain of decls was accumulated in reverse order.
539 Put it into forward order, just for cleanliness. */
540 tree decls;
541 int tmp = functionbody;
542 int real_functionbody;
543 tree subblocks;
544 tree block;
545 tree decl;
546 int leaving_for_scope;
547 scope_kind kind;
549 timevar_push (TV_NAME_LOOKUP);
550 restart:
552 block = NULL_TREE;
554 gcc_assert (current_binding_level->kind != sk_class);
556 real_functionbody = (current_binding_level->kind == sk_cleanup
557 ? ((functionbody = 0), tmp) : functionbody);
558 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
560 gcc_assert (!VEC_length(cp_class_binding,
561 current_binding_level->class_shadowed));
563 /* We used to use KEEP == 2 to indicate that the new block should go
564 at the beginning of the list of blocks at this binding level,
565 rather than the end. This hack is no longer used. */
566 gcc_assert (keep == 0 || keep == 1);
568 if (current_binding_level->keep)
569 keep = 1;
571 /* Any uses of undefined labels, and any defined labels, now operate
572 under constraints of next binding contour. */
573 if (cfun && !functionbody && named_labels)
574 htab_traverse (named_labels, poplevel_named_label_1,
575 current_binding_level);
577 /* Get the decls in the order they were written.
578 Usually current_binding_level->names is in reverse order.
579 But parameter decls were previously put in forward order. */
581 if (reverse)
582 current_binding_level->names
583 = decls = nreverse (current_binding_level->names);
584 else
585 decls = current_binding_level->names;
587 /* If there were any declarations or structure tags in that level,
588 or if this level is a function body,
589 create a BLOCK to record them for the life of this function. */
590 block = NULL_TREE;
591 if (keep == 1 || functionbody)
592 block = make_node (BLOCK);
593 if (block != NULL_TREE)
595 BLOCK_VARS (block) = decls;
596 BLOCK_SUBBLOCKS (block) = subblocks;
599 /* In each subblock, record that this is its superior. */
600 if (keep >= 0)
601 for (link = subblocks; link; link = TREE_CHAIN (link))
602 BLOCK_SUPERCONTEXT (link) = block;
604 /* We still support the old for-scope rules, whereby the variables
605 in a for-init statement were in scope after the for-statement
606 ended. We only use the new rules if flag_new_for_scope is
607 nonzero. */
608 leaving_for_scope
609 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
611 /* Before we remove the declarations first check for unused variables. */
612 if (warn_unused_variable
613 && !processing_template_decl)
614 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
615 if (TREE_CODE (decl) == VAR_DECL
616 && ! TREE_USED (decl)
617 && ! DECL_IN_SYSTEM_HEADER (decl)
618 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
619 warning (OPT_Wunused_variable, "unused variable %q+D", decl);
621 /* Remove declarations for all the DECLs in this level. */
622 for (link = decls; link; link = TREE_CHAIN (link))
624 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
625 && DECL_NAME (link))
627 tree name = DECL_NAME (link);
628 cxx_binding *ob;
629 tree ns_binding;
631 ob = outer_binding (name,
632 IDENTIFIER_BINDING (name),
633 /*class_p=*/true);
634 if (!ob)
635 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
636 else
637 ns_binding = NULL_TREE;
639 if (ob && ob->scope == current_binding_level->level_chain)
640 /* We have something like:
642 int i;
643 for (int i; ;);
645 and we are leaving the `for' scope. There's no reason to
646 keep the binding of the inner `i' in this case. */
647 pop_binding (name, link);
648 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
649 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
650 /* Here, we have something like:
652 typedef int I;
654 void f () {
655 for (int I; ;);
658 We must pop the for-scope binding so we know what's a
659 type and what isn't. */
660 pop_binding (name, link);
661 else
663 /* Mark this VAR_DECL as dead so that we can tell we left it
664 there only for backward compatibility. */
665 DECL_DEAD_FOR_LOCAL (link) = 1;
667 /* Keep track of what should have happened when we
668 popped the binding. */
669 if (ob && ob->value)
671 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
672 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
675 /* Add it to the list of dead variables in the next
676 outermost binding to that we can remove these when we
677 leave that binding. */
678 current_binding_level->level_chain->dead_vars_from_for
679 = tree_cons (NULL_TREE, link,
680 current_binding_level->level_chain->
681 dead_vars_from_for);
683 /* Although we don't pop the cxx_binding, we do clear
684 its SCOPE since the scope is going away now. */
685 IDENTIFIER_BINDING (name)->scope
686 = current_binding_level->level_chain;
689 else
691 tree name;
693 /* Remove the binding. */
694 decl = link;
696 if (TREE_CODE (decl) == TREE_LIST)
697 decl = TREE_VALUE (decl);
698 name = decl;
700 if (TREE_CODE (name) == OVERLOAD)
701 name = OVL_FUNCTION (name);
703 gcc_assert (DECL_P (name));
704 pop_binding (DECL_NAME (name), decl);
708 /* Remove declarations for any `for' variables from inner scopes
709 that we kept around. */
710 for (link = current_binding_level->dead_vars_from_for;
711 link; link = TREE_CHAIN (link))
712 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
714 /* Restore the IDENTIFIER_TYPE_VALUEs. */
715 for (link = current_binding_level->type_shadowed;
716 link; link = TREE_CHAIN (link))
717 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
719 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
720 for (link = current_binding_level->shadowed_labels;
721 link;
722 link = TREE_CHAIN (link))
723 pop_local_label (TREE_VALUE (link), TREE_PURPOSE (link));
725 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
726 list if a `using' declaration put them there. The debugging
727 back-ends won't understand OVERLOAD, so we remove them here.
728 Because the BLOCK_VARS are (temporarily) shared with
729 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
730 popped all the bindings. */
731 if (block)
733 tree* d;
735 for (d = &BLOCK_VARS (block); *d; )
737 if (TREE_CODE (*d) == TREE_LIST)
738 *d = TREE_CHAIN (*d);
739 else
740 d = &TREE_CHAIN (*d);
744 /* If the level being exited is the top level of a function,
745 check over all the labels. */
746 if (functionbody)
748 /* Since this is the top level block of a function, the vars are
749 the function's parameters. Don't leave them in the BLOCK
750 because they are found in the FUNCTION_DECL instead. */
751 BLOCK_VARS (block) = 0;
752 pop_labels (block);
755 kind = current_binding_level->kind;
756 if (kind == sk_cleanup)
758 tree stmt;
760 /* If this is a temporary binding created for a cleanup, then we'll
761 have pushed a statement list level. Pop that, create a new
762 BIND_EXPR for the block, and insert it into the stream. */
763 stmt = pop_stmt_list (current_binding_level->statement_list);
764 stmt = c_build_bind_expr (block, stmt);
765 add_stmt (stmt);
768 leave_scope ();
769 if (functionbody)
770 DECL_INITIAL (current_function_decl) = block;
771 else if (block)
772 current_binding_level->blocks
773 = chainon (current_binding_level->blocks, block);
775 /* If we did not make a block for the level just exited,
776 any blocks made for inner levels
777 (since they cannot be recorded as subblocks in that level)
778 must be carried forward so they will later become subblocks
779 of something else. */
780 else if (subblocks)
781 current_binding_level->blocks
782 = chainon (current_binding_level->blocks, subblocks);
784 /* Each and every BLOCK node created here in `poplevel' is important
785 (e.g. for proper debugging information) so if we created one
786 earlier, mark it as "used". */
787 if (block)
788 TREE_USED (block) = 1;
790 /* All temporary bindings created for cleanups are popped silently. */
791 if (kind == sk_cleanup)
792 goto restart;
794 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
797 /* Insert BLOCK at the end of the list of subblocks of the
798 current binding level. This is used when a BIND_EXPR is expanded,
799 to handle the BLOCK node inside the BIND_EXPR. */
801 void
802 insert_block (tree block)
804 TREE_USED (block) = 1;
805 current_binding_level->blocks
806 = chainon (current_binding_level->blocks, block);
809 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
810 itself, calling F for each. The DATA is passed to F as well. */
812 static int
813 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
815 int result = 0;
816 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
818 result |= (*f) (namespace, data);
820 for (; current; current = TREE_CHAIN (current))
821 result |= walk_namespaces_r (current, f, data);
823 return result;
826 /* Walk all the namespaces, calling F for each. The DATA is passed to
827 F as well. */
830 walk_namespaces (walk_namespaces_fn f, void* data)
832 return walk_namespaces_r (global_namespace, f, data);
835 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
836 DATA is non-NULL, this is the last time we will call
837 wrapup_global_declarations for this NAMESPACE. */
840 wrapup_globals_for_namespace (tree namespace, void* data)
842 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
843 VEC(tree,gc) *statics = level->static_decls;
844 tree *vec = VEC_address (tree, statics);
845 int len = VEC_length (tree, statics);
846 int last_time = (data != 0);
848 if (last_time)
850 check_global_declarations (vec, len);
851 emit_debug_global_declarations (vec, len);
852 return 0;
855 /* Write out any globals that need to be output. */
856 return wrapup_global_declarations (vec, len);
860 /* In C++, you don't have to write `struct S' to refer to `S'; you
861 can just use `S'. We accomplish this by creating a TYPE_DECL as
862 if the user had written `typedef struct S S'. Create and return
863 the TYPE_DECL for TYPE. */
865 tree
866 create_implicit_typedef (tree name, tree type)
868 tree decl;
870 decl = build_decl (TYPE_DECL, name, type);
871 DECL_ARTIFICIAL (decl) = 1;
872 /* There are other implicit type declarations, like the one *within*
873 a class that allows you to write `S::S'. We must distinguish
874 amongst these. */
875 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
876 TYPE_NAME (type) = decl;
878 return decl;
881 /* Remember a local name for name-mangling purposes. */
883 static void
884 push_local_name (tree decl)
886 size_t i, nelts;
887 tree t, name;
889 timevar_push (TV_NAME_LOOKUP);
891 name = DECL_NAME (decl);
893 nelts = VEC_length (tree, local_names);
894 for (i = 0; i < nelts; i++)
896 t = VEC_index (tree, local_names, i);
897 if (DECL_NAME (t) == name)
899 if (!DECL_LANG_SPECIFIC (decl))
900 retrofit_lang_decl (decl);
901 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
902 if (DECL_LANG_SPECIFIC (t))
903 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
904 else
905 DECL_DISCRIMINATOR (decl) = 1;
907 VEC_replace (tree, local_names, i, decl);
908 timevar_pop (TV_NAME_LOOKUP);
909 return;
913 VEC_safe_push (tree, gc, local_names, decl);
914 timevar_pop (TV_NAME_LOOKUP);
917 /* Subroutine of duplicate_decls: return truthvalue of whether
918 or not types of these decls match.
920 For C++, we must compare the parameter list so that `int' can match
921 `int&' in a parameter position, but `int&' is not confused with
922 `const int&'. */
925 decls_match (tree newdecl, tree olddecl)
927 int types_match;
929 if (newdecl == olddecl)
930 return 1;
932 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
933 /* If the two DECLs are not even the same kind of thing, we're not
934 interested in their types. */
935 return 0;
937 if (TREE_CODE (newdecl) == FUNCTION_DECL)
939 tree f1 = TREE_TYPE (newdecl);
940 tree f2 = TREE_TYPE (olddecl);
941 tree p1 = TYPE_ARG_TYPES (f1);
942 tree p2 = TYPE_ARG_TYPES (f2);
944 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
945 && ! (DECL_EXTERN_C_P (newdecl)
946 && DECL_EXTERN_C_P (olddecl)))
947 return 0;
949 if (TREE_CODE (f1) != TREE_CODE (f2))
950 return 0;
952 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
954 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
955 && (DECL_BUILT_IN (olddecl)
956 #ifndef NO_IMPLICIT_EXTERN_C
957 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
958 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
959 #endif
962 types_match = self_promoting_args_p (p1);
963 if (p1 == void_list_node)
964 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
966 #ifndef NO_IMPLICIT_EXTERN_C
967 else if (p1 == NULL_TREE
968 && (DECL_EXTERN_C_P (olddecl)
969 && DECL_IN_SYSTEM_HEADER (olddecl)
970 && !DECL_CLASS_SCOPE_P (olddecl))
971 && (DECL_EXTERN_C_P (newdecl)
972 && DECL_IN_SYSTEM_HEADER (newdecl)
973 && !DECL_CLASS_SCOPE_P (newdecl)))
975 types_match = self_promoting_args_p (p2);
976 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
978 #endif
979 else
980 types_match = compparms (p1, p2);
982 else
983 types_match = 0;
985 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
987 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
988 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
989 return 0;
991 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
992 DECL_TEMPLATE_PARMS (olddecl)))
993 return 0;
995 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
996 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
997 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
998 else
999 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1000 DECL_TEMPLATE_RESULT (newdecl));
1002 else
1004 /* Need to check scope for variable declaration (VAR_DECL).
1005 For typedef (TYPE_DECL), scope is ignored. */
1006 if (TREE_CODE (newdecl) == VAR_DECL
1007 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1008 return 0;
1010 if (TREE_TYPE (newdecl) == error_mark_node)
1011 types_match = TREE_TYPE (olddecl) == error_mark_node;
1012 else if (TREE_TYPE (olddecl) == NULL_TREE)
1013 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1014 else if (TREE_TYPE (newdecl) == NULL_TREE)
1015 types_match = 0;
1016 else
1017 types_match = comptypes (TREE_TYPE (newdecl),
1018 TREE_TYPE (olddecl),
1019 COMPARE_REDECLARATION);
1022 return types_match;
1025 /* If NEWDECL is `static' and an `extern' was seen previously,
1026 warn about it. OLDDECL is the previous declaration.
1028 Note that this does not apply to the C++ case of declaring
1029 a variable `extern const' and then later `const'.
1031 Don't complain about built-in functions, since they are beyond
1032 the user's control. */
1034 void
1035 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1037 tree name;
1039 if (TREE_CODE (newdecl) == TYPE_DECL
1040 || TREE_CODE (newdecl) == TEMPLATE_DECL
1041 || TREE_CODE (newdecl) == CONST_DECL
1042 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1043 return;
1045 /* Don't get confused by static member functions; that's a different
1046 use of `static'. */
1047 if (TREE_CODE (newdecl) == FUNCTION_DECL
1048 && DECL_STATIC_FUNCTION_P (newdecl))
1049 return;
1051 /* If the old declaration was `static', or the new one isn't, then
1052 then everything is OK. */
1053 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1054 return;
1056 /* It's OK to declare a builtin function as `static'. */
1057 if (TREE_CODE (olddecl) == FUNCTION_DECL
1058 && DECL_ARTIFICIAL (olddecl))
1059 return;
1061 name = DECL_ASSEMBLER_NAME (newdecl);
1062 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1063 pedwarn ("previous declaration of %q+D", olddecl);
1066 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1067 function templates. If their exception specifications do not
1068 match, issue an a diagnostic. */
1070 static void
1071 check_redeclaration_exception_specification (tree new_decl,
1072 tree old_decl)
1074 tree new_type;
1075 tree old_type;
1076 tree new_exceptions;
1077 tree old_exceptions;
1079 new_type = TREE_TYPE (new_decl);
1080 new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1081 old_type = TREE_TYPE (old_decl);
1082 old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1084 /* [except.spec]
1086 If any declaration of a function has an exception-specification,
1087 all declarations, including the definition and an explicit
1088 specialization, of that function shall have an
1089 exception-specification with the same set of type-ids. */
1090 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1091 && ! DECL_IS_BUILTIN (old_decl)
1092 && flag_exceptions
1093 && !comp_except_specs (new_exceptions, old_exceptions,
1094 /*exact=*/true))
1096 error ("declaration of %qF throws different exceptions", new_decl);
1097 error ("from previous declaration %q+F", old_decl);
1101 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1102 If the redeclaration is invalid, a diagnostic is issued, and the
1103 error_mark_node is returned. Otherwise, OLDDECL is returned.
1105 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1106 returned.
1108 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1110 tree
1111 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1113 unsigned olddecl_uid = DECL_UID (olddecl);
1114 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1115 int new_defines_function = 0;
1116 tree new_template;
1118 if (newdecl == olddecl)
1119 return olddecl;
1121 types_match = decls_match (newdecl, olddecl);
1123 /* If either the type of the new decl or the type of the old decl is an
1124 error_mark_node, then that implies that we have already issued an
1125 error (earlier) for some bogus type specification, and in that case,
1126 it is rather pointless to harass the user with yet more error message
1127 about the same declaration, so just pretend the types match here. */
1128 if (TREE_TYPE (newdecl) == error_mark_node
1129 || TREE_TYPE (olddecl) == error_mark_node)
1130 types_match = 1;
1132 if (DECL_P (olddecl)
1133 && TREE_CODE (newdecl) == FUNCTION_DECL
1134 && TREE_CODE (olddecl) == FUNCTION_DECL
1135 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1137 if (DECL_DECLARED_INLINE_P (newdecl)
1138 && DECL_UNINLINABLE (newdecl)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1140 /* Already warned elsewhere. */;
1141 else if (DECL_DECLARED_INLINE_P (olddecl)
1142 && DECL_UNINLINABLE (olddecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1144 /* Already warned. */;
1145 else if (DECL_DECLARED_INLINE_P (newdecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1149 warning (OPT_Wattributes, "function %q+D redeclared as inline",
1150 newdecl);
1151 warning (OPT_Wattributes, "previous declaration of %q+D "
1152 "with attribute noinline", olddecl);
1154 else if (DECL_DECLARED_INLINE_P (olddecl)
1155 && DECL_UNINLINABLE (newdecl)
1156 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1158 warning (OPT_Wattributes, "function %q+D redeclared with "
1159 "attribute noinline", newdecl);
1160 warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1161 olddecl);
1165 /* Check for redeclaration and other discrepancies. */
1166 if (TREE_CODE (olddecl) == FUNCTION_DECL
1167 && DECL_ARTIFICIAL (olddecl))
1169 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1170 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1172 /* Avoid warnings redeclaring built-ins which have not been
1173 explicitly declared. */
1174 if (DECL_ANTICIPATED (olddecl))
1175 return NULL_TREE;
1177 /* If you declare a built-in or predefined function name as static,
1178 the old definition is overridden, but optionally warn this was a
1179 bad choice of name. */
1180 if (! TREE_PUBLIC (newdecl))
1182 warning (OPT_Wshadow, "shadowing %s function %q#D",
1183 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1184 olddecl);
1185 /* Discard the old built-in function. */
1186 return NULL_TREE;
1188 /* If the built-in is not ansi, then programs can override
1189 it even globally without an error. */
1190 else if (! DECL_BUILT_IN (olddecl))
1191 warning (0, "library function %q#D redeclared as non-function %q#D",
1192 olddecl, newdecl);
1193 else
1195 error ("declaration of %q#D", newdecl);
1196 error ("conflicts with built-in declaration %q#D",
1197 olddecl);
1199 return NULL_TREE;
1201 else if (!types_match)
1203 /* Avoid warnings redeclaring built-ins which have not been
1204 explicitly declared. */
1205 if (DECL_ANTICIPATED (olddecl))
1207 /* Deal with fileptr_type_node. FILE type is not known
1208 at the time we create the builtins. */
1209 tree t1, t2;
1211 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1212 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1213 t1 || t2;
1214 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1215 if (!t1 || !t2)
1216 break;
1217 else if (TREE_VALUE (t2) == fileptr_type_node)
1219 tree t = TREE_VALUE (t1);
1221 if (TREE_CODE (t) == POINTER_TYPE
1222 && TYPE_NAME (TREE_TYPE (t))
1223 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1224 == get_identifier ("FILE")
1225 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1227 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1229 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1230 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1231 types_match = decls_match (newdecl, olddecl);
1232 if (types_match)
1233 return duplicate_decls (newdecl, olddecl,
1234 newdecl_is_friend);
1235 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1238 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1239 break;
1241 else if ((DECL_EXTERN_C_P (newdecl)
1242 && DECL_EXTERN_C_P (olddecl))
1243 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1244 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1246 /* A near match; override the builtin. */
1248 if (TREE_PUBLIC (newdecl))
1250 warning (0, "new declaration %q#D", newdecl);
1251 warning (0, "ambiguates built-in declaration %q#D",
1252 olddecl);
1254 else
1255 warning (OPT_Wshadow, "shadowing %s function %q#D",
1256 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1257 olddecl);
1259 else
1260 /* Discard the old built-in function. */
1261 return NULL_TREE;
1263 /* Replace the old RTL to avoid problems with inlining. */
1264 COPY_DECL_RTL (newdecl, olddecl);
1266 /* Even if the types match, prefer the new declarations type for
1267 built-ins which have not been explicitly declared, for
1268 exception lists, etc... */
1269 else if (DECL_ANTICIPATED (olddecl))
1271 tree type = TREE_TYPE (newdecl);
1272 tree attribs = (*targetm.merge_type_attributes)
1273 (TREE_TYPE (olddecl), type);
1275 type = cp_build_type_attribute_variant (type, attribs);
1276 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1279 /* Whether or not the builtin can throw exceptions has no
1280 bearing on this declarator. */
1281 TREE_NOTHROW (olddecl) = 0;
1283 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1285 /* If a builtin function is redeclared as `static', merge
1286 the declarations, but make the original one static. */
1287 DECL_THIS_STATIC (olddecl) = 1;
1288 TREE_PUBLIC (olddecl) = 0;
1290 /* Make the old declaration consistent with the new one so
1291 that all remnants of the builtin-ness of this function
1292 will be banished. */
1293 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1294 COPY_DECL_RTL (newdecl, olddecl);
1297 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1299 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1300 && TREE_CODE (newdecl) != TYPE_DECL
1301 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1302 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1303 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1304 && TREE_CODE (olddecl) != TYPE_DECL
1305 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1306 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1307 == TYPE_DECL))))
1309 /* We do nothing special here, because C++ does such nasty
1310 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1311 get shadowed, and know that if we need to find a TYPE_DECL
1312 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1313 slot of the identifier. */
1314 return NULL_TREE;
1317 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1318 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1319 || (TREE_CODE (olddecl) == FUNCTION_DECL
1320 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1321 return NULL_TREE;
1323 error ("%q#D redeclared as different kind of symbol", newdecl);
1324 if (TREE_CODE (olddecl) == TREE_LIST)
1325 olddecl = TREE_VALUE (olddecl);
1326 error ("previous declaration of %q+#D", olddecl);
1328 return error_mark_node;
1330 else if (!types_match)
1332 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1333 /* These are certainly not duplicate declarations; they're
1334 from different scopes. */
1335 return NULL_TREE;
1337 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1339 /* The name of a class template may not be declared to refer to
1340 any other template, class, function, object, namespace, value,
1341 or type in the same scope. */
1342 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1343 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1345 error ("declaration of template %q#D", newdecl);
1346 error ("conflicts with previous declaration %q+#D", olddecl);
1348 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1349 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1350 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1351 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1352 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1353 DECL_TEMPLATE_PARMS (olddecl))
1354 /* Template functions can be disambiguated by
1355 return type. */
1356 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1357 TREE_TYPE (TREE_TYPE (olddecl))))
1359 error ("new declaration %q#D", newdecl);
1360 error ("ambiguates old declaration %q+#D", olddecl);
1362 return NULL_TREE;
1364 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1366 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1368 error ("declaration of C function %q#D conflicts with",
1369 newdecl);
1370 error ("previous declaration %q+#D here", olddecl);
1372 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1373 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1375 error ("new declaration %q#D", newdecl);
1376 error ("ambiguates old declaration %q+#D", olddecl);
1378 else
1379 return NULL_TREE;
1381 else
1383 error ("conflicting declaration %q#D", newdecl);
1384 error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1385 return error_mark_node;
1388 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1389 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1390 && (!DECL_TEMPLATE_INFO (newdecl)
1391 || (DECL_TI_TEMPLATE (newdecl)
1392 != DECL_TI_TEMPLATE (olddecl))))
1393 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1394 && (!DECL_TEMPLATE_INFO (olddecl)
1395 || (DECL_TI_TEMPLATE (olddecl)
1396 != DECL_TI_TEMPLATE (newdecl))))))
1397 /* It's OK to have a template specialization and a non-template
1398 with the same type, or to have specializations of two
1399 different templates with the same type. Note that if one is a
1400 specialization, and the other is an instantiation of the same
1401 template, that we do not exit at this point. That situation
1402 can occur if we instantiate a template class, and then
1403 specialize one of its methods. This situation is valid, but
1404 the declarations must be merged in the usual way. */
1405 return NULL_TREE;
1406 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1407 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1408 && !DECL_USE_TEMPLATE (newdecl))
1409 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1410 && !DECL_USE_TEMPLATE (olddecl))))
1411 /* One of the declarations is a template instantiation, and the
1412 other is not a template at all. That's OK. */
1413 return NULL_TREE;
1414 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1416 /* In [namespace.alias] we have:
1418 In a declarative region, a namespace-alias-definition can be
1419 used to redefine a namespace-alias declared in that declarative
1420 region to refer only to the namespace to which it already
1421 refers.
1423 Therefore, if we encounter a second alias directive for the same
1424 alias, we can just ignore the second directive. */
1425 if (DECL_NAMESPACE_ALIAS (newdecl)
1426 && (DECL_NAMESPACE_ALIAS (newdecl)
1427 == DECL_NAMESPACE_ALIAS (olddecl)))
1428 return olddecl;
1429 /* [namespace.alias]
1431 A namespace-name or namespace-alias shall not be declared as
1432 the name of any other entity in the same declarative region.
1433 A namespace-name defined at global scope shall not be
1434 declared as the name of any other entity in any global scope
1435 of the program. */
1436 error ("declaration of namespace %qD conflicts with", newdecl);
1437 error ("previous declaration of namespace %q+D here", olddecl);
1438 return error_mark_node;
1440 else
1442 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1443 if (errmsg)
1445 error (errmsg, newdecl);
1446 if (DECL_NAME (olddecl) != NULL_TREE)
1447 error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1448 ? "%q+#D previously defined here"
1449 : "%q+#D previously declared here", olddecl);
1450 return error_mark_node;
1452 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1453 && DECL_INITIAL (olddecl) != NULL_TREE
1454 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1455 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1457 /* Prototype decl follows defn w/o prototype. */
1458 warning (0, "prototype for %q+#D", newdecl);
1459 warning (0, "%Jfollows non-prototype definition here", olddecl);
1461 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1462 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1464 /* extern "C" int foo ();
1465 int foo () { bar (); }
1466 is OK. */
1467 if (current_lang_depth () == 0)
1468 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1469 else
1471 error ("previous declaration of %q+#D with %qL linkage",
1472 olddecl, DECL_LANGUAGE (olddecl));
1473 error ("conflicts with new declaration with %qL linkage",
1474 DECL_LANGUAGE (newdecl));
1478 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1480 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1482 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1483 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1484 int i = 1;
1486 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1487 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1489 for (; t1 && t1 != void_list_node;
1490 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1491 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1493 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1494 TREE_PURPOSE (t2)))
1496 pedwarn ("default argument given for parameter %d of %q#D",
1497 i, newdecl);
1498 pedwarn ("after previous specification in %q+#D", olddecl);
1500 else
1502 error ("default argument given for parameter %d of %q#D",
1503 i, newdecl);
1504 error ("after previous specification in %q+#D",
1505 olddecl);
1509 if (DECL_DECLARED_INLINE_P (newdecl)
1510 && ! DECL_DECLARED_INLINE_P (olddecl)
1511 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1513 warning (0, "%q#D was used before it was declared inline", newdecl);
1514 warning (0, "%Jprevious non-inline declaration here", olddecl);
1519 /* Do not merge an implicit typedef with an explicit one. In:
1521 class A;
1523 typedef class A A __attribute__ ((foo));
1525 the attribute should apply only to the typedef. */
1526 if (TREE_CODE (olddecl) == TYPE_DECL
1527 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1528 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1529 return NULL_TREE;
1531 /* If new decl is `static' and an `extern' was seen previously,
1532 warn about it. */
1533 warn_extern_redeclared_static (newdecl, olddecl);
1535 /* We have committed to returning 1 at this point. */
1536 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1538 /* Now that functions must hold information normally held
1539 by field decls, there is extra work to do so that
1540 declaration information does not get destroyed during
1541 definition. */
1542 if (DECL_VINDEX (olddecl))
1543 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1544 if (DECL_CONTEXT (olddecl))
1545 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1546 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1547 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1548 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1549 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1550 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1551 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1552 SET_OVERLOADED_OPERATOR_CODE
1553 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1554 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1556 /* Optionally warn about more than one declaration for the same
1557 name, but don't warn about a function declaration followed by a
1558 definition. */
1559 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1560 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1561 /* Don't warn about extern decl followed by definition. */
1562 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1563 /* Don't warn about friends, let add_friend take care of it. */
1564 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1566 warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1567 warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1571 /* Deal with C++: must preserve virtual function table size. */
1572 if (TREE_CODE (olddecl) == TYPE_DECL)
1574 tree newtype = TREE_TYPE (newdecl);
1575 tree oldtype = TREE_TYPE (olddecl);
1577 if (newtype != error_mark_node && oldtype != error_mark_node
1578 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1579 CLASSTYPE_FRIEND_CLASSES (newtype)
1580 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1582 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1585 /* Copy all the DECL_... slots specified in the new decl
1586 except for any that we copy here from the old type. */
1587 DECL_ATTRIBUTES (newdecl)
1588 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1590 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1592 tree old_result;
1593 tree new_result;
1594 old_result = DECL_TEMPLATE_RESULT (olddecl);
1595 new_result = DECL_TEMPLATE_RESULT (newdecl);
1596 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1597 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1598 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1599 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1601 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1603 DECL_INLINE (old_result)
1604 |= DECL_INLINE (new_result);
1605 DECL_DECLARED_INLINE_P (old_result)
1606 |= DECL_DECLARED_INLINE_P (new_result);
1607 check_redeclaration_exception_specification (newdecl, olddecl);
1610 /* If the new declaration is a definition, update the file and
1611 line information on the declaration. */
1612 if (DECL_INITIAL (old_result) == NULL_TREE
1613 && DECL_INITIAL (new_result) != NULL_TREE)
1615 DECL_SOURCE_LOCATION (olddecl)
1616 = DECL_SOURCE_LOCATION (old_result)
1617 = DECL_SOURCE_LOCATION (newdecl);
1618 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1619 DECL_ARGUMENTS (old_result)
1620 = DECL_ARGUMENTS (new_result);
1623 return olddecl;
1626 if (types_match)
1628 /* Automatically handles default parameters. */
1629 tree oldtype = TREE_TYPE (olddecl);
1630 tree newtype;
1632 /* Merge the data types specified in the two decls. */
1633 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1635 /* If merge_types produces a non-typedef type, just use the old type. */
1636 if (TREE_CODE (newdecl) == TYPE_DECL
1637 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1638 newtype = oldtype;
1640 if (TREE_CODE (newdecl) == VAR_DECL)
1642 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1643 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1644 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1645 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1646 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1647 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1649 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
1650 if (DECL_LANG_SPECIFIC (olddecl)
1651 && CP_DECL_THREADPRIVATE_P (olddecl))
1653 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
1654 if (!DECL_LANG_SPECIFIC (newdecl))
1655 retrofit_lang_decl (newdecl);
1657 DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1658 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1662 /* Do this after calling `merge_types' so that default
1663 parameters don't confuse us. */
1664 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1665 check_redeclaration_exception_specification (newdecl, olddecl);
1666 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1668 /* Lay the type out, unless already done. */
1669 if (! same_type_p (newtype, oldtype)
1670 && TREE_TYPE (newdecl) != error_mark_node
1671 && !(processing_template_decl && uses_template_parms (newdecl)))
1672 layout_type (TREE_TYPE (newdecl));
1674 if ((TREE_CODE (newdecl) == VAR_DECL
1675 || TREE_CODE (newdecl) == PARM_DECL
1676 || TREE_CODE (newdecl) == RESULT_DECL
1677 || TREE_CODE (newdecl) == FIELD_DECL
1678 || TREE_CODE (newdecl) == TYPE_DECL)
1679 && !(processing_template_decl && uses_template_parms (newdecl)))
1680 layout_decl (newdecl, 0);
1682 /* Merge the type qualifiers. */
1683 if (TREE_READONLY (newdecl))
1684 TREE_READONLY (olddecl) = 1;
1685 if (TREE_THIS_VOLATILE (newdecl))
1686 TREE_THIS_VOLATILE (olddecl) = 1;
1687 if (TREE_NOTHROW (newdecl))
1688 TREE_NOTHROW (olddecl) = 1;
1690 /* Merge deprecatedness. */
1691 if (TREE_DEPRECATED (newdecl))
1692 TREE_DEPRECATED (olddecl) = 1;
1694 /* Merge the initialization information. */
1695 if (DECL_INITIAL (newdecl) == NULL_TREE
1696 && DECL_INITIAL (olddecl) != NULL_TREE)
1698 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1699 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1700 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1701 && DECL_LANG_SPECIFIC (newdecl)
1702 && DECL_LANG_SPECIFIC (olddecl))
1704 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1705 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1709 /* Merge the section attribute.
1710 We want to issue an error if the sections conflict but that must be
1711 done later in decl_attributes since we are called before attributes
1712 are assigned. */
1713 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1714 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1716 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1718 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1719 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1720 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1721 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1722 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1723 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1724 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1725 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1726 /* Keep the old RTL. */
1727 COPY_DECL_RTL (olddecl, newdecl);
1729 else if (TREE_CODE (newdecl) == VAR_DECL
1730 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1732 /* Keep the old RTL. We cannot keep the old RTL if the old
1733 declaration was for an incomplete object and the new
1734 declaration is not since many attributes of the RTL will
1735 change. */
1736 COPY_DECL_RTL (olddecl, newdecl);
1739 /* If cannot merge, then use the new type and qualifiers,
1740 and don't preserve the old rtl. */
1741 else
1743 /* Clean out any memory we had of the old declaration. */
1744 tree oldstatic = value_member (olddecl, static_aggregates);
1745 if (oldstatic)
1746 TREE_VALUE (oldstatic) = error_mark_node;
1748 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1749 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1750 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1751 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1754 /* Merge the storage class information. */
1755 merge_weak (newdecl, olddecl);
1757 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1758 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1759 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1760 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1761 if (! DECL_EXTERNAL (olddecl))
1762 DECL_EXTERNAL (newdecl) = 0;
1764 new_template = NULL_TREE;
1765 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1767 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1768 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1769 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1770 DECL_TEMPLATE_INSTANTIATED (newdecl)
1771 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1773 /* If the OLDDECL is an instantiation and/or specialization,
1774 then the NEWDECL must be too. But, it may not yet be marked
1775 as such if the caller has created NEWDECL, but has not yet
1776 figured out that it is a redeclaration. */
1777 if (!DECL_USE_TEMPLATE (newdecl))
1778 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1780 /* Don't really know how much of the language-specific
1781 values we should copy from old to new. */
1782 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1783 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1784 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1785 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1786 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1787 if (DECL_TEMPLATE_INFO (newdecl))
1788 new_template = DECL_TI_TEMPLATE (newdecl);
1789 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1790 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1791 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1792 olddecl_friend = DECL_FRIEND_P (olddecl);
1793 hidden_friend = (DECL_ANTICIPATED (olddecl)
1794 && DECL_HIDDEN_FRIEND_P (olddecl)
1795 && newdecl_is_friend);
1797 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1798 if (TREE_CODE (newdecl) == FUNCTION_DECL
1799 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1801 DECL_BEFRIENDING_CLASSES (newdecl)
1802 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1803 DECL_BEFRIENDING_CLASSES (olddecl));
1804 /* DECL_THUNKS is only valid for virtual functions,
1805 otherwise it is a DECL_FRIEND_CONTEXT. */
1806 if (DECL_VIRTUAL_P (newdecl))
1807 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1811 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1814 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1816 /* If newdecl is not a specialization, then it is not a
1817 template-related function at all. And that means that we
1818 should have exited above, returning 0. */
1819 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1821 if (TREE_USED (olddecl))
1822 /* From [temp.expl.spec]:
1824 If a template, a member template or the member of a class
1825 template is explicitly specialized then that
1826 specialization shall be declared before the first use of
1827 that specialization that would cause an implicit
1828 instantiation to take place, in every translation unit in
1829 which such a use occurs. */
1830 error ("explicit specialization of %qD after first use",
1831 olddecl);
1833 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1835 /* [temp.expl.spec/14] We don't inline explicit specialization
1836 just because the primary template says so. */
1838 else
1840 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1841 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1843 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1845 /* If either decl says `inline', this fn is inline, unless
1846 its definition was passed already. */
1847 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1848 DECL_INLINE (olddecl) = 1;
1849 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1851 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1852 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1855 /* Preserve abstractness on cloned [cd]tors. */
1856 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1858 if (! types_match)
1860 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1861 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1862 COPY_DECL_RTL (newdecl, olddecl);
1864 if (! types_match || new_defines_function)
1866 /* These need to be copied so that the names are available.
1867 Note that if the types do match, we'll preserve inline
1868 info and other bits, but if not, we won't. */
1869 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1870 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1872 if (new_defines_function)
1873 /* If defining a function declared with other language
1874 linkage, use the previously declared language linkage. */
1875 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1876 else if (types_match)
1878 /* If redeclaring a builtin function, and not a definition,
1879 it stays built in. */
1880 if (DECL_BUILT_IN (olddecl))
1882 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1883 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1884 /* If we're keeping the built-in definition, keep the rtl,
1885 regardless of declaration matches. */
1886 COPY_DECL_RTL (olddecl, newdecl);
1889 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1890 /* Don't clear out the arguments if we're redefining a function. */
1891 if (DECL_ARGUMENTS (olddecl))
1892 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1895 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1896 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1898 /* Now preserve various other info from the definition. */
1899 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1900 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1901 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1902 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1904 /* Warn about conflicting visibility specifications. */
1905 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1906 && DECL_VISIBILITY_SPECIFIED (newdecl)
1907 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1909 warning (OPT_Wattributes, "%q+D: visibility attribute ignored "
1910 "because it", newdecl);
1911 warning (OPT_Wattributes, "%Jconflicts with previous "
1912 "declaration here", olddecl);
1914 /* Choose the declaration which specified visibility. */
1915 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1917 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1918 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1920 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
1921 so keep this behavior. */
1922 if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
1924 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
1925 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
1928 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
1929 with that from NEWDECL below. */
1930 if (DECL_LANG_SPECIFIC (olddecl))
1932 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
1933 != DECL_LANG_SPECIFIC (newdecl));
1934 ggc_free (DECL_LANG_SPECIFIC (olddecl));
1937 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1939 int function_size;
1941 function_size = sizeof (struct tree_decl_common);
1943 memcpy ((char *) olddecl + sizeof (struct tree_common),
1944 (char *) newdecl + sizeof (struct tree_common),
1945 function_size - sizeof (struct tree_common));
1947 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1948 (char *) newdecl + sizeof (struct tree_decl_common),
1949 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
1950 if (new_template)
1951 /* If newdecl is a template instantiation, it is possible that
1952 the following sequence of events has occurred:
1954 o A friend function was declared in a class template. The
1955 class template was instantiated.
1957 o The instantiation of the friend declaration was
1958 recorded on the instantiation list, and is newdecl.
1960 o Later, however, instantiate_class_template called pushdecl
1961 on the newdecl to perform name injection. But, pushdecl in
1962 turn called duplicate_decls when it discovered that another
1963 declaration of a global function with the same name already
1964 existed.
1966 o Here, in duplicate_decls, we decided to clobber newdecl.
1968 If we're going to do that, we'd better make sure that
1969 olddecl, and not newdecl, is on the list of
1970 instantiations so that if we try to do the instantiation
1971 again we won't get the clobbered declaration. */
1972 reregister_specialization (newdecl,
1973 new_template,
1974 olddecl);
1976 else
1978 size_t size = tree_code_size (TREE_CODE (olddecl));
1979 memcpy ((char *) olddecl + sizeof (struct tree_common),
1980 (char *) newdecl + sizeof (struct tree_common),
1981 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
1982 switch (TREE_CODE (olddecl))
1984 case LABEL_DECL:
1985 case VAR_DECL:
1986 case RESULT_DECL:
1987 case PARM_DECL:
1988 case FIELD_DECL:
1989 case TYPE_DECL:
1990 case CONST_DECL:
1992 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1993 (char *) newdecl + sizeof (struct tree_decl_common),
1994 size - sizeof (struct tree_decl_common)
1995 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1997 break;
1998 default:
1999 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2000 (char *) newdecl + sizeof (struct tree_decl_common),
2001 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2002 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2003 break;
2006 DECL_UID (olddecl) = olddecl_uid;
2007 if (olddecl_friend)
2008 DECL_FRIEND_P (olddecl) = 1;
2009 if (hidden_friend)
2011 DECL_ANTICIPATED (olddecl) = 1;
2012 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2015 /* NEWDECL contains the merged attribute lists.
2016 Update OLDDECL to be the same. */
2017 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2019 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2020 so that encode_section_info has a chance to look at the new decl
2021 flags and attributes. */
2022 if (DECL_RTL_SET_P (olddecl)
2023 && (TREE_CODE (olddecl) == FUNCTION_DECL
2024 || (TREE_CODE (olddecl) == VAR_DECL
2025 && TREE_STATIC (olddecl))))
2026 make_decl_rtl (olddecl);
2028 /* The NEWDECL will no longer be needed. Because every out-of-class
2029 declaration of a member results in a call to duplicate_decls,
2030 freeing these nodes represents in a significant savings. */
2031 ggc_free (newdecl);
2033 return olddecl;
2036 /* Return zero if the declaration NEWDECL is valid
2037 when the declaration OLDDECL (assumed to be for the same name)
2038 has already been seen.
2039 Otherwise return an error message format string with a %s
2040 where the identifier should go. */
2042 static const char *
2043 redeclaration_error_message (tree newdecl, tree olddecl)
2045 if (TREE_CODE (newdecl) == TYPE_DECL)
2047 /* Because C++ can put things into name space for free,
2048 constructs like "typedef struct foo { ... } foo"
2049 would look like an erroneous redeclaration. */
2050 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2051 return NULL;
2052 else
2053 return "redefinition of %q#D";
2055 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2057 /* If this is a pure function, its olddecl will actually be
2058 the original initialization to `0' (which we force to call
2059 abort()). Don't complain about redefinition in this case. */
2060 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2061 && DECL_INITIAL (olddecl) == NULL_TREE)
2062 return NULL;
2064 /* If both functions come from different namespaces, this is not
2065 a redeclaration - this is a conflict with a used function. */
2066 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2067 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2068 && ! decls_match (olddecl, newdecl))
2069 return "%qD conflicts with used function";
2071 /* We'll complain about linkage mismatches in
2072 warn_extern_redeclared_static. */
2074 /* Defining the same name twice is no good. */
2075 if (DECL_INITIAL (olddecl) != NULL_TREE
2076 && DECL_INITIAL (newdecl) != NULL_TREE)
2078 if (DECL_NAME (olddecl) == NULL_TREE)
2079 return "%q#D not declared in class";
2080 else
2081 return "redefinition of %q#D";
2083 return NULL;
2085 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2087 tree nt, ot;
2089 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2091 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2092 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2093 return "redefinition of %q#D";
2094 return NULL;
2097 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2098 || (DECL_TEMPLATE_RESULT (newdecl)
2099 == DECL_TEMPLATE_RESULT (olddecl)))
2100 return NULL;
2102 nt = DECL_TEMPLATE_RESULT (newdecl);
2103 if (DECL_TEMPLATE_INFO (nt))
2104 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2105 ot = DECL_TEMPLATE_RESULT (olddecl);
2106 if (DECL_TEMPLATE_INFO (ot))
2107 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2108 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2109 return "redefinition of %q#D";
2111 return NULL;
2113 else if (TREE_CODE (newdecl) == VAR_DECL
2114 && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2115 && (! DECL_LANG_SPECIFIC (olddecl)
2116 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2117 || DECL_THREAD_LOCAL_P (newdecl)))
2119 /* Only variables can be thread-local, and all declarations must
2120 agree on this property. */
2121 if (DECL_THREAD_LOCAL_P (newdecl))
2122 return "thread-local declaration of %q#D follows "
2123 "non-thread-local declaration";
2124 else
2125 return "non-thread-local declaration of %q#D follows "
2126 "thread-local declaration";
2128 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2130 /* Objects declared at top level: */
2131 /* If at least one is a reference, it's ok. */
2132 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2133 return NULL;
2134 /* Reject two definitions. */
2135 return "redefinition of %q#D";
2137 else
2139 /* Objects declared with block scope: */
2140 /* Reject two definitions, and reject a definition
2141 together with an external reference. */
2142 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2143 return "redeclaration of %q#D";
2144 return NULL;
2148 /* Hash and equality functions for the named_label table. */
2150 static hashval_t
2151 named_label_entry_hash (const void *data)
2153 const struct named_label_entry *ent = (const struct named_label_entry *) data;
2154 return DECL_UID (ent->label_decl);
2157 static int
2158 named_label_entry_eq (const void *a, const void *b)
2160 const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2161 const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2162 return ent_a->label_decl == ent_b->label_decl;
2165 /* Create a new label, named ID. */
2167 static tree
2168 make_label_decl (tree id, int local_p)
2170 struct named_label_entry *ent;
2171 void **slot;
2172 tree decl;
2174 decl = build_decl (LABEL_DECL, id, void_type_node);
2176 DECL_CONTEXT (decl) = current_function_decl;
2177 DECL_MODE (decl) = VOIDmode;
2178 C_DECLARED_LABEL_FLAG (decl) = local_p;
2180 /* Say where one reference is to the label, for the sake of the
2181 error if it is not defined. */
2182 DECL_SOURCE_LOCATION (decl) = input_location;
2184 /* Record the fact that this identifier is bound to this label. */
2185 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2187 /* Create the label htab for the function on demand. */
2188 if (!named_labels)
2189 named_labels = htab_create_ggc (13, named_label_entry_hash,
2190 named_label_entry_eq, NULL);
2192 /* Record this label on the list of labels used in this function.
2193 We do this before calling make_label_decl so that we get the
2194 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2195 ent = GGC_CNEW (struct named_label_entry);
2196 ent->label_decl = decl;
2198 slot = htab_find_slot (named_labels, ent, INSERT);
2199 gcc_assert (*slot == NULL);
2200 *slot = ent;
2202 return decl;
2205 /* Look for a label named ID in the current function. If one cannot
2206 be found, create one. (We keep track of used, but undefined,
2207 labels, and complain about them at the end of a function.) */
2209 tree
2210 lookup_label (tree id)
2212 tree decl;
2214 timevar_push (TV_NAME_LOOKUP);
2215 /* You can't use labels at global scope. */
2216 if (current_function_decl == NULL_TREE)
2218 error ("label %qE referenced outside of any function", id);
2219 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2222 /* See if we've already got this label. */
2223 decl = IDENTIFIER_LABEL_VALUE (id);
2224 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2225 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2227 decl = make_label_decl (id, /*local_p=*/0);
2228 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2231 /* Declare a local label named ID. */
2233 tree
2234 declare_local_label (tree id)
2236 tree decl, shadow;
2238 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2239 this scope we can restore the old value of IDENTIFIER_TYPE_VALUE. */
2240 shadow = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2241 current_binding_level->shadowed_labels);
2242 current_binding_level->shadowed_labels = shadow;
2244 decl = make_label_decl (id, /*local_p=*/1);
2245 TREE_VALUE (shadow) = decl;
2247 return decl;
2250 /* Returns nonzero if it is ill-formed to jump past the declaration of
2251 DECL. Returns 2 if it's also a real problem. */
2253 static int
2254 decl_jump_unsafe (tree decl)
2256 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2257 || TREE_TYPE (decl) == error_mark_node)
2258 return 0;
2260 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
2261 || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2262 return 2;
2264 if (pod_type_p (TREE_TYPE (decl)))
2265 return 0;
2267 /* The POD stuff is just pedantry; why should it matter if the class
2268 contains a field of pointer to member type? */
2269 return 1;
2272 /* A subroutine of check_previous_goto_1 to identify a branch to the user. */
2274 static void
2275 identify_goto (tree decl, const location_t *locus)
2277 if (decl)
2278 pedwarn ("jump to label %qD", decl);
2279 else
2280 pedwarn ("jump to case label");
2281 if (locus)
2282 pedwarn ("%H from here", locus);
2285 /* Check that a single previously seen jump to a newly defined label
2286 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2287 the jump context; NAMES are the names in scope in LEVEL at the jump
2288 context; LOCUS is the source position of the jump or 0. Returns
2289 true if all is well. */
2291 static bool
2292 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2293 bool exited_omp, const location_t *locus)
2295 struct cp_binding_level *b;
2296 bool identified = false, saw_eh = false, saw_omp = false;
2298 if (exited_omp)
2300 identify_goto (decl, locus);
2301 error (" exits OpenMP structured block");
2302 identified = saw_omp = true;
2305 for (b = current_binding_level; b ; b = b->level_chain)
2307 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2309 for (new_decls = b->names; new_decls != old_decls;
2310 new_decls = TREE_CHAIN (new_decls))
2312 int problem = decl_jump_unsafe (new_decls);
2313 if (! problem)
2314 continue;
2316 if (!identified)
2318 identify_goto (decl, locus);
2319 identified = true;
2321 if (problem > 1)
2322 error (" crosses initialization of %q+#D", new_decls);
2323 else
2324 pedwarn (" enters scope of non-POD %q+#D", new_decls);
2327 if (b == level)
2328 break;
2329 if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2331 if (!identified)
2333 identify_goto (decl, locus);
2334 identified = true;
2336 if (b->kind == sk_try)
2337 error (" enters try block");
2338 else
2339 error (" enters catch block");
2340 saw_eh = true;
2342 if (b->kind == sk_omp && !saw_omp)
2344 if (!identified)
2346 identify_goto (decl, locus);
2347 identified = true;
2349 error (" enters OpenMP structured block");
2350 saw_omp = true;
2354 return !identified;
2357 static void
2358 check_previous_goto (tree decl, struct named_label_use_entry *use)
2360 check_previous_goto_1 (decl, use->binding_level,
2361 use->names_in_scope, use->in_omp_scope,
2362 &use->o_goto_locus);
2365 static bool
2366 check_switch_goto (struct cp_binding_level* level)
2368 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2371 /* Check that a new jump to a label DECL is OK. Called by
2372 finish_goto_stmt. */
2374 void
2375 check_goto (tree decl)
2377 struct named_label_entry *ent, dummy;
2378 bool saw_catch = false, identified = false;
2379 tree bad;
2381 /* We can't know where a computed goto is jumping.
2382 So we assume that it's OK. */
2383 if (TREE_CODE (decl) != LABEL_DECL)
2384 return;
2386 /* We didn't record any information about this label when we created it,
2387 and there's not much point since it's trivial to analyze as a return. */
2388 if (decl == cdtor_label)
2389 return;
2391 dummy.label_decl = decl;
2392 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2393 gcc_assert (ent != NULL);
2395 /* If the label hasn't been defined yet, defer checking. */
2396 if (! DECL_INITIAL (decl))
2398 struct named_label_use_entry *new_use;
2400 /* Don't bother creating another use if the last goto had the
2401 same data, and will therefore create the same set of errors. */
2402 if (ent->uses
2403 && ent->uses->names_in_scope == current_binding_level->names)
2404 return;
2406 new_use = GGC_NEW (struct named_label_use_entry);
2407 new_use->binding_level = current_binding_level;
2408 new_use->names_in_scope = current_binding_level->names;
2409 new_use->o_goto_locus = input_location;
2410 new_use->in_omp_scope = false;
2412 new_use->next = ent->uses;
2413 ent->uses = new_use;
2414 return;
2417 if (ent->in_try_scope || ent->in_catch_scope
2418 || ent->in_omp_scope || ent->bad_decls)
2420 pedwarn ("jump to label %q+D", decl);
2421 pedwarn (" from here");
2422 identified = true;
2425 for (bad = ent->bad_decls; bad; bad = TREE_CHAIN (bad))
2427 tree b = TREE_VALUE (bad);
2428 int u = decl_jump_unsafe (b);
2430 if (u > 1 && DECL_ARTIFICIAL (b))
2432 /* Can't skip init of __exception_info. */
2433 error ("%J enters catch block", b);
2434 saw_catch = true;
2436 else if (u > 1)
2437 error (" skips initialization of %q+#D", b);
2438 else
2439 pedwarn (" enters scope of non-POD %q+#D", b);
2442 if (ent->in_try_scope)
2443 error (" enters try block");
2444 else if (ent->in_catch_scope && !saw_catch)
2445 error (" enters catch block");
2447 if (ent->in_omp_scope)
2448 error (" enters OpenMP structured block");
2449 else if (flag_openmp)
2451 struct cp_binding_level *b;
2452 for (b = current_binding_level; b ; b = b->level_chain)
2454 if (b == ent->binding_level)
2455 break;
2456 if (b->kind == sk_omp)
2458 if (!identified)
2460 pedwarn ("jump to label %q+D", decl);
2461 pedwarn (" from here");
2462 identified = true;
2464 error (" exits OpenMP structured block");
2465 break;
2471 /* Check that a return is ok wrt OpenMP structured blocks.
2472 Called by finish_return_stmt. Returns true if all is well. */
2474 bool
2475 check_omp_return (void)
2477 struct cp_binding_level *b;
2478 for (b = current_binding_level; b ; b = b->level_chain)
2479 if (b->kind == sk_omp)
2481 error ("invalid exit from OpenMP structured block");
2482 return false;
2484 return true;
2487 /* Define a label, specifying the location in the source file.
2488 Return the LABEL_DECL node for the label. */
2490 tree
2491 define_label (location_t location, tree name)
2493 struct named_label_entry *ent, dummy;
2494 struct cp_binding_level *p;
2495 tree decl;
2497 timevar_push (TV_NAME_LOOKUP);
2499 decl = lookup_label (name);
2501 dummy.label_decl = decl;
2502 ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2503 gcc_assert (ent != NULL);
2505 /* After labels, make any new cleanups in the function go into their
2506 own new (temporary) binding contour. */
2507 for (p = current_binding_level;
2508 p->kind != sk_function_parms;
2509 p = p->level_chain)
2510 p->more_cleanups_ok = 0;
2512 if (name == get_identifier ("wchar_t"))
2513 pedwarn ("label named wchar_t");
2515 if (DECL_INITIAL (decl) != NULL_TREE)
2516 error ("duplicate label %qD", decl);
2517 else
2519 struct named_label_use_entry *use;
2521 /* Mark label as having been defined. */
2522 DECL_INITIAL (decl) = error_mark_node;
2523 /* Say where in the source. */
2524 DECL_SOURCE_LOCATION (decl) = location;
2526 ent->binding_level = current_binding_level;
2527 ent->names_in_scope = current_binding_level->names;
2529 for (use = ent->uses; use ; use = use->next)
2530 check_previous_goto (decl, use);
2531 ent->uses = NULL;
2534 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2537 struct cp_switch
2539 struct cp_binding_level *level;
2540 struct cp_switch *next;
2541 /* The SWITCH_STMT being built. */
2542 tree switch_stmt;
2543 /* A splay-tree mapping the low element of a case range to the high
2544 element, or NULL_TREE if there is no high element. Used to
2545 determine whether or not a new case label duplicates an old case
2546 label. We need a tree, rather than simply a hash table, because
2547 of the GNU case range extension. */
2548 splay_tree cases;
2551 /* A stack of the currently active switch statements. The innermost
2552 switch statement is on the top of the stack. There is no need to
2553 mark the stack for garbage collection because it is only active
2554 during the processing of the body of a function, and we never
2555 collect at that point. */
2557 static struct cp_switch *switch_stack;
2559 /* Called right after a switch-statement condition is parsed.
2560 SWITCH_STMT is the switch statement being parsed. */
2562 void
2563 push_switch (tree switch_stmt)
2565 struct cp_switch *p = XNEW (struct cp_switch);
2566 p->level = current_binding_level;
2567 p->next = switch_stack;
2568 p->switch_stmt = switch_stmt;
2569 p->cases = splay_tree_new (case_compare, NULL, NULL);
2570 switch_stack = p;
2573 void
2574 pop_switch (void)
2576 struct cp_switch *cs = switch_stack;
2577 location_t switch_location;
2579 /* Emit warnings as needed. */
2580 if (EXPR_HAS_LOCATION (cs->switch_stmt))
2581 switch_location = EXPR_LOCATION (cs->switch_stmt);
2582 else
2583 switch_location = input_location;
2584 if (!processing_template_decl)
2585 c_do_switch_warnings (cs->cases, switch_location,
2586 SWITCH_STMT_TYPE (cs->switch_stmt),
2587 SWITCH_STMT_COND (cs->switch_stmt));
2589 splay_tree_delete (cs->cases);
2590 switch_stack = switch_stack->next;
2591 free (cs);
2594 /* Note that we've seen a definition of a case label, and complain if this
2595 is a bad place for one. */
2597 tree
2598 finish_case_label (tree low_value, tree high_value)
2600 tree cond, r;
2601 struct cp_binding_level *p;
2603 if (processing_template_decl)
2605 tree label;
2607 /* For templates, just add the case label; we'll do semantic
2608 analysis at instantiation-time. */
2609 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2610 return add_stmt (build_case_label (low_value, high_value, label));
2613 /* Find the condition on which this switch statement depends. */
2614 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
2615 if (cond && TREE_CODE (cond) == TREE_LIST)
2616 cond = TREE_VALUE (cond);
2618 if (!check_switch_goto (switch_stack->level))
2619 return error_mark_node;
2621 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2622 low_value, high_value);
2624 /* After labels, make any new cleanups in the function go into their
2625 own new (temporary) binding contour. */
2626 for (p = current_binding_level;
2627 p->kind != sk_function_parms;
2628 p = p->level_chain)
2629 p->more_cleanups_ok = 0;
2631 return r;
2634 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2636 static hashval_t
2637 typename_hash (const void* k)
2639 hashval_t hash;
2640 tree t = (tree) k;
2642 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2643 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2645 return hash;
2648 typedef struct typename_info {
2649 tree scope;
2650 tree name;
2651 tree template_id;
2652 bool enum_p;
2653 bool class_p;
2654 } typename_info;
2656 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2658 static int
2659 typename_compare (const void * k1, const void * k2)
2661 tree t1;
2662 const typename_info *t2;
2664 t1 = (tree) k1;
2665 t2 = (const typename_info *) k2;
2667 return (DECL_NAME (TYPE_NAME (t1)) == t2->name
2668 && TYPE_CONTEXT (t1) == t2->scope
2669 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
2670 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
2671 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
2674 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2675 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
2677 Returns the new TYPENAME_TYPE. */
2679 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2681 static tree
2682 build_typename_type (tree context, tree name, tree fullname,
2683 enum tag_types tag_type)
2685 tree t;
2686 tree d;
2687 typename_info ti;
2688 void **e;
2689 hashval_t hash;
2691 if (typename_htab == NULL)
2692 typename_htab = htab_create_ggc (61, &typename_hash,
2693 &typename_compare, NULL);
2695 ti.scope = FROB_CONTEXT (context);
2696 ti.name = name;
2697 ti.template_id = fullname;
2698 ti.enum_p = tag_type == enum_type;
2699 ti.class_p = (tag_type == class_type
2700 || tag_type == record_type
2701 || tag_type == union_type);
2702 hash = (htab_hash_pointer (ti.scope)
2703 ^ htab_hash_pointer (ti.name));
2705 /* See if we already have this type. */
2706 e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
2707 if (*e)
2708 t = (tree) *e;
2709 else
2711 /* Build the TYPENAME_TYPE. */
2712 t = make_aggr_type (TYPENAME_TYPE);
2713 TYPE_CONTEXT (t) = ti.scope;
2714 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
2715 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
2716 TYPENAME_IS_CLASS_P (t) = ti.class_p;
2718 /* Build the corresponding TYPE_DECL. */
2719 d = build_decl (TYPE_DECL, name, t);
2720 TYPE_NAME (TREE_TYPE (d)) = d;
2721 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2722 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2723 DECL_ARTIFICIAL (d) = 1;
2725 /* Store it in the hash table. */
2726 *e = t;
2729 return t;
2732 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
2733 provided to name the type. Returns an appropriate type, unless an
2734 error occurs, in which case error_mark_node is returned. If we
2735 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
2736 return that, rather than the _TYPE it corresponds to, in other
2737 cases we look through the type decl. If TF_ERROR is set, complain
2738 about errors, otherwise be quiet. */
2740 tree
2741 make_typename_type (tree context, tree name, enum tag_types tag_type,
2742 tsubst_flags_t complain)
2744 tree fullname;
2746 if (name == error_mark_node
2747 || context == NULL_TREE
2748 || context == error_mark_node)
2749 return error_mark_node;
2751 if (TYPE_P (name))
2753 if (!(TYPE_LANG_SPECIFIC (name)
2754 && (CLASSTYPE_IS_TEMPLATE (name)
2755 || CLASSTYPE_USE_TEMPLATE (name))))
2756 name = TYPE_IDENTIFIER (name);
2757 else
2758 /* Create a TEMPLATE_ID_EXPR for the type. */
2759 name = build_nt (TEMPLATE_ID_EXPR,
2760 CLASSTYPE_TI_TEMPLATE (name),
2761 CLASSTYPE_TI_ARGS (name));
2763 else if (TREE_CODE (name) == TYPE_DECL)
2764 name = DECL_NAME (name);
2766 fullname = name;
2768 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2770 name = TREE_OPERAND (name, 0);
2771 if (TREE_CODE (name) == TEMPLATE_DECL)
2772 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2774 if (TREE_CODE (name) == TEMPLATE_DECL)
2776 error ("%qD used without template parameters", name);
2777 return error_mark_node;
2779 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2780 gcc_assert (TYPE_P (context));
2782 if (!dependent_type_p (context)
2783 || currently_open_class (context))
2785 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2787 tree tmpl = NULL_TREE;
2788 if (IS_AGGR_TYPE (context))
2789 tmpl = lookup_field (context, name, 0, false);
2790 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2792 if (complain & tf_error)
2793 error ("no class template named %q#T in %q#T",
2794 name, context);
2795 return error_mark_node;
2798 if (complain & tf_error)
2799 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2801 return lookup_template_class (tmpl,
2802 TREE_OPERAND (fullname, 1),
2803 NULL_TREE, context,
2804 /*entering_scope=*/0,
2805 tf_warning_or_error | tf_user);
2807 else
2809 tree t;
2811 if (!IS_AGGR_TYPE (context))
2813 if (complain & tf_error)
2814 error ("no type named %q#T in %q#T", name, context);
2815 return error_mark_node;
2818 t = lookup_field (context, name, 0, true);
2819 if (t)
2821 if (TREE_CODE (t) != TYPE_DECL)
2823 if (complain & tf_error)
2824 error ("no type named %q#T in %q#T", name, context);
2825 return error_mark_node;
2828 if (complain & tf_error)
2829 perform_or_defer_access_check (TYPE_BINFO (context), t);
2831 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2832 t = TREE_TYPE (t);
2834 return t;
2839 /* If the CONTEXT is not a template type, then either the field is
2840 there now or its never going to be. */
2841 if (!dependent_type_p (context))
2843 if (complain & tf_error)
2844 error ("no type named %q#T in %q#T", name, context);
2845 return error_mark_node;
2848 return build_typename_type (context, name, fullname, tag_type);
2851 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
2852 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
2853 in which case error_mark_node is returned.
2855 If PARM_LIST is non-NULL, also make sure that the template parameter
2856 list of TEMPLATE_DECL matches.
2858 If COMPLAIN zero, don't complain about any errors that occur. */
2860 tree
2861 make_unbound_class_template (tree context, tree name, tree parm_list,
2862 tsubst_flags_t complain)
2864 tree t;
2865 tree d;
2867 if (TYPE_P (name))
2868 name = TYPE_IDENTIFIER (name);
2869 else if (DECL_P (name))
2870 name = DECL_NAME (name);
2871 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2873 if (!dependent_type_p (context)
2874 || currently_open_class (context))
2876 tree tmpl = NULL_TREE;
2878 if (IS_AGGR_TYPE (context))
2879 tmpl = lookup_field (context, name, 0, false);
2881 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2883 if (complain & tf_error)
2884 error ("no class template named %q#T in %q#T", name, context);
2885 return error_mark_node;
2888 if (parm_list
2889 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
2891 if (complain & tf_error)
2893 error ("template parameters do not match template");
2894 error ("%q+D declared here", tmpl);
2896 return error_mark_node;
2899 if (complain & tf_error)
2900 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2902 return tmpl;
2905 /* Build the UNBOUND_CLASS_TEMPLATE. */
2906 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2907 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2908 TREE_TYPE (t) = NULL_TREE;
2910 /* Build the corresponding TEMPLATE_DECL. */
2911 d = build_decl (TEMPLATE_DECL, name, t);
2912 TYPE_NAME (TREE_TYPE (d)) = d;
2913 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2914 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2915 DECL_ARTIFICIAL (d) = 1;
2916 DECL_TEMPLATE_PARMS (d) = parm_list;
2918 return t;
2923 /* Push the declarations of builtin types into the namespace.
2924 RID_INDEX is the index of the builtin type in the array
2925 RID_POINTERS. NAME is the name used when looking up the builtin
2926 type. TYPE is the _TYPE node for the builtin type. */
2928 void
2929 record_builtin_type (enum rid rid_index,
2930 const char* name,
2931 tree type)
2933 tree rname = NULL_TREE, tname = NULL_TREE;
2934 tree tdecl = NULL_TREE;
2936 if ((int) rid_index < (int) RID_MAX)
2937 rname = ridpointers[(int) rid_index];
2938 if (name)
2939 tname = get_identifier (name);
2941 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2942 eliminated. Built-in types should not be looked up name; their
2943 names are keywords that the parser can recognize. However, there
2944 is code in c-common.c that uses identifier_global_value to look
2945 up built-in types by name. */
2946 if (tname)
2948 tdecl = build_decl (TYPE_DECL, tname, type);
2949 DECL_ARTIFICIAL (tdecl) = 1;
2950 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2952 if (rname)
2954 if (!tdecl)
2956 tdecl = build_decl (TYPE_DECL, rname, type);
2957 DECL_ARTIFICIAL (tdecl) = 1;
2959 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2962 if (!TYPE_NAME (type))
2963 TYPE_NAME (type) = tdecl;
2965 if (tdecl)
2966 debug_hooks->type_decl (tdecl, 0);
2969 /* Record one of the standard Java types.
2970 * Declare it as having the given NAME.
2971 * If SIZE > 0, it is the size of one of the integral types;
2972 * otherwise it is the negative of the size of one of the other types. */
2974 static tree
2975 record_builtin_java_type (const char* name, int size)
2977 tree type, decl;
2978 if (size > 0)
2979 type = make_signed_type (size);
2980 else if (size > -32)
2981 { /* "__java_char" or ""__java_boolean". */
2982 type = make_unsigned_type (-size);
2983 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2985 else
2986 { /* "__java_float" or ""__java_double". */
2987 type = make_node (REAL_TYPE);
2988 TYPE_PRECISION (type) = - size;
2989 layout_type (type);
2991 record_builtin_type (RID_MAX, name, type);
2992 decl = TYPE_NAME (type);
2994 /* Suppress generate debug symbol entries for these types,
2995 since for normal C++ they are just clutter.
2996 However, push_lang_context undoes this if extern "Java" is seen. */
2997 DECL_IGNORED_P (decl) = 1;
2999 TYPE_FOR_JAVA (type) = 1;
3000 return type;
3003 /* Push a type into the namespace so that the back-ends ignore it. */
3005 static void
3006 record_unknown_type (tree type, const char* name)
3008 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
3009 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3010 DECL_IGNORED_P (decl) = 1;
3011 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3012 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3013 TYPE_ALIGN (type) = 1;
3014 TYPE_USER_ALIGN (type) = 0;
3015 TYPE_MODE (type) = TYPE_MODE (void_type_node);
3018 /* A string for which we should create an IDENTIFIER_NODE at
3019 startup. */
3021 typedef struct predefined_identifier
3023 /* The name of the identifier. */
3024 const char *const name;
3025 /* The place where the IDENTIFIER_NODE should be stored. */
3026 tree *const node;
3027 /* Nonzero if this is the name of a constructor or destructor. */
3028 const int ctor_or_dtor_p;
3029 } predefined_identifier;
3031 /* Create all the predefined identifiers. */
3033 static void
3034 initialize_predefined_identifiers (void)
3036 const predefined_identifier *pid;
3038 /* A table of identifiers to create at startup. */
3039 static const predefined_identifier predefined_identifiers[] = {
3040 { "C++", &lang_name_cplusplus, 0 },
3041 { "C", &lang_name_c, 0 },
3042 { "Java", &lang_name_java, 0 },
3043 /* Some of these names have a trailing space so that it is
3044 impossible for them to conflict with names written by users. */
3045 { "__ct ", &ctor_identifier, 1 },
3046 { "__base_ctor ", &base_ctor_identifier, 1 },
3047 { "__comp_ctor ", &complete_ctor_identifier, 1 },
3048 { "__dt ", &dtor_identifier, 1 },
3049 { "__comp_dtor ", &complete_dtor_identifier, 1 },
3050 { "__base_dtor ", &base_dtor_identifier, 1 },
3051 { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3052 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3053 { "nelts", &nelts_identifier, 0 },
3054 { THIS_NAME, &this_identifier, 0 },
3055 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3056 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3057 { "_vptr", &vptr_identifier, 0 },
3058 { "__vtt_parm", &vtt_parm_identifier, 0 },
3059 { "::", &global_scope_name, 0 },
3060 { "std", &std_identifier, 0 },
3061 { NULL, NULL, 0 }
3064 for (pid = predefined_identifiers; pid->name; ++pid)
3066 *pid->node = get_identifier (pid->name);
3067 if (pid->ctor_or_dtor_p)
3068 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3072 /* Create the predefined scalar types of C,
3073 and some nodes representing standard constants (0, 1, (void *)0).
3074 Initialize the global binding level.
3075 Make definitions for built-in primitive functions. */
3077 void
3078 cxx_init_decl_processing (void)
3080 tree void_ftype;
3081 tree void_ftype_ptr;
3083 build_common_tree_nodes (flag_signed_char, false);
3085 /* Create all the identifiers we need. */
3086 initialize_predefined_identifiers ();
3088 /* Create the global variables. */
3089 push_to_top_level ();
3091 current_function_decl = NULL_TREE;
3092 current_binding_level = NULL;
3093 /* Enter the global namespace. */
3094 gcc_assert (global_namespace == NULL_TREE);
3095 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3096 void_type_node);
3097 begin_scope (sk_namespace, global_namespace);
3099 current_lang_name = NULL_TREE;
3101 /* Adjust various flags based on command-line settings. */
3102 if (!flag_permissive)
3103 flag_pedantic_errors = 1;
3104 if (!flag_no_inline)
3106 flag_inline_trees = 1;
3107 flag_no_inline = 1;
3109 if (flag_inline_functions)
3110 flag_inline_trees = 2;
3112 /* Force minimum function alignment if using the least significant
3113 bit of function pointers to store the virtual bit. */
3114 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
3115 && force_align_functions_log < 1)
3116 force_align_functions_log = 1;
3118 /* Initially, C. */
3119 current_lang_name = lang_name_c;
3121 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
3122 TREE_TYPE (error_mark_list) = error_mark_node;
3124 /* Create the `std' namespace. */
3125 push_namespace (std_identifier);
3126 std_node = current_namespace;
3127 pop_namespace ();
3129 c_common_nodes_and_builtins ();
3131 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3132 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3133 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3134 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3135 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3136 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3137 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3138 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3140 integer_two_node = build_int_cst (NULL_TREE, 2);
3141 integer_three_node = build_int_cst (NULL_TREE, 3);
3143 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3144 truthvalue_type_node = boolean_type_node;
3145 truthvalue_false_node = boolean_false_node;
3146 truthvalue_true_node = boolean_true_node;
3148 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3150 #if 0
3151 record_builtin_type (RID_MAX, NULL, string_type_node);
3152 #endif
3154 delta_type_node = ptrdiff_type_node;
3155 vtable_index_type = ptrdiff_type_node;
3157 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3158 void_ftype = build_function_type (void_type_node, void_list_node);
3159 void_ftype_ptr = build_function_type (void_type_node,
3160 tree_cons (NULL_TREE,
3161 ptr_type_node,
3162 void_list_node));
3163 void_ftype_ptr
3164 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3166 /* C++ extensions */
3168 unknown_type_node = make_node (UNKNOWN_TYPE);
3169 record_unknown_type (unknown_type_node, "unknown type");
3171 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3172 TREE_TYPE (unknown_type_node) = unknown_type_node;
3174 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3175 result. */
3176 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3177 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3180 /* Make sure we get a unique function type, so we can give
3181 its pointer type a name. (This wins for gdb.) */
3182 tree vfunc_type = make_node (FUNCTION_TYPE);
3183 TREE_TYPE (vfunc_type) = integer_type_node;
3184 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3185 layout_type (vfunc_type);
3187 vtable_entry_type = build_pointer_type (vfunc_type);
3189 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3191 vtbl_type_node
3192 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3193 layout_type (vtbl_type_node);
3194 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3195 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3196 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3197 layout_type (vtbl_ptr_type_node);
3198 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3200 push_namespace (get_identifier ("__cxxabiv1"));
3201 abi_node = current_namespace;
3202 pop_namespace ();
3204 global_type_node = make_node (LANG_TYPE);
3205 record_unknown_type (global_type_node, "global type");
3207 /* Now, C++. */
3208 current_lang_name = lang_name_cplusplus;
3211 tree bad_alloc_id;
3212 tree bad_alloc_type_node;
3213 tree bad_alloc_decl;
3214 tree newtype, deltype;
3215 tree ptr_ftype_sizetype;
3217 push_namespace (std_identifier);
3218 bad_alloc_id = get_identifier ("bad_alloc");
3219 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3220 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3221 bad_alloc_decl
3222 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3223 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3224 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3225 pop_namespace ();
3227 ptr_ftype_sizetype
3228 = build_function_type (ptr_type_node,
3229 tree_cons (NULL_TREE,
3230 size_type_node,
3231 void_list_node));
3232 newtype = build_exception_variant
3233 (ptr_ftype_sizetype, add_exception_specifier
3234 (NULL_TREE, bad_alloc_type_node, -1));
3235 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3236 push_cp_library_fn (NEW_EXPR, newtype);
3237 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3238 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3239 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3242 abort_fndecl
3243 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3245 /* Perform other language dependent initializations. */
3246 init_class_processing ();
3247 init_rtti_processing ();
3249 if (flag_exceptions)
3250 init_exception_processing ();
3252 if (! supports_one_only ())
3253 flag_weak = 0;
3255 make_fname_decl = cp_make_fname_decl;
3256 start_fname_decls ();
3258 /* Show we use EH for cleanups. */
3259 if (flag_exceptions)
3260 using_eh_for_cleanups ();
3263 /* Generate an initializer for a function naming variable from
3264 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3265 filled in with the type of the init. */
3267 tree
3268 cp_fname_init (const char* name, tree *type_p)
3270 tree domain = NULL_TREE;
3271 tree type;
3272 tree init = NULL_TREE;
3273 size_t length = 0;
3275 if (name)
3277 length = strlen (name);
3278 domain = build_index_type (size_int (length));
3279 init = build_string (length + 1, name);
3282 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3283 type = build_cplus_array_type (type, domain);
3285 *type_p = type;
3287 if (init)
3288 TREE_TYPE (init) = type;
3289 else
3290 init = error_mark_node;
3292 return init;
3295 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3296 decl, NAME is the initialization string and TYPE_DEP indicates whether
3297 NAME depended on the type of the function. We make use of that to detect
3298 __PRETTY_FUNCTION__ inside a template fn. This is being done
3299 lazily at the point of first use, so we mustn't push the decl now. */
3301 static tree
3302 cp_make_fname_decl (tree id, int type_dep)
3304 const char *const name = (type_dep && processing_template_decl
3305 ? NULL : fname_as_string (type_dep));
3306 tree type;
3307 tree init = cp_fname_init (name, &type);
3308 tree decl = build_decl (VAR_DECL, id, type);
3310 if (name)
3311 free ((char *) name);
3313 /* As we're using pushdecl_with_scope, we must set the context. */
3314 DECL_CONTEXT (decl) = current_function_decl;
3315 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3317 TREE_STATIC (decl) = 1;
3318 TREE_READONLY (decl) = 1;
3319 DECL_ARTIFICIAL (decl) = 1;
3320 DECL_INITIAL (decl) = init;
3322 TREE_USED (decl) = 1;
3324 if (current_function_decl)
3326 struct cp_binding_level *b = current_binding_level;
3327 while (b->level_chain->kind != sk_function_parms)
3328 b = b->level_chain;
3329 pushdecl_with_scope (decl, b, /*is_friend=*/false);
3330 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3331 LOOKUP_ONLYCONVERTING);
3333 else
3334 pushdecl_top_level_and_finish (decl, init);
3336 return decl;
3339 /* Make a definition for a builtin function named NAME in the current
3340 namespace, whose data type is TYPE and whose context is CONTEXT.
3341 TYPE should be a function type with argument types.
3343 CLASS and CODE tell later passes how to compile calls to this function.
3344 See tree.h for possible values.
3346 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3347 the name to be called if we can't opencode the function.
3348 If ATTRS is nonzero, use that for the function's attribute
3349 list. */
3351 static tree
3352 builtin_function_1 (const char* name,
3353 tree type,
3354 tree context,
3355 enum built_in_function code,
3356 enum built_in_class class,
3357 const char* libname,
3358 tree attrs)
3360 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3361 DECL_BUILT_IN_CLASS (decl) = class;
3362 DECL_FUNCTION_CODE (decl) = code;
3363 DECL_CONTEXT (decl) = context;
3365 pushdecl (decl);
3367 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3368 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3369 function in the namespace. */
3370 if (libname)
3371 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3373 /* A function in the user's namespace should have an explicit
3374 declaration before it is used. Mark the built-in function as
3375 anticipated but not actually declared. */
3376 if (name[0] != '_' || name[1] != '_')
3377 DECL_ANTICIPATED (decl) = 1;
3379 /* Possibly apply some default attributes to this built-in function. */
3380 if (attrs)
3381 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3382 else
3383 decl_attributes (&decl, NULL_TREE, 0);
3385 return decl;
3388 /* Entry point for the benefit of c_common_nodes_and_builtins.
3390 Make a definition for a builtin function named NAME and whose data type
3391 is TYPE. TYPE should be a function type with argument types. This
3392 function places the anticipated declaration in the global namespace
3393 and additionally in the std namespace if appropriate.
3395 CLASS and CODE tell later passes how to compile calls to this function.
3396 See tree.h for possible values.
3398 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3399 the name to be called if we can't opencode the function.
3401 If ATTRS is nonzero, use that for the function's attribute
3402 list. */
3404 tree
3405 builtin_function (const char* name,
3406 tree type,
3407 int code,
3408 enum built_in_class cl,
3409 const char* libname,
3410 tree attrs)
3412 /* All builtins that don't begin with an '_' should additionally
3413 go in the 'std' namespace. */
3414 if (name[0] != '_')
3416 push_namespace (std_identifier);
3417 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3418 pop_namespace ();
3421 return builtin_function_1 (name, type, NULL_TREE, code,
3422 cl, libname, attrs);
3425 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3426 function. Not called directly. */
3428 static tree
3429 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3431 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3432 DECL_EXTERNAL (fn) = 1;
3433 TREE_PUBLIC (fn) = 1;
3434 DECL_ARTIFICIAL (fn) = 1;
3435 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3436 SET_DECL_LANGUAGE (fn, lang_c);
3437 /* Runtime library routines are, by definition, available in an
3438 external shared object. */
3439 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3440 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3441 return fn;
3444 /* Returns the _DECL for a library function with C linkage.
3445 We assume that such functions never throw; if this is incorrect,
3446 callers should unset TREE_NOTHROW. */
3448 tree
3449 build_library_fn (tree name, tree type)
3451 tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3452 TREE_NOTHROW (fn) = 1;
3453 return fn;
3456 /* Returns the _DECL for a library function with C++ linkage. */
3458 static tree
3459 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3461 tree fn = build_library_fn_1 (name, operator_code, type);
3462 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3463 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3464 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3465 return fn;
3468 /* Like build_library_fn, but takes a C string instead of an
3469 IDENTIFIER_NODE. */
3471 tree
3472 build_library_fn_ptr (const char* name, tree type)
3474 return build_library_fn (get_identifier (name), type);
3477 /* Like build_cp_library_fn, but takes a C string instead of an
3478 IDENTIFIER_NODE. */
3480 tree
3481 build_cp_library_fn_ptr (const char* name, tree type)
3483 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3486 /* Like build_library_fn, but also pushes the function so that we will
3487 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3489 tree
3490 push_library_fn (tree name, tree type)
3492 tree fn = build_library_fn (name, type);
3493 pushdecl_top_level (fn);
3494 return fn;
3497 /* Like build_cp_library_fn, but also pushes the function so that it
3498 will be found by normal lookup. */
3500 static tree
3501 push_cp_library_fn (enum tree_code operator_code, tree type)
3503 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3504 operator_code,
3505 type);
3506 pushdecl (fn);
3507 return fn;
3510 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3511 a FUNCTION_TYPE. */
3513 tree
3514 push_void_library_fn (tree name, tree parmtypes)
3516 tree type = build_function_type (void_type_node, parmtypes);
3517 return push_library_fn (name, type);
3520 /* Like push_library_fn, but also note that this function throws
3521 and does not return. Used for __throw_foo and the like. */
3523 tree
3524 push_throw_library_fn (tree name, tree type)
3526 tree fn = push_library_fn (name, type);
3527 TREE_THIS_VOLATILE (fn) = 1;
3528 TREE_NOTHROW (fn) = 0;
3529 return fn;
3532 /* When we call finish_struct for an anonymous union, we create
3533 default copy constructors and such. But, an anonymous union
3534 shouldn't have such things; this function undoes the damage to the
3535 anonymous union type T.
3537 (The reason that we create the synthesized methods is that we don't
3538 distinguish `union { int i; }' from `typedef union { int i; } U'.
3539 The first is an anonymous union; the second is just an ordinary
3540 union type.) */
3542 void
3543 fixup_anonymous_aggr (tree t)
3545 tree *q;
3547 /* Wipe out memory of synthesized methods. */
3548 TYPE_HAS_CONSTRUCTOR (t) = 0;
3549 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3550 TYPE_HAS_INIT_REF (t) = 0;
3551 TYPE_HAS_CONST_INIT_REF (t) = 0;
3552 TYPE_HAS_ASSIGN_REF (t) = 0;
3553 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3555 /* Splice the implicitly generated functions out of the TYPE_METHODS
3556 list. */
3557 q = &TYPE_METHODS (t);
3558 while (*q)
3560 if (DECL_ARTIFICIAL (*q))
3561 *q = TREE_CHAIN (*q);
3562 else
3563 q = &TREE_CHAIN (*q);
3566 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3567 if (TYPE_METHODS (t))
3568 error ("%Jan anonymous union cannot have function members",
3569 TYPE_MAIN_DECL (t));
3571 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3572 assignment operators (because they cannot have these methods themselves).
3573 For anonymous unions this is already checked because they are not allowed
3574 in any union, otherwise we have to check it. */
3575 if (TREE_CODE (t) != UNION_TYPE)
3577 tree field, type;
3579 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3580 if (TREE_CODE (field) == FIELD_DECL)
3582 type = TREE_TYPE (field);
3583 if (CLASS_TYPE_P (type))
3585 if (TYPE_NEEDS_CONSTRUCTING (type))
3586 error ("member %q+#D with constructor not allowed "
3587 "in anonymous aggregate", field);
3588 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3589 error ("member %q+#D with destructor not allowed "
3590 "in anonymous aggregate", field);
3591 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3592 error ("member %q+#D with copy assignment operator "
3593 "not allowed in anonymous aggregate", field);
3599 /* Make sure that a declaration with no declarator is well-formed, i.e.
3600 just declares a tagged type or anonymous union.
3602 Returns the type declared; or NULL_TREE if none. */
3604 tree
3605 check_tag_decl (cp_decl_specifier_seq *declspecs)
3607 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3608 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3609 /* If a class, struct, or enum type is declared by the DECLSPECS
3610 (i.e, if a class-specifier, enum-specifier, or non-typename
3611 elaborated-type-specifier appears in the DECLSPECS),
3612 DECLARED_TYPE is set to the corresponding type. */
3613 tree declared_type = NULL_TREE;
3614 bool error_p = false;
3616 if (declspecs->multiple_types_p)
3617 error ("multiple types in one declaration");
3618 else if (declspecs->redefined_builtin_type)
3620 if (!in_system_header)
3621 pedwarn ("redeclaration of C++ built-in type %qT",
3622 declspecs->redefined_builtin_type);
3623 return NULL_TREE;
3626 if (declspecs->type
3627 && TYPE_P (declspecs->type)
3628 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3629 && IS_AGGR_TYPE (declspecs->type))
3630 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3631 declared_type = declspecs->type;
3632 else if (declspecs->type == error_mark_node)
3633 error_p = true;
3634 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3635 pedwarn ("declaration does not declare anything");
3636 /* Check for an anonymous union. */
3637 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3638 && TYPE_ANONYMOUS_P (declared_type))
3640 /* 7/3 In a simple-declaration, the optional init-declarator-list
3641 can be omitted only when declaring a class (clause 9) or
3642 enumeration (7.2), that is, when the decl-specifier-seq contains
3643 either a class-specifier, an elaborated-type-specifier with
3644 a class-key (9.1), or an enum-specifier. In these cases and
3645 whenever a class-specifier or enum-specifier is present in the
3646 decl-specifier-seq, the identifiers in these specifiers are among
3647 the names being declared by the declaration (as class-name,
3648 enum-names, or enumerators, depending on the syntax). In such
3649 cases, and except for the declaration of an unnamed bit-field (9.6),
3650 the decl-specifier-seq shall introduce one or more names into the
3651 program, or shall redeclare a name introduced by a previous
3652 declaration. [Example:
3653 enum { }; // ill-formed
3654 typedef class { }; // ill-formed
3655 --end example] */
3656 if (saw_typedef)
3658 error ("missing type-name in typedef-declaration");
3659 return NULL_TREE;
3661 /* Anonymous unions are objects, so they can have specifiers. */;
3662 SET_ANON_AGGR_TYPE_P (declared_type);
3664 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3665 && !in_system_header)
3666 pedwarn ("ISO C++ prohibits anonymous structs");
3669 else
3671 if (declspecs->specs[(int)ds_inline]
3672 || declspecs->specs[(int)ds_virtual])
3673 error ("%qs can only be specified for functions",
3674 declspecs->specs[(int)ds_inline]
3675 ? "inline" : "virtual");
3676 else if (saw_friend
3677 && (!current_class_type
3678 || current_scope () != current_class_type))
3679 error ("%<friend%> can only be specified inside a class");
3680 else if (declspecs->specs[(int)ds_explicit])
3681 error ("%<explicit%> can only be specified for constructors");
3682 else if (declspecs->storage_class)
3683 error ("a storage class can only be specified for objects "
3684 "and functions");
3685 else if (declspecs->specs[(int)ds_const]
3686 || declspecs->specs[(int)ds_volatile]
3687 || declspecs->specs[(int)ds_restrict]
3688 || declspecs->specs[(int)ds_thread])
3689 error ("qualifiers can only be specified for objects "
3690 "and functions");
3693 return declared_type;
3696 /* Called when a declaration is seen that contains no names to declare.
3697 If its type is a reference to a structure, union or enum inherited
3698 from a containing scope, shadow that tag name for the current scope
3699 with a forward reference.
3700 If its type defines a new named structure or union
3701 or defines an enum, it is valid but we need not do anything here.
3702 Otherwise, it is an error.
3704 C++: may have to grok the declspecs to learn about static,
3705 complain for anonymous unions.
3707 Returns the TYPE declared -- or NULL_TREE if none. */
3709 tree
3710 shadow_tag (cp_decl_specifier_seq *declspecs)
3712 tree t = check_tag_decl (declspecs);
3714 if (!t)
3715 return NULL_TREE;
3717 if (declspecs->attributes)
3719 warning (0, "attribute ignored in declaration of %q+#T", t);
3720 warning (0, "attribute for %q+#T must follow the %qs keyword",
3721 t, class_key_or_enum_as_string (t));
3725 maybe_process_partial_specialization (t);
3727 /* This is where the variables in an anonymous union are
3728 declared. An anonymous union declaration looks like:
3729 union { ... } ;
3730 because there is no declarator after the union, the parser
3731 sends that declaration here. */
3732 if (ANON_AGGR_TYPE_P (t))
3734 fixup_anonymous_aggr (t);
3736 if (TYPE_FIELDS (t))
3738 tree decl = grokdeclarator (/*declarator=*/NULL,
3739 declspecs, NORMAL, 0, NULL);
3740 finish_anon_union (decl);
3744 return t;
3747 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3749 tree
3750 groktypename (cp_decl_specifier_seq *type_specifiers,
3751 const cp_declarator *declarator)
3753 tree attrs;
3754 tree type;
3755 attrs = type_specifiers->attributes;
3756 type_specifiers->attributes = NULL_TREE;
3757 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3758 if (attrs)
3759 cplus_decl_attributes (&type, attrs, 0);
3760 return type;
3763 /* Decode a declarator in an ordinary declaration or data definition.
3764 This is called as soon as the type information and variable name
3765 have been parsed, before parsing the initializer if any.
3766 Here we create the ..._DECL node, fill in its type,
3767 and put it on the list of decls for the current context.
3768 The ..._DECL node is returned as the value.
3770 Exception: for arrays where the length is not specified,
3771 the type is left null, to be filled in by `cp_finish_decl'.
3773 Function definitions do not come here; they go to start_function
3774 instead. However, external and forward declarations of functions
3775 do go through here. Structure field declarations are done by
3776 grokfield and not through here. */
3778 tree
3779 start_decl (const cp_declarator *declarator,
3780 cp_decl_specifier_seq *declspecs,
3781 int initialized,
3782 tree attributes,
3783 tree prefix_attributes,
3784 tree *pushed_scope_p)
3786 tree decl;
3787 tree type, tem;
3788 tree context;
3790 *pushed_scope_p = NULL_TREE;
3792 /* This should only be done once on the top most decl. */
3793 if (have_extern_spec)
3795 declspecs->storage_class = sc_extern;
3796 have_extern_spec = false;
3799 /* An object declared as __attribute__((deprecated)) suppresses
3800 warnings of uses of other deprecated items. */
3801 if (lookup_attribute ("deprecated", attributes))
3802 deprecated_state = DEPRECATED_SUPPRESS;
3804 attributes = chainon (attributes, prefix_attributes);
3806 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3807 &attributes);
3809 deprecated_state = DEPRECATED_NORMAL;
3811 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
3812 || decl == error_mark_node)
3813 return error_mark_node;
3815 type = TREE_TYPE (decl);
3817 context = DECL_CONTEXT (decl);
3819 if (context)
3821 *pushed_scope_p = push_scope (context);
3823 /* We are only interested in class contexts, later. */
3824 if (TREE_CODE (context) == NAMESPACE_DECL)
3825 context = NULL_TREE;
3828 if (initialized)
3829 /* Is it valid for this decl to have an initializer at all?
3830 If not, set INITIALIZED to zero, which will indirectly
3831 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3832 switch (TREE_CODE (decl))
3834 case TYPE_DECL:
3835 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3836 initialized = 0;
3837 break;
3839 case FUNCTION_DECL:
3840 error ("function %q#D is initialized like a variable", decl);
3841 initialized = 0;
3842 break;
3844 default:
3845 break;
3848 if (initialized)
3850 if (! toplevel_bindings_p ()
3851 && DECL_EXTERNAL (decl))
3852 warning (0, "declaration of %q#D has %<extern%> and is initialized",
3853 decl);
3854 DECL_EXTERNAL (decl) = 0;
3855 if (toplevel_bindings_p ())
3856 TREE_STATIC (decl) = 1;
3858 /* Tell `pushdecl' this is an initialized decl
3859 even though we don't yet have the initializer expression.
3860 Also tell `cp_finish_decl' it may store the real initializer. */
3861 DECL_INITIAL (decl) = error_mark_node;
3864 /* Set attributes here so if duplicate decl, will have proper attributes. */
3865 cplus_decl_attributes (&decl, attributes, 0);
3867 /* If #pragma weak was used, mark the decl weak now. */
3868 maybe_apply_pragma_weak (decl);
3870 if (TREE_CODE (decl) == FUNCTION_DECL
3871 && DECL_DECLARED_INLINE_P (decl)
3872 && DECL_UNINLINABLE (decl)
3873 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3874 warning (0, "inline function %q+D given attribute noinline", decl);
3876 if (context && COMPLETE_TYPE_P (complete_type (context)))
3878 if (TREE_CODE (decl) == VAR_DECL)
3880 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3881 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3882 error ("%q#D is not a static member of %q#T", decl, context);
3883 else
3885 if (DECL_CONTEXT (field) != context)
3887 if (!same_type_p (DECL_CONTEXT (field), context))
3888 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3889 "to be defined as %<%T::%D%>",
3890 DECL_CONTEXT (field), DECL_NAME (decl),
3891 context, DECL_NAME (decl));
3892 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3894 if (processing_specialization
3895 && template_class_depth (context) == 0
3896 && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
3897 error ("template header not allowed in member definition "
3898 "of explicitly specialized class");
3899 /* Static data member are tricky; an in-class initialization
3900 still doesn't provide a definition, so the in-class
3901 declaration will have DECL_EXTERNAL set, but will have an
3902 initialization. Thus, duplicate_decls won't warn
3903 about this situation, and so we check here. */
3904 if (DECL_INITIAL (decl)
3905 && DECL_INITIALIZED_IN_CLASS_P (field))
3906 error ("duplicate initialization of %qD", decl);
3907 if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
3908 decl = field;
3911 else
3913 tree field = check_classfn (context, decl,
3914 (processing_template_decl
3915 > template_class_depth (context))
3916 ? current_template_parms
3917 : NULL_TREE);
3918 if (field && duplicate_decls (decl, field,
3919 /*newdecl_is_friend=*/false))
3920 decl = field;
3923 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3924 DECL_IN_AGGR_P (decl) = 0;
3925 /* Do not mark DECL as an explicit specialization if it was not
3926 already marked as an instantiation; a declaration should
3927 never be marked as a specialization unless we know what
3928 template is being specialized. */
3929 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3931 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3933 /* [temp.expl.spec] An explicit specialization of a static data
3934 member of a template is a definition if the declaration
3935 includes an initializer; otherwise, it is a declaration.
3937 We check for processing_specialization so this only applies
3938 to the new specialization syntax. */
3939 if (!DECL_INITIAL (decl)
3940 && processing_specialization)
3941 DECL_EXTERNAL (decl) = 1;
3944 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3945 pedwarn ("declaration of %q#D outside of class is not definition",
3946 decl);
3949 /* Enter this declaration into the symbol table. */
3950 tem = maybe_push_decl (decl);
3952 if (processing_template_decl)
3953 tem = push_template_decl (tem);
3954 if (tem == error_mark_node)
3955 return error_mark_node;
3957 /* Tell the back-end to use or not use .common as appropriate. If we say
3958 -fconserve-space, we want this to save .data space, at the expense of
3959 wrong semantics. If we say -fno-conserve-space, we want this to
3960 produce errors about redefs; to do this we force variables into the
3961 data segment. */
3962 if (flag_conserve_space
3963 && TREE_CODE (tem) == VAR_DECL
3964 && TREE_PUBLIC (tem)
3965 && !DECL_THREAD_LOCAL_P (tem)
3966 && !have_global_bss_p ())
3967 DECL_COMMON (tem) = 1;
3969 if (! processing_template_decl)
3970 start_decl_1 (tem);
3972 return tem;
3975 void
3976 start_decl_1 (tree decl)
3978 tree type = TREE_TYPE (decl);
3979 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3981 if (type == error_mark_node)
3982 return;
3984 if (initialized)
3985 /* Is it valid for this decl to have an initializer at all?
3986 If not, set INITIALIZED to zero, which will indirectly
3987 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3989 /* Don't allow initializations for incomplete types except for
3990 arrays which might be completed by the initialization. */
3991 if (COMPLETE_TYPE_P (complete_type (type)))
3992 ; /* A complete type is ok. */
3993 else if (TREE_CODE (type) != ARRAY_TYPE)
3995 error ("variable %q#D has initializer but incomplete type", decl);
3996 initialized = 0;
3997 type = TREE_TYPE (decl) = error_mark_node;
3999 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4001 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4002 error ("elements of array %q#D have incomplete type", decl);
4003 /* else we already gave an error in start_decl. */
4004 initialized = 0;
4008 if (!initialized
4009 && TREE_CODE (decl) != TYPE_DECL
4010 && TREE_CODE (decl) != TEMPLATE_DECL
4011 && type != error_mark_node
4012 && IS_AGGR_TYPE (type)
4013 && ! DECL_EXTERNAL (decl))
4015 if ((! processing_template_decl || ! uses_template_parms (type))
4016 && !COMPLETE_TYPE_P (complete_type (type)))
4018 error ("aggregate %q#D has incomplete type and cannot be defined",
4019 decl);
4020 /* Change the type so that assemble_variable will give
4021 DECL an rtl we can live with: (mem (const_int 0)). */
4022 type = TREE_TYPE (decl) = error_mark_node;
4024 else
4026 /* If any base type in the hierarchy of TYPE needs a constructor,
4027 then we set initialized to 1. This way any nodes which are
4028 created for the purposes of initializing this aggregate
4029 will live as long as it does. This is necessary for global
4030 aggregates which do not have their initializers processed until
4031 the end of the file. */
4032 initialized = TYPE_NEEDS_CONSTRUCTING (type);
4036 if (! initialized)
4037 DECL_INITIAL (decl) = NULL_TREE;
4039 /* Create a new scope to hold this declaration if necessary.
4040 Whether or not a new scope is necessary cannot be determined
4041 until after the type has been completed; if the type is a
4042 specialization of a class template it is not until after
4043 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4044 will be set correctly. */
4045 maybe_push_cleanup_level (type);
4048 /* Handle initialization of references. DECL, TYPE, and INIT have the
4049 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
4050 but will be set to a new CLEANUP_STMT if a temporary is created
4051 that must be destroyed subsequently.
4053 Returns an initializer expression to use to initialize DECL, or
4054 NULL if the initialization can be performed statically.
4056 Quotes on semantics can be found in ARM 8.4.3. */
4058 static tree
4059 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4061 tree tmp;
4063 if (init == NULL_TREE)
4065 if ((DECL_LANG_SPECIFIC (decl) == 0
4066 || DECL_IN_AGGR_P (decl) == 0)
4067 && ! DECL_THIS_EXTERN (decl))
4068 error ("%qD declared as reference but not initialized", decl);
4069 return NULL_TREE;
4072 if (TREE_CODE (init) == CONSTRUCTOR)
4074 error ("ISO C++ forbids use of initializer list to "
4075 "initialize reference %qD", decl);
4076 return NULL_TREE;
4079 if (TREE_CODE (init) == TREE_LIST)
4080 init = build_x_compound_expr_from_list (init, "initializer");
4082 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4083 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4084 /* Note: default conversion is only called in very special cases. */
4085 init = decay_conversion (init);
4087 /* Convert INIT to the reference type TYPE. This may involve the
4088 creation of a temporary, whose lifetime must be the same as that
4089 of the reference. If so, a DECL_EXPR for the temporary will be
4090 added just after the DECL_EXPR for DECL. That's why we don't set
4091 DECL_INITIAL for local references (instead assigning to them
4092 explicitly); we need to allow the temporary to be initialized
4093 first. */
4094 tmp = initialize_reference (type, init, decl, cleanup);
4096 if (tmp == error_mark_node)
4097 return NULL_TREE;
4098 else if (tmp == NULL_TREE)
4100 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4101 return NULL_TREE;
4104 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4105 return tmp;
4107 DECL_INITIAL (decl) = tmp;
4109 return NULL_TREE;
4112 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4113 array until we finish parsing the initializer. If that's the
4114 situation we're in, update DECL accordingly. */
4116 static void
4117 maybe_deduce_size_from_array_init (tree decl, tree init)
4119 tree type = TREE_TYPE (decl);
4121 if (TREE_CODE (type) == ARRAY_TYPE
4122 && TYPE_DOMAIN (type) == NULL_TREE
4123 && TREE_CODE (decl) != TYPE_DECL)
4125 /* do_default is really a C-ism to deal with tentative definitions.
4126 But let's leave it here to ease the eventual merge. */
4127 int do_default = !DECL_EXTERNAL (decl);
4128 tree initializer = init ? init : DECL_INITIAL (decl);
4129 int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4130 do_default);
4132 if (failure == 1)
4133 error ("initializer fails to determine size of %qD", decl);
4135 if (failure == 2)
4137 if (do_default)
4138 error ("array size missing in %qD", decl);
4139 /* If a `static' var's size isn't known, make it extern as
4140 well as static, so it does not get allocated. If it's not
4141 `static', then don't mark it extern; finish_incomplete_decl
4142 will give it a default size and it will get allocated. */
4143 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4144 DECL_EXTERNAL (decl) = 1;
4147 if (failure == 3)
4148 error ("zero-size array %qD", decl);
4150 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4152 layout_decl (decl, 0);
4156 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4157 any appropriate error messages regarding the layout. */
4159 static void
4160 layout_var_decl (tree decl)
4162 tree type = TREE_TYPE (decl);
4164 /* If we haven't already layed out this declaration, do so now.
4165 Note that we must not call complete type for an external object
4166 because it's type might involve templates that we are not
4167 supposed to instantiate yet. (And it's perfectly valid to say
4168 `extern X x' for some incomplete type `X'.) */
4169 if (!DECL_EXTERNAL (decl))
4170 complete_type (type);
4171 if (!DECL_SIZE (decl)
4172 && TREE_TYPE (decl) != error_mark_node
4173 && (COMPLETE_TYPE_P (type)
4174 || (TREE_CODE (type) == ARRAY_TYPE
4175 && !TYPE_DOMAIN (type)
4176 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4177 layout_decl (decl, 0);
4179 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4181 /* An automatic variable with an incomplete type: that is an error.
4182 Don't talk about array types here, since we took care of that
4183 message in grokdeclarator. */
4184 error ("storage size of %qD isn't known", decl);
4185 TREE_TYPE (decl) = error_mark_node;
4187 #if 0
4188 /* Keep this code around in case we later want to control debug info
4189 based on whether a type is "used". (jason 1999-11-11) */
4191 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4192 /* Let debugger know it should output info for this type. */
4193 note_debug_info_needed (ttype);
4195 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4196 note_debug_info_needed (DECL_CONTEXT (decl));
4197 #endif
4199 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4200 && DECL_SIZE (decl) != NULL_TREE
4201 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4203 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4204 constant_expression_warning (DECL_SIZE (decl));
4205 else
4206 error ("storage size of %qD isn't constant", decl);
4209 if (TREE_STATIC (decl)
4210 && !DECL_ARTIFICIAL (decl)
4211 && current_function_decl
4212 && DECL_CONTEXT (decl) == current_function_decl)
4213 push_local_name (decl);
4216 /* If a local static variable is declared in an inline function, or if
4217 we have a weak definition, we must endeavor to create only one
4218 instance of the variable at link-time. */
4220 static void
4221 maybe_commonize_var (tree decl)
4223 /* Static data in a function with comdat linkage also has comdat
4224 linkage. */
4225 if (TREE_STATIC (decl)
4226 /* Don't mess with __FUNCTION__. */
4227 && ! DECL_ARTIFICIAL (decl)
4228 && DECL_FUNCTION_SCOPE_P (decl)
4229 /* Unfortunately, import_export_decl has not always been called
4230 before the function is processed, so we cannot simply check
4231 DECL_COMDAT. */
4232 && (DECL_COMDAT (DECL_CONTEXT (decl))
4233 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4234 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4235 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4237 if (flag_weak)
4239 /* With weak symbols, we simply make the variable COMDAT;
4240 that will cause copies in multiple translations units to
4241 be merged. */
4242 comdat_linkage (decl);
4244 else
4246 if (DECL_INITIAL (decl) == NULL_TREE
4247 || DECL_INITIAL (decl) == error_mark_node)
4249 /* Without weak symbols, we can use COMMON to merge
4250 uninitialized variables. */
4251 TREE_PUBLIC (decl) = 1;
4252 DECL_COMMON (decl) = 1;
4254 else
4256 /* While for initialized variables, we must use internal
4257 linkage -- which means that multiple copies will not
4258 be merged. */
4259 TREE_PUBLIC (decl) = 0;
4260 DECL_COMMON (decl) = 0;
4261 warning (0, "sorry: semantics of inline function static "
4262 "data %q+#D are wrong (you'll wind up "
4263 "with multiple copies)", decl);
4264 warning (0, "%J you can work around this by removing "
4265 "the initializer",
4266 decl);
4270 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4271 /* Set it up again; we might have set DECL_INITIAL since the last
4272 time. */
4273 comdat_linkage (decl);
4276 /* Issue an error message if DECL is an uninitialized const variable. */
4278 static void
4279 check_for_uninitialized_const_var (tree decl)
4281 tree type = TREE_TYPE (decl);
4283 /* ``Unless explicitly declared extern, a const object does not have
4284 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4285 7.1.6 */
4286 if (TREE_CODE (decl) == VAR_DECL
4287 && TREE_CODE (type) != REFERENCE_TYPE
4288 && CP_TYPE_CONST_P (type)
4289 && !TYPE_NEEDS_CONSTRUCTING (type)
4290 && !DECL_INITIAL (decl))
4291 error ("uninitialized const %qD", decl);
4295 /* Structure holding the current initializer being processed by reshape_init.
4296 CUR is a pointer to the current element being processed, END is a pointer
4297 after the last element present in the initializer. */
4298 typedef struct reshape_iterator_t
4300 constructor_elt *cur;
4301 constructor_elt *end;
4302 } reshape_iter;
4304 static tree reshape_init_r (tree, reshape_iter *, bool);
4306 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4307 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4308 initialized. If there are no more such fields, the return value
4309 will be NULL. */
4311 static tree
4312 next_initializable_field (tree field)
4314 while (field
4315 && (TREE_CODE (field) != FIELD_DECL
4316 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4317 || DECL_ARTIFICIAL (field)))
4318 field = TREE_CHAIN (field);
4320 return field;
4323 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4324 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4325 INTEGER_CST representing the size of the array minus one (the maximum index),
4326 or NULL_TREE if the array was declared without specifying the size. D is
4327 the iterator within the constructor. */
4329 static tree
4330 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4332 tree new_init;
4333 bool sized_array_p = (max_index != NULL_TREE);
4334 unsigned HOST_WIDE_INT max_index_cst = 0;
4335 unsigned HOST_WIDE_INT index;
4337 /* The initializer for an array is always a CONSTRUCTOR. */
4338 new_init = build_constructor (NULL_TREE, NULL);
4340 if (sized_array_p)
4342 /* Minus 1 is used for zero sized arrays. */
4343 if (integer_all_onesp (max_index))
4344 return new_init;
4346 if (host_integerp (max_index, 1))
4347 max_index_cst = tree_low_cst (max_index, 1);
4348 /* sizetype is sign extended, not zero extended. */
4349 else
4350 max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4354 /* Loop until there are no more initializers. */
4355 for (index = 0;
4356 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4357 ++index)
4359 tree elt_init;
4361 if (d->cur->index)
4363 /* Handle array designated initializers (GNU extension). */
4364 if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
4366 error ("name %qD used in a GNU-style designated "
4367 "initializer for an array", d->cur->index);
4369 else
4370 gcc_unreachable ();
4373 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4374 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4377 return new_init;
4380 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4381 Parameters are the same of reshape_init_r. */
4383 static tree
4384 reshape_init_array (tree type, reshape_iter *d)
4386 tree max_index = NULL_TREE;
4388 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4390 if (TYPE_DOMAIN (type))
4391 max_index = array_type_nelts (type);
4393 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4396 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4397 Parameters are the same of reshape_init_r. */
4399 static tree
4400 reshape_init_vector (tree type, reshape_iter *d)
4402 tree max_index = NULL_TREE;
4403 tree rtype;
4405 gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4407 if (COMPOUND_LITERAL_P (d->cur->value))
4409 tree value = d->cur->value;
4410 if (!same_type_p (TREE_TYPE (value), type))
4412 error ("invalid type %qT as initializer for a vector of type %qT",
4413 TREE_TYPE (d->cur->value), type);
4414 value = error_mark_node;
4416 ++d->cur;
4417 return value;
4420 /* For a vector, the representation type is a struct
4421 containing a single member which is an array of the
4422 appropriate size. */
4423 rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4424 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4425 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4427 return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4430 /* Subroutine of reshape_init_r, processes the initializers for classes
4431 or union. Parameters are the same of reshape_init_r. */
4433 static tree
4434 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4436 tree field;
4437 tree new_init;
4439 gcc_assert (CLASS_TYPE_P (type));
4441 /* The initializer for a class is always a CONSTRUCTOR. */
4442 new_init = build_constructor (NULL_TREE, NULL);
4443 field = next_initializable_field (TYPE_FIELDS (type));
4445 if (!field)
4447 /* [dcl.init.aggr]
4449 An initializer for an aggregate member that is an
4450 empty class shall have the form of an empty
4451 initializer-list {}. */
4452 if (!first_initializer_p)
4454 error ("initializer for %qT must be brace-enclosed", type);
4455 return error_mark_node;
4457 return new_init;
4460 /* Loop through the initializable fields, gathering initializers. */
4461 while (d->cur != d->end)
4463 tree field_init;
4465 /* Handle designated initializers, as an extension. */
4466 if (d->cur->index)
4468 if (pedantic)
4469 pedwarn ("ISO C++ does not allow designated initializers");
4471 field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4473 if (!field || TREE_CODE (field) != FIELD_DECL)
4474 error ("%qT has no non-static data member named %qD", type,
4475 d->cur->index);
4478 /* If we processed all the member of the class, we are done. */
4479 if (!field)
4480 break;
4482 field_init = reshape_init_r (TREE_TYPE (field), d,
4483 /*first_initializer_p=*/false);
4484 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4486 /* [dcl.init.aggr]
4488 When a union is initialized with a brace-enclosed
4489 initializer, the braces shall only contain an
4490 initializer for the first member of the union. */
4491 if (TREE_CODE (type) == UNION_TYPE)
4492 break;
4494 field = next_initializable_field (TREE_CHAIN (field));
4497 return new_init;
4500 /* Subroutine of reshape_init, which processes a single initializer (part of
4501 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4502 iterator within the CONSTRUCTOR which points to the initializer to process.
4503 FIRST_INITIALIZER_P is true if this is the first initializer of the
4504 CONSTRUCTOR node. */
4506 static tree
4507 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4509 tree init = d->cur->value;
4511 /* A non-aggregate type is always initialized with a single
4512 initializer. */
4513 if (!CP_AGGREGATE_TYPE_P (type))
4515 /* It is invalid to initialize a non-aggregate type with a
4516 brace-enclosed initializer.
4517 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4518 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4519 a CONSTRUCTOR (with a record type). */
4520 if (TREE_CODE (init) == CONSTRUCTOR
4521 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
4523 error ("braces around scalar initializer for type %qT", type);
4524 init = error_mark_node;
4527 d->cur++;
4528 return init;
4531 /* [dcl.init.aggr]
4533 All implicit type conversions (clause _conv_) are considered when
4534 initializing the aggregate member with an initializer from an
4535 initializer-list. If the initializer can initialize a member,
4536 the member is initialized. Otherwise, if the member is itself a
4537 non-empty subaggregate, brace elision is assumed and the
4538 initializer is considered for the initialization of the first
4539 member of the subaggregate. */
4540 if (TREE_CODE (init) != CONSTRUCTOR
4541 && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4543 d->cur++;
4544 return init;
4547 /* [dcl.init.string]
4549 A char array (whether plain char, signed char, or unsigned char)
4550 can be initialized by a string-literal (optionally enclosed in
4551 braces); a wchar_t array can be initialized by a wide
4552 string-literal (optionally enclosed in braces). */
4553 if (TREE_CODE (type) == ARRAY_TYPE
4554 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4556 tree str_init = init;
4558 /* Strip one level of braces if and only if they enclose a single
4559 element (as allowed by [dcl.init.string]). */
4560 if (!first_initializer_p
4561 && TREE_CODE (str_init) == CONSTRUCTOR
4562 && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4564 str_init = VEC_index (constructor_elt,
4565 CONSTRUCTOR_ELTS (str_init), 0)->value;
4568 /* If it's a string literal, then it's the initializer for the array
4569 as a whole. Otherwise, continue with normal initialization for
4570 array types (one value per array element). */
4571 if (TREE_CODE (str_init) == STRING_CST)
4573 d->cur++;
4574 return str_init;
4578 /* The following cases are about aggregates. If we are not within a full
4579 initializer already, and there is not a CONSTRUCTOR, it means that there
4580 is a missing set of braces (that is, we are processing the case for
4581 which reshape_init exists). */
4582 if (!first_initializer_p)
4584 if (TREE_CODE (init) == CONSTRUCTOR)
4586 /* For a nested compound literal, there is no need to reshape since
4587 brace elision is not allowed. Even if we decided to allow it,
4588 we should add a call to reshape_init in finish_compound_literal,
4589 before calling digest_init, so changing this code would still
4590 not be necessary. */
4591 if (!COMPOUND_LITERAL_P (init))
4593 ++d->cur;
4594 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4595 return reshape_init (type, init);
4597 else
4598 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4601 warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4602 type);
4605 /* Dispatch to specialized routines. */
4606 if (CLASS_TYPE_P (type))
4607 return reshape_init_class (type, d, first_initializer_p);
4608 else if (TREE_CODE (type) == ARRAY_TYPE)
4609 return reshape_init_array (type, d);
4610 else if (TREE_CODE (type) == VECTOR_TYPE)
4611 return reshape_init_vector (type, d);
4612 else
4613 gcc_unreachable();
4616 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4617 brace-enclosed aggregate initializer.
4619 INIT is the CONSTRUCTOR containing the list of initializers describing
4620 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4621 It may not presently match the shape of the TYPE; for example:
4623 struct S { int a; int b; };
4624 struct S a[] = { 1, 2, 3, 4 };
4626 Here INIT will hold a VEC of four elements, rather than a
4627 VEC of two elements, each itself a VEC of two elements. This
4628 routine transforms INIT from the former form into the latter. The
4629 revised CONSTRUCTOR node is returned. */
4631 tree
4632 reshape_init (tree type, tree init)
4634 VEC(constructor_elt, gc) *v;
4635 reshape_iter d;
4636 tree new_init;
4638 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4640 v = CONSTRUCTOR_ELTS (init);
4642 /* An empty constructor does not need reshaping, and it is always a valid
4643 initializer. */
4644 if (VEC_empty (constructor_elt, v))
4645 return init;
4647 /* Recurse on this CONSTRUCTOR. */
4648 d.cur = VEC_index (constructor_elt, v, 0);
4649 d.end = d.cur + VEC_length (constructor_elt, v);
4651 new_init = reshape_init_r (type, &d, true);
4653 /* Make sure all the element of the constructor were used. Otherwise,
4654 issue an error about exceeding initializers. */
4655 if (d.cur != d.end)
4656 error ("too many initializers for %qT", type);
4658 return new_init;
4661 /* Verify INIT (the initializer for DECL), and record the
4662 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4663 grok_reference_init.
4665 If the return value is non-NULL, it is an expression that must be
4666 evaluated dynamically to initialize DECL. */
4668 static tree
4669 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4671 tree type = TREE_TYPE (decl);
4672 tree init_code = NULL;
4674 /* If `start_decl' didn't like having an initialization, ignore it now. */
4675 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4676 init = NULL_TREE;
4678 /* If an initializer is present, DECL_INITIAL has been
4679 error_mark_node, to indicate that an as-of-yet unevaluated
4680 initialization will occur. From now on, DECL_INITIAL reflects
4681 the static initialization -- if any -- of DECL. */
4682 DECL_INITIAL (decl) = NULL_TREE;
4684 /* Things that are going to be initialized need to have complete
4685 type. */
4686 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4688 if (type == error_mark_node)
4689 /* We will have already complained. */
4690 init = NULL_TREE;
4691 else if (init && COMPLETE_TYPE_P (type)
4692 && !TREE_CONSTANT (TYPE_SIZE (type)))
4694 error ("variable-sized object %qD may not be initialized", decl);
4695 init = NULL_TREE;
4697 else if (TREE_CODE (type) == ARRAY_TYPE
4698 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4700 error ("elements of array %q#D have incomplete type", decl);
4701 init = NULL_TREE;
4703 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4705 error ("%qD has incomplete type", decl);
4706 TREE_TYPE (decl) = error_mark_node;
4707 init = NULL_TREE;
4710 if (TREE_CODE (decl) == CONST_DECL)
4712 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
4714 DECL_INITIAL (decl) = init;
4716 gcc_assert (init != NULL_TREE);
4717 init = NULL_TREE;
4719 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4720 init = grok_reference_init (decl, type, init, cleanup);
4721 else if (init)
4723 /* Do not reshape constructors of vectors (they don't need to be
4724 reshaped. */
4725 if (TREE_CODE (init) == CONSTRUCTOR
4726 && !COMPOUND_LITERAL_P (init)
4727 && !TREE_TYPE (init)) /* ptrmemfunc */
4729 init = reshape_init (type, init);
4731 if ((*targetm.vector_opaque_p) (type))
4733 error ("opaque vector types cannot be initialized");
4734 init = error_mark_node;
4738 /* If DECL has an array type without a specific bound, deduce the
4739 array size from the initializer. */
4740 maybe_deduce_size_from_array_init (decl, init);
4741 type = TREE_TYPE (decl);
4743 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4745 if (TREE_CODE (type) == ARRAY_TYPE)
4746 goto initialize_aggr;
4747 else if (TREE_CODE (init) == CONSTRUCTOR)
4749 if (TYPE_NON_AGGREGATE_CLASS (type))
4751 error ("%qD must be initialized by constructor, "
4752 "not by %<{...}%>",
4753 decl);
4754 init = error_mark_node;
4756 else
4757 goto dont_use_constructor;
4759 else
4761 int saved_stmts_are_full_exprs_p;
4763 initialize_aggr:
4764 saved_stmts_are_full_exprs_p = 0;
4765 if (building_stmt_tree ())
4767 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4768 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4770 init = build_aggr_init (decl, init, flags);
4771 if (building_stmt_tree ())
4772 current_stmt_tree ()->stmts_are_full_exprs_p =
4773 saved_stmts_are_full_exprs_p;
4774 return init;
4777 else
4779 dont_use_constructor:
4780 if (TREE_CODE (init) != TREE_VEC)
4782 init_code = store_init_value (decl, init);
4783 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
4784 && DECL_INITIAL (decl)
4785 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
4786 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
4787 warning (0, "array %qD initialized by parenthesized string literal %qE",
4788 decl, DECL_INITIAL (decl));
4789 init = NULL;
4793 else if (DECL_EXTERNAL (decl))
4795 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4796 goto initialize_aggr;
4797 else if (IS_AGGR_TYPE (type))
4799 tree core_type = strip_array_types (type);
4801 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4802 error ("structure %qD with uninitialized const members", decl);
4803 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4804 error ("structure %qD with uninitialized reference members", decl);
4806 check_for_uninitialized_const_var (decl);
4808 else
4809 check_for_uninitialized_const_var (decl);
4811 if (init && init != error_mark_node)
4812 init_code = build2 (INIT_EXPR, type, decl, init);
4814 return init_code;
4817 /* If DECL is not a local variable, give it RTL. */
4819 static void
4820 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4822 int toplev = toplevel_bindings_p ();
4823 int defer_p;
4824 const char *filename;
4826 /* Set the DECL_ASSEMBLER_NAME for the object. */
4827 if (asmspec)
4829 /* The `register' keyword, when used together with an
4830 asm-specification, indicates that the variable should be
4831 placed in a particular register. */
4832 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4834 set_user_assembler_name (decl, asmspec);
4835 DECL_HARD_REGISTER (decl) = 1;
4837 else
4839 if (TREE_CODE (decl) == FUNCTION_DECL
4840 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
4841 set_builtin_user_assembler_name (decl, asmspec);
4842 set_user_assembler_name (decl, asmspec);
4846 /* Handle non-variables up front. */
4847 if (TREE_CODE (decl) != VAR_DECL)
4849 rest_of_decl_compilation (decl, toplev, at_eof);
4850 return;
4853 /* If we see a class member here, it should be a static data
4854 member. */
4855 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4857 gcc_assert (TREE_STATIC (decl));
4858 /* An in-class declaration of a static data member should be
4859 external; it is only a declaration, and not a definition. */
4860 if (init == NULL_TREE)
4861 gcc_assert (DECL_EXTERNAL (decl));
4864 /* We don't create any RTL for local variables. */
4865 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4866 return;
4868 /* We defer emission of local statics until the corresponding
4869 DECL_EXPR is expanded. */
4870 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4872 /* We try to defer namespace-scope static constants so that they are
4873 not emitted into the object file unnecessarily. */
4874 filename = input_filename;
4875 if (!DECL_VIRTUAL_P (decl)
4876 && TREE_READONLY (decl)
4877 && DECL_INITIAL (decl) != NULL_TREE
4878 && DECL_INITIAL (decl) != error_mark_node
4879 && filename != NULL
4880 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4881 && toplev
4882 && !TREE_PUBLIC (decl))
4884 /* Fool with the linkage of static consts according to #pragma
4885 interface. */
4886 struct c_fileinfo *finfo = get_fileinfo (lbasename (filename));
4887 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4889 TREE_PUBLIC (decl) = 1;
4890 DECL_EXTERNAL (decl) = finfo->interface_only;
4893 defer_p = 1;
4895 /* Likewise for template instantiations. */
4896 else if (DECL_LANG_SPECIFIC (decl)
4897 && DECL_IMPLICIT_INSTANTIATION (decl))
4898 defer_p = 1;
4900 /* If we're not deferring, go ahead and assemble the variable. */
4901 if (!defer_p)
4902 rest_of_decl_compilation (decl, toplev, at_eof);
4905 /* Generate code to initialize DECL (a local variable). */
4907 static void
4908 initialize_local_var (tree decl, tree init)
4910 tree type = TREE_TYPE (decl);
4911 tree cleanup;
4913 gcc_assert (TREE_CODE (decl) == VAR_DECL
4914 || TREE_CODE (decl) == RESULT_DECL);
4915 gcc_assert (!TREE_STATIC (decl));
4917 if (DECL_SIZE (decl) == NULL_TREE)
4919 /* If we used it already as memory, it must stay in memory. */
4920 DECL_INITIAL (decl) = NULL_TREE;
4921 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4924 if (DECL_SIZE (decl) && type != error_mark_node)
4926 int already_used;
4928 /* Compute and store the initial value. */
4929 already_used = TREE_USED (decl) || TREE_USED (type);
4931 /* Perform the initialization. */
4932 if (init)
4934 int saved_stmts_are_full_exprs_p;
4936 gcc_assert (building_stmt_tree ());
4937 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4938 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4939 finish_expr_stmt (init);
4940 current_stmt_tree ()->stmts_are_full_exprs_p =
4941 saved_stmts_are_full_exprs_p;
4944 /* Set this to 0 so we can tell whether an aggregate which was
4945 initialized was ever used. Don't do this if it has a
4946 destructor, so we don't complain about the 'resource
4947 allocation is initialization' idiom. Now set
4948 attribute((unused)) on types so decls of that type will be
4949 marked used. (see TREE_USED, above.) */
4950 if (TYPE_NEEDS_CONSTRUCTING (type)
4951 && ! already_used
4952 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4953 && DECL_NAME (decl))
4954 TREE_USED (decl) = 0;
4955 else if (already_used)
4956 TREE_USED (decl) = 1;
4959 /* Generate a cleanup, if necessary. */
4960 cleanup = cxx_maybe_build_cleanup (decl);
4961 if (DECL_SIZE (decl) && cleanup)
4962 finish_decl_cleanup (decl, cleanup);
4965 /* DECL is a VAR_DECL for a compiler-generated variable with static
4966 storage duration (like a virtual table) whose initializer is a
4967 compile-time constant. INIT must be either a TREE_LIST of values,
4968 or a CONSTRUCTOR. Initialize the variable and provide it to the
4969 back end. */
4971 void
4972 initialize_artificial_var (tree decl, tree init)
4974 if (TREE_CODE (init) == TREE_LIST)
4975 init = build_constructor_from_list (NULL_TREE, init);
4976 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
4977 DECL_INITIAL (decl) = init;
4978 DECL_INITIALIZED_P (decl) = 1;
4979 determine_visibility (decl);
4980 layout_var_decl (decl);
4981 maybe_commonize_var (decl);
4982 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4985 /* Finish processing of a declaration;
4986 install its line number and initial value.
4987 If the length of an array type is not known before,
4988 it must be determined now, from the initial value, or it is an error.
4990 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
4991 true, then INIT is an integral constant expression.
4993 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4994 if the (init) syntax was used. */
4996 void
4997 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
4998 tree asmspec_tree, int flags)
5000 tree type;
5001 tree cleanup;
5002 const char *asmspec = NULL;
5003 int was_readonly = 0;
5004 bool var_definition_p = false;
5006 if (decl == error_mark_node)
5007 return;
5008 else if (! decl)
5010 if (init)
5011 error ("assignment (not initialization) in declaration");
5012 return;
5015 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5017 /* Assume no cleanup is required. */
5018 cleanup = NULL_TREE;
5020 /* If a name was specified, get the string. */
5021 if (global_scope_p (current_binding_level))
5022 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5023 if (asmspec_tree)
5024 asmspec = TREE_STRING_POINTER (asmspec_tree);
5026 if (init && TREE_CODE (init) == NAMESPACE_DECL)
5028 error ("cannot initialize %qD to namespace %qD", decl, init);
5029 init = NULL_TREE;
5032 if (current_class_type
5033 && CP_DECL_CONTEXT (decl) == current_class_type
5034 && TYPE_BEING_DEFINED (current_class_type)
5035 && (DECL_INITIAL (decl) || init))
5036 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5038 type = TREE_TYPE (decl);
5040 if (type == error_mark_node)
5041 goto finish_end;
5043 if (processing_template_decl)
5045 /* Add this declaration to the statement-tree. */
5046 if (at_function_scope_p ())
5047 add_decl_expr (decl);
5049 if (init && DECL_INITIAL (decl))
5051 DECL_INITIAL (decl) = init;
5052 if (init_const_expr_p)
5054 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5055 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5056 TREE_CONSTANT (decl) = 1;
5060 if (TREE_CODE (decl) == VAR_DECL
5061 && !DECL_PRETTY_FUNCTION_P (decl)
5062 && !dependent_type_p (TREE_TYPE (decl)))
5063 maybe_deduce_size_from_array_init (decl, init);
5065 goto finish_end;
5068 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
5069 gcc_assert (TREE_CODE (decl) != PARM_DECL);
5071 /* Take care of TYPE_DECLs up front. */
5072 if (TREE_CODE (decl) == TYPE_DECL)
5074 if (type != error_mark_node
5075 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
5077 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5078 warning (0, "shadowing previous type declaration of %q#D", decl);
5079 set_identifier_type_value (DECL_NAME (decl), decl);
5082 /* If we have installed this as the canonical typedef for this
5083 type, and that type has not been defined yet, delay emitting
5084 the debug information for it, as we will emit it later. */
5085 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5086 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5087 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5089 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5090 at_eof);
5091 goto finish_end;
5094 /* A reference will be modified here, as it is initialized. */
5095 if (! DECL_EXTERNAL (decl)
5096 && TREE_READONLY (decl)
5097 && TREE_CODE (type) == REFERENCE_TYPE)
5099 was_readonly = 1;
5100 TREE_READONLY (decl) = 0;
5103 if (TREE_CODE (decl) == VAR_DECL)
5105 /* Only PODs can have thread-local storage. Other types may require
5106 various kinds of non-trivial initialization. */
5107 if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5108 error ("%qD cannot be thread-local because it has non-POD type %qT",
5109 decl, TREE_TYPE (decl));
5110 /* Convert the initializer to the type of DECL, if we have not
5111 already initialized DECL. */
5112 if (!DECL_INITIALIZED_P (decl)
5113 /* If !DECL_EXTERNAL then DECL is being defined. In the
5114 case of a static data member initialized inside the
5115 class-specifier, there can be an initializer even if DECL
5116 is *not* defined. */
5117 && (!DECL_EXTERNAL (decl) || init))
5119 if (init)
5121 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5122 if (init_const_expr_p)
5124 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5125 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5126 TREE_CONSTANT (decl) = 1;
5129 init = check_initializer (decl, init, flags, &cleanup);
5130 /* Thread-local storage cannot be dynamically initialized. */
5131 if (DECL_THREAD_LOCAL_P (decl) && init)
5133 error ("%qD is thread-local and so cannot be dynamically "
5134 "initialized", decl);
5135 init = NULL_TREE;
5138 /* Check that the initializer for a static data member was a
5139 constant. Although we check in the parser that the
5140 initializer is an integral constant expression, we do not
5141 simplify division-by-zero at the point at which it
5142 occurs. Therefore, in:
5144 struct S { static const int i = 7 / 0; };
5146 we issue an error at this point. It would
5147 probably be better to forbid division by zero in
5148 integral constant expressions. */
5149 if (DECL_EXTERNAL (decl) && init)
5151 error ("%qD cannot be initialized by a non-constant expression"
5152 " when being declared", decl);
5153 DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5154 init = NULL_TREE;
5157 /* Handle:
5159 [dcl.init]
5161 The memory occupied by any object of static storage
5162 duration is zero-initialized at program startup before
5163 any other initialization takes place.
5165 We cannot create an appropriate initializer until after
5166 the type of DECL is finalized. If DECL_INITIAL is set,
5167 then the DECL is statically initialized, and any
5168 necessary zero-initialization has already been performed. */
5169 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5170 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5171 /*nelts=*/NULL_TREE,
5172 /*static_storage_p=*/true);
5173 /* Remember that the initialization for this variable has
5174 taken place. */
5175 DECL_INITIALIZED_P (decl) = 1;
5176 /* This declaration is the definition of this variable,
5177 unless we are initializing a static data member within
5178 the class specifier. */
5179 if (!DECL_EXTERNAL (decl))
5180 var_definition_p = true;
5181 /* The variable is being defined, so determine its
5182 visibility. */
5183 determine_visibility (decl);
5185 /* If the variable has an array type, lay out the type, even if
5186 there is no initializer. It is valid to index through the
5187 array, and we must get TYPE_ALIGN set correctly on the array
5188 type. */
5189 else if (TREE_CODE (type) == ARRAY_TYPE)
5190 layout_type (type);
5193 /* Add this declaration to the statement-tree. This needs to happen
5194 after the call to check_initializer so that the DECL_EXPR for a
5195 reference temp is added before the DECL_EXPR for the reference itself. */
5196 if (at_function_scope_p ())
5197 add_decl_expr (decl);
5199 if (TREE_CODE (decl) == VAR_DECL)
5200 layout_var_decl (decl);
5202 /* Output the assembler code and/or RTL code for variables and functions,
5203 unless the type is an undefined structure or union.
5204 If not, it will get done when the type is completed. */
5205 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
5207 if (TREE_CODE (decl) == VAR_DECL)
5208 maybe_commonize_var (decl);
5210 make_rtl_for_nonlocal_decl (decl, init, asmspec);
5212 /* Check for abstractness of the type. Notice that there is no
5213 need to strip array types here since the check for those types
5214 is already done within create_array_type_for_decl. */
5215 if (TREE_CODE (type) == FUNCTION_TYPE
5216 || TREE_CODE (type) == METHOD_TYPE)
5217 abstract_virtuals_error (decl, TREE_TYPE (type));
5218 else
5219 abstract_virtuals_error (decl, type);
5221 if (TREE_CODE (decl) == FUNCTION_DECL
5222 || TREE_TYPE (decl) == error_mark_node)
5223 /* No initialization required. */
5225 else if (DECL_EXTERNAL (decl)
5226 && ! (DECL_LANG_SPECIFIC (decl)
5227 && DECL_NOT_REALLY_EXTERN (decl)))
5229 if (init)
5230 DECL_INITIAL (decl) = init;
5232 else
5234 /* A variable definition. */
5235 if (DECL_FUNCTION_SCOPE_P (decl))
5237 /* Initialize the local variable. */
5238 if (processing_template_decl)
5240 if (init || DECL_INITIAL (decl) == error_mark_node)
5241 DECL_INITIAL (decl) = init;
5243 else if (!TREE_STATIC (decl))
5244 initialize_local_var (decl, init);
5247 /* If a variable is defined, and then a subsequent
5248 definition with external linkage is encountered, we will
5249 get here twice for the same variable. We want to avoid
5250 calling expand_static_init more than once. For variables
5251 that are not static data members, we can call
5252 expand_static_init only when we actually process the
5253 initializer. It is not legal to redeclare a static data
5254 member, so this issue does not arise in that case. */
5255 if (var_definition_p && TREE_STATIC (decl))
5256 expand_static_init (decl, init);
5260 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5261 reference, insert it in the statement-tree now. */
5262 if (cleanup)
5263 push_cleanup (decl, cleanup, false);
5265 finish_end:
5267 if (was_readonly)
5268 TREE_READONLY (decl) = 1;
5270 /* If this was marked 'used', be sure it will be output. */
5271 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5272 mark_decl_referenced (decl);
5275 /* This is here for a midend callback from c-common.c. */
5277 void
5278 finish_decl (tree decl, tree init, tree asmspec_tree)
5280 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5283 /* Returns a declaration for a VAR_DECL as if:
5285 extern "C" TYPE NAME;
5287 had been seen. Used to create compiler-generated global
5288 variables. */
5290 static tree
5291 declare_global_var (tree name, tree type)
5293 tree decl;
5295 push_to_top_level ();
5296 decl = build_decl (VAR_DECL, name, type);
5297 TREE_PUBLIC (decl) = 1;
5298 DECL_EXTERNAL (decl) = 1;
5299 DECL_ARTIFICIAL (decl) = 1;
5300 /* If the user has explicitly declared this variable (perhaps
5301 because the code we are compiling is part of a low-level runtime
5302 library), then it is possible that our declaration will be merged
5303 with theirs by pushdecl. */
5304 decl = pushdecl (decl);
5305 finish_decl (decl, NULL_TREE, NULL_TREE);
5306 pop_from_top_level ();
5308 return decl;
5311 /* Returns a pointer to the `atexit' function. Note that if
5312 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5313 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5315 static tree
5316 get_atexit_node (void)
5318 tree atexit_fndecl;
5319 tree arg_types;
5320 tree fn_type;
5321 tree fn_ptr_type;
5322 const char *name;
5323 bool use_aeabi_atexit;
5325 if (atexit_node)
5326 return atexit_node;
5328 if (flag_use_cxa_atexit)
5330 /* The declaration for `__cxa_atexit' is:
5332 int __cxa_atexit (void (*)(void *), void *, void *)
5334 We build up the argument types and then then function type
5335 itself. */
5337 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5338 /* First, build the pointer-to-function type for the first
5339 argument. */
5340 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5341 fn_type = build_function_type (void_type_node, arg_types);
5342 fn_ptr_type = build_pointer_type (fn_type);
5343 /* Then, build the rest of the argument types. */
5344 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5345 if (use_aeabi_atexit)
5347 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5348 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5350 else
5352 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5353 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5355 /* And the final __cxa_atexit type. */
5356 fn_type = build_function_type (integer_type_node, arg_types);
5357 fn_ptr_type = build_pointer_type (fn_type);
5358 if (use_aeabi_atexit)
5359 name = "__aeabi_atexit";
5360 else
5361 name = "__cxa_atexit";
5363 else
5365 /* The declaration for `atexit' is:
5367 int atexit (void (*)());
5369 We build up the argument types and then then function type
5370 itself. */
5371 fn_type = build_function_type (void_type_node, void_list_node);
5372 fn_ptr_type = build_pointer_type (fn_type);
5373 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5374 /* Build the final atexit type. */
5375 fn_type = build_function_type (integer_type_node, arg_types);
5376 name = "atexit";
5379 /* Now, build the function declaration. */
5380 push_lang_context (lang_name_c);
5381 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5382 mark_used (atexit_fndecl);
5383 pop_lang_context ();
5384 atexit_node = decay_conversion (atexit_fndecl);
5386 return atexit_node;
5389 /* Returns the __dso_handle VAR_DECL. */
5391 static tree
5392 get_dso_handle_node (void)
5394 if (dso_handle_node)
5395 return dso_handle_node;
5397 /* Declare the variable. */
5398 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5399 ptr_type_node);
5401 return dso_handle_node;
5404 /* Begin a new function with internal linkage whose job will be simply
5405 to destroy some particular variable. */
5407 static GTY(()) int start_cleanup_cnt;
5409 static tree
5410 start_cleanup_fn (void)
5412 char name[32];
5413 tree parmtypes;
5414 tree fntype;
5415 tree fndecl;
5417 push_to_top_level ();
5419 /* No need to mangle this. */
5420 push_lang_context (lang_name_c);
5422 /* Build the parameter-types. */
5423 parmtypes = void_list_node;
5424 /* Functions passed to __cxa_atexit take an additional parameter.
5425 We'll just ignore it. After we implement the new calling
5426 convention for destructors, we can eliminate the use of
5427 additional cleanup functions entirely in the -fnew-abi case. */
5428 if (flag_use_cxa_atexit)
5429 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5430 /* Build the function type itself. */
5431 fntype = build_function_type (void_type_node, parmtypes);
5432 /* Build the name of the function. */
5433 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5434 /* Build the function declaration. */
5435 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5436 /* It's a function with internal linkage, generated by the
5437 compiler. */
5438 TREE_PUBLIC (fndecl) = 0;
5439 DECL_ARTIFICIAL (fndecl) = 1;
5440 /* Make the function `inline' so that it is only emitted if it is
5441 actually needed. It is unlikely that it will be inlined, since
5442 it is only called via a function pointer, but we avoid unnecessary
5443 emissions this way. */
5444 DECL_INLINE (fndecl) = 1;
5445 DECL_DECLARED_INLINE_P (fndecl) = 1;
5446 DECL_INTERFACE_KNOWN (fndecl) = 1;
5447 /* Build the parameter. */
5448 if (flag_use_cxa_atexit)
5450 tree parmdecl;
5452 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5453 DECL_CONTEXT (parmdecl) = fndecl;
5454 TREE_USED (parmdecl) = 1;
5455 DECL_ARGUMENTS (fndecl) = parmdecl;
5458 pushdecl (fndecl);
5459 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5461 pop_lang_context ();
5463 return current_function_decl;
5466 /* Finish the cleanup function begun by start_cleanup_fn. */
5468 static void
5469 end_cleanup_fn (void)
5471 expand_or_defer_fn (finish_function (0));
5473 pop_from_top_level ();
5476 /* Generate code to handle the destruction of DECL, an object with
5477 static storage duration. */
5479 tree
5480 register_dtor_fn (tree decl)
5482 tree cleanup;
5483 tree compound_stmt;
5484 tree args;
5485 tree fcall;
5487 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5488 return void_zero_node;
5490 /* Call build_cleanup before we enter the anonymous function so that
5491 any access checks will be done relative to the current scope,
5492 rather than the scope of the anonymous function. */
5493 build_cleanup (decl);
5495 /* Now start the function. */
5496 cleanup = start_cleanup_fn ();
5498 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5499 to the original function, rather than the anonymous one. That
5500 will make the back-end think that nested functions are in use,
5501 which causes confusion. */
5503 push_deferring_access_checks (dk_no_check);
5504 fcall = build_cleanup (decl);
5505 pop_deferring_access_checks ();
5507 /* Create the body of the anonymous function. */
5508 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5509 finish_expr_stmt (fcall);
5510 finish_compound_stmt (compound_stmt);
5511 end_cleanup_fn ();
5513 /* Call atexit with the cleanup function. */
5514 cxx_mark_addressable (cleanup);
5515 mark_used (cleanup);
5516 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5517 if (flag_use_cxa_atexit)
5519 args = tree_cons (NULL_TREE,
5520 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5521 NULL_TREE);
5522 if (targetm.cxx.use_aeabi_atexit ())
5524 args = tree_cons (NULL_TREE, cleanup, args);
5525 args = tree_cons (NULL_TREE, null_pointer_node, args);
5527 else
5529 args = tree_cons (NULL_TREE, null_pointer_node, args);
5530 args = tree_cons (NULL_TREE, cleanup, args);
5533 else
5534 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5535 return build_function_call (get_atexit_node (), args);
5538 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5539 is its initializer. Generate code to handle the construction
5540 and destruction of DECL. */
5542 static void
5543 expand_static_init (tree decl, tree init)
5545 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5546 gcc_assert (TREE_STATIC (decl));
5548 /* Some variables require no initialization. */
5549 if (!init
5550 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5551 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5552 return;
5554 if (DECL_FUNCTION_SCOPE_P (decl))
5556 /* Emit code to perform this initialization but once. */
5557 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5558 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5559 tree guard, guard_addr, guard_addr_list;
5560 tree acquire_fn, release_fn, abort_fn;
5561 tree flag, begin;
5563 /* Emit code to perform this initialization but once. This code
5564 looks like:
5566 static <type> guard;
5567 if (!guard.first_byte) {
5568 if (__cxa_guard_acquire (&guard)) {
5569 bool flag = false;
5570 try {
5571 // Do initialization.
5572 flag = true; __cxa_guard_release (&guard);
5573 // Register variable for destruction at end of program.
5574 } catch {
5575 if (!flag) __cxa_guard_abort (&guard);
5579 Note that the `flag' variable is only set to 1 *after* the
5580 initialization is complete. This ensures that an exception,
5581 thrown during the construction, will cause the variable to
5582 reinitialized when we pass through this code again, as per:
5584 [stmt.dcl]
5586 If the initialization exits by throwing an exception, the
5587 initialization is not complete, so it will be tried again
5588 the next time control enters the declaration.
5590 This process should be thread-safe, too; multiple threads
5591 should not be able to initialize the variable more than
5592 once. */
5594 /* Create the guard variable. */
5595 guard = get_guard (decl);
5597 /* This optimization isn't safe on targets with relaxed memory
5598 consistency. On such targets we force synchronization in
5599 __cxa_guard_acquire. */
5600 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5602 /* Begin the conditional initialization. */
5603 if_stmt = begin_if_stmt ();
5604 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5605 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5608 if (flag_threadsafe_statics)
5610 guard_addr = build_address (guard);
5611 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5613 acquire_fn = get_identifier ("__cxa_guard_acquire");
5614 release_fn = get_identifier ("__cxa_guard_release");
5615 abort_fn = get_identifier ("__cxa_guard_abort");
5616 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5618 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5619 void_list_node);
5620 tree vfntype = build_function_type (void_type_node, argtypes);
5621 acquire_fn = push_library_fn
5622 (acquire_fn, build_function_type (integer_type_node, argtypes));
5623 release_fn = push_library_fn (release_fn, vfntype);
5624 abort_fn = push_library_fn (abort_fn, vfntype);
5626 else
5628 release_fn = identifier_global_value (release_fn);
5629 abort_fn = identifier_global_value (abort_fn);
5632 inner_if_stmt = begin_if_stmt ();
5633 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5634 inner_if_stmt);
5636 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5637 begin = get_target_expr (boolean_false_node);
5638 flag = TARGET_EXPR_SLOT (begin);
5640 TARGET_EXPR_CLEANUP (begin)
5641 = build3 (COND_EXPR, void_type_node, flag,
5642 void_zero_node,
5643 build_call (abort_fn, guard_addr_list));
5644 CLEANUP_EH_ONLY (begin) = 1;
5646 /* Do the initialization itself. */
5647 init = add_stmt_to_compound (begin, init);
5648 init = add_stmt_to_compound
5649 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5650 init = add_stmt_to_compound
5651 (init, build_call (release_fn, guard_addr_list));
5653 else
5654 init = add_stmt_to_compound (init, set_guard (guard));
5656 /* Use atexit to register a function for destroying this static
5657 variable. */
5658 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5660 finish_expr_stmt (init);
5662 if (flag_threadsafe_statics)
5664 finish_compound_stmt (inner_then_clause);
5665 finish_then_clause (inner_if_stmt);
5666 finish_if_stmt (inner_if_stmt);
5669 if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5671 finish_compound_stmt (then_clause);
5672 finish_then_clause (if_stmt);
5673 finish_if_stmt (if_stmt);
5676 else
5677 static_aggregates = tree_cons (init, decl, static_aggregates);
5681 /* Make TYPE a complete type based on INITIAL_VALUE.
5682 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5683 2 if there was no information (in which case assume 0 if DO_DEFAULT),
5684 3 if the initializer list is empty (in pedantic mode). */
5687 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5689 int failure;
5690 tree type, elt_type;
5692 if (initial_value)
5694 /* An array of character type can be initialized from a
5695 brace-enclosed string constant.
5697 FIXME: this code is duplicated from reshape_init. Probably
5698 we should just call reshape_init here? */
5699 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5700 && TREE_CODE (initial_value) == CONSTRUCTOR
5701 && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5703 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5704 tree value = VEC_index (constructor_elt, v, 0)->value;
5706 if (TREE_CODE (value) == STRING_CST
5707 && VEC_length (constructor_elt, v) == 1)
5708 initial_value = value;
5712 failure = complete_array_type (ptype, initial_value, do_default);
5714 /* We can create the array before the element type is complete, which
5715 means that we didn't have these two bits set in the original type
5716 either. In completing the type, we are expected to propagate these
5717 bits. See also complete_type which does the same thing for arrays
5718 of fixed size. */
5719 type = *ptype;
5720 if (TYPE_DOMAIN (type))
5722 elt_type = TREE_TYPE (type);
5723 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5724 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5725 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5728 return failure;
5731 /* Return zero if something is declared to be a member of type
5732 CTYPE when in the context of CUR_TYPE. STRING is the error
5733 message to print in that case. Otherwise, quietly return 1. */
5735 static int
5736 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5738 if (ctype && ctype != cur_type)
5740 if (flags == DTOR_FLAG)
5741 error ("destructor for alien class %qT cannot be a member", ctype);
5742 else
5743 error ("constructor for alien class %qT cannot be a member", ctype);
5744 return 0;
5746 return 1;
5749 /* Subroutine of `grokdeclarator'. */
5751 /* Generate errors possibly applicable for a given set of specifiers.
5752 This is for ARM $7.1.2. */
5754 static void
5755 bad_specifiers (tree object,
5756 const char* type,
5757 int virtualp,
5758 int quals,
5759 int inlinep,
5760 int friendp,
5761 int raises)
5763 if (virtualp)
5764 error ("%qD declared as a %<virtual%> %s", object, type);
5765 if (inlinep)
5766 error ("%qD declared as an %<inline%> %s", object, type);
5767 if (quals)
5768 error ("%<const%> and %<volatile%> function specifiers on "
5769 "%qD invalid in %s declaration",
5770 object, type);
5771 if (friendp)
5772 error ("%q+D declared as a friend", object);
5773 if (raises
5774 && (TREE_CODE (object) == TYPE_DECL
5775 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5776 && !TYPE_REFFN_P (TREE_TYPE (object))
5777 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5778 error ("%q+D declared with an exception specification", object);
5781 /* DECL is a member function or static data member and is presently
5782 being defined. Check that the definition is taking place in a
5783 valid namespace. */
5785 static void
5786 check_class_member_definition_namespace (tree decl)
5788 /* These checks only apply to member functions and static data
5789 members. */
5790 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5791 || TREE_CODE (decl) == VAR_DECL);
5792 /* We check for problems with specializations in pt.c in
5793 check_specialization_namespace, where we can issue better
5794 diagnostics. */
5795 if (processing_specialization)
5796 return;
5797 /* There are no restrictions on the placement of
5798 explicit instantiations. */
5799 if (processing_explicit_instantiation)
5800 return;
5801 /* [class.mfct]
5803 A member function definition that appears outside of the
5804 class definition shall appear in a namespace scope enclosing
5805 the class definition.
5807 [class.static.data]
5809 The definition for a static data member shall appear in a
5810 namespace scope enclosing the member's class definition. */
5811 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5812 pedwarn ("definition of %qD is not in namespace enclosing %qT",
5813 decl, DECL_CONTEXT (decl));
5816 /* CTYPE is class type, or null if non-class.
5817 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5818 or METHOD_TYPE.
5819 DECLARATOR is the function's name.
5820 PARMS is a chain of PARM_DECLs for the function.
5821 VIRTUALP is truthvalue of whether the function is virtual or not.
5822 FLAGS are to be passed through to `grokclassfn'.
5823 QUALS are qualifiers indicating whether the function is `const'
5824 or `volatile'.
5825 RAISES is a list of exceptions that this function can raise.
5826 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5827 not look, and -1 if we should not call `grokclassfn' at all.
5829 SFK is the kind of special function (if any) for the new function.
5831 Returns `NULL_TREE' if something goes wrong, after issuing
5832 applicable error messages. */
5834 static tree
5835 grokfndecl (tree ctype,
5836 tree type,
5837 tree declarator,
5838 tree parms,
5839 tree orig_declarator,
5840 int virtualp,
5841 enum overload_flags flags,
5842 cp_cv_quals quals,
5843 tree raises,
5844 int check,
5845 int friendp,
5846 int publicp,
5847 int inlinep,
5848 special_function_kind sfk,
5849 bool funcdef_flag,
5850 int template_count,
5851 tree in_namespace,
5852 tree* attrlist)
5854 tree decl;
5855 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5856 tree t;
5858 if (raises)
5859 type = build_exception_variant (type, raises);
5861 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5862 DECL_ARGUMENTS (decl) = parms;
5863 /* Propagate volatile out from type to decl. */
5864 if (TYPE_VOLATILE (type))
5865 TREE_THIS_VOLATILE (decl) = 1;
5867 if (friendp
5868 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5870 if (funcdef_flag)
5871 error
5872 ("defining explicit specialization %qD in friend declaration",
5873 orig_declarator);
5874 else
5876 tree fns = TREE_OPERAND (orig_declarator, 0);
5877 tree args = TREE_OPERAND (orig_declarator, 1);
5879 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5881 /* Something like `template <class T> friend void f<T>()'. */
5882 error ("invalid use of template-id %qD in declaration "
5883 "of primary template",
5884 orig_declarator);
5885 return NULL_TREE;
5889 /* A friend declaration of the form friend void f<>(). Record
5890 the information in the TEMPLATE_ID_EXPR. */
5891 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5893 if (TREE_CODE (fns) == COMPONENT_REF)
5895 /* Due to bison parser ickiness, we will have already looked
5896 up an operator_name or PFUNCNAME within the current class
5897 (see template_id in parse.y). If the current class contains
5898 such a name, we'll get a COMPONENT_REF here. Undo that. */
5900 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5901 == current_class_type);
5902 fns = TREE_OPERAND (fns, 1);
5904 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5905 || TREE_CODE (fns) == OVERLOAD);
5906 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5908 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5909 if (TREE_PURPOSE (t)
5910 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5912 error ("default arguments are not allowed in declaration "
5913 "of friend template specialization %qD",
5914 decl);
5915 return NULL_TREE;
5918 if (inlinep)
5920 error ("%<inline%> is not allowed in declaration of friend "
5921 "template specialization %qD",
5922 decl);
5923 return NULL_TREE;
5928 /* If this decl has namespace scope, set that up. */
5929 if (in_namespace)
5930 set_decl_namespace (decl, in_namespace, friendp);
5931 else if (!ctype)
5932 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5934 /* `main' and builtins have implicit 'C' linkage. */
5935 if ((MAIN_NAME_P (declarator)
5936 || (IDENTIFIER_LENGTH (declarator) > 10
5937 && IDENTIFIER_POINTER (declarator)[0] == '_'
5938 && IDENTIFIER_POINTER (declarator)[1] == '_'
5939 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5940 && current_lang_name == lang_name_cplusplus
5941 && ctype == NULL_TREE
5942 /* NULL_TREE means global namespace. */
5943 && DECL_CONTEXT (decl) == NULL_TREE)
5944 SET_DECL_LANGUAGE (decl, lang_c);
5946 /* Should probably propagate const out from type to decl I bet (mrs). */
5947 if (staticp)
5949 DECL_STATIC_FUNCTION_P (decl) = 1;
5950 DECL_CONTEXT (decl) = ctype;
5953 if (ctype)
5955 DECL_CONTEXT (decl) = ctype;
5956 if (funcdef_flag)
5957 check_class_member_definition_namespace (decl);
5960 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5962 if (processing_template_decl)
5963 error ("cannot declare %<::main%> to be a template");
5964 if (inlinep)
5965 error ("cannot declare %<::main%> to be inline");
5966 if (!publicp)
5967 error ("cannot declare %<::main%> to be static");
5968 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5969 integer_type_node))
5971 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
5972 tree newtype;
5973 error ("%<::main%> must return %<int%>");
5974 newtype = build_function_type (integer_type_node,
5975 oldtypeargs);
5976 TREE_TYPE (decl) = newtype;
5978 inlinep = 0;
5979 publicp = 1;
5982 /* Members of anonymous types and local classes have no linkage; make
5983 them internal. If a typedef is made later, this will be changed. */
5984 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5985 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5986 publicp = 0;
5988 if (publicp)
5990 /* [basic.link]: A name with no linkage (notably, the name of a class
5991 or enumeration declared in a local scope) shall not be used to
5992 declare an entity with linkage.
5994 Only check this for public decls for now. See core 319, 389. */
5995 t = no_linkage_check (TREE_TYPE (decl),
5996 /*relaxed_p=*/false);
5997 if (t)
5999 if (TYPE_ANONYMOUS_P (t))
6001 if (DECL_EXTERN_C_P (decl))
6002 /* Allow this; it's pretty common in C. */;
6003 else
6005 pedwarn ("non-local function %q#D uses anonymous type",
6006 decl);
6007 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6008 pedwarn ("%q+#D does not refer to the unqualified "
6009 "type, so it is not used for linkage",
6010 TYPE_NAME (t));
6013 else
6014 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6018 TREE_PUBLIC (decl) = publicp;
6019 if (! publicp)
6021 DECL_INTERFACE_KNOWN (decl) = 1;
6022 DECL_NOT_REALLY_EXTERN (decl) = 1;
6025 /* If the declaration was declared inline, mark it as such. */
6026 if (inlinep)
6027 DECL_DECLARED_INLINE_P (decl) = 1;
6028 /* We inline functions that are explicitly declared inline, or, when
6029 the user explicitly asks us to, all functions. */
6030 if (DECL_DECLARED_INLINE_P (decl)
6031 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6032 DECL_INLINE (decl) = 1;
6034 DECL_EXTERNAL (decl) = 1;
6035 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6037 error ("%smember function %qD cannot have cv-qualifier",
6038 (ctype ? "static " : "non-"), decl);
6039 quals = TYPE_UNQUALIFIED;
6042 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
6043 grok_op_properties (decl, /*complain=*/true);
6045 if (ctype && decl_function_context (decl))
6046 DECL_NO_STATIC_CHAIN (decl) = 1;
6048 if (funcdef_flag)
6049 /* Make the init_value nonzero so pushdecl knows this is not
6050 tentative. error_mark_node is replaced later with the BLOCK. */
6051 DECL_INITIAL (decl) = error_mark_node;
6053 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6054 TREE_NOTHROW (decl) = 1;
6056 /* Caller will do the rest of this. */
6057 if (check < 0)
6058 return decl;
6060 if (ctype != NULL_TREE)
6062 if (sfk == sfk_constructor)
6063 DECL_CONSTRUCTOR_P (decl) = 1;
6065 grokclassfn (ctype, decl, flags, quals);
6068 decl = check_explicit_specialization (orig_declarator, decl,
6069 template_count,
6070 2 * funcdef_flag +
6071 4 * (friendp != 0));
6072 if (decl == error_mark_node)
6073 return NULL_TREE;
6075 if (attrlist)
6077 cplus_decl_attributes (&decl, *attrlist, 0);
6078 *attrlist = NULL_TREE;
6081 if (ctype != NULL_TREE
6082 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6083 && check)
6085 tree old_decl;
6087 old_decl = check_classfn (ctype, decl,
6088 (processing_template_decl
6089 > template_class_depth (ctype))
6090 ? current_template_parms
6091 : NULL_TREE);
6092 if (old_decl)
6094 tree ok;
6095 tree pushed_scope;
6097 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6098 /* Because grokfndecl is always supposed to return a
6099 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6100 here. We depend on our callers to figure out that its
6101 really a template that's being returned. */
6102 old_decl = DECL_TEMPLATE_RESULT (old_decl);
6104 if (DECL_STATIC_FUNCTION_P (old_decl)
6105 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6106 /* Remove the `this' parm added by grokclassfn.
6107 XXX Isn't this done in start_function, too? */
6108 revert_static_member_fn (decl);
6109 if (DECL_ARTIFICIAL (old_decl))
6110 error ("definition of implicitly-declared %qD", old_decl);
6112 /* Since we've smashed OLD_DECL to its
6113 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
6114 if (TREE_CODE (decl) == TEMPLATE_DECL)
6115 decl = DECL_TEMPLATE_RESULT (decl);
6117 /* Attempt to merge the declarations. This can fail, in
6118 the case of some invalid specialization declarations. */
6119 pushed_scope = push_scope (ctype);
6120 ok = duplicate_decls (decl, old_decl, friendp);
6121 if (pushed_scope)
6122 pop_scope (pushed_scope);
6123 if (!ok)
6125 error ("no %q#D member function declared in class %qT",
6126 decl, ctype);
6127 return NULL_TREE;
6129 return old_decl;
6133 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6134 return NULL_TREE;
6136 if (ctype == NULL_TREE || check)
6137 return decl;
6139 if (virtualp)
6140 DECL_VIRTUAL_P (decl) = 1;
6142 return decl;
6145 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
6146 the linkage that DECL will receive in the object file. */
6148 static void
6149 set_linkage_for_static_data_member (tree decl)
6151 /* A static data member always has static storage duration and
6152 external linkage. Note that static data members are forbidden in
6153 local classes -- the only situation in which a class has
6154 non-external linkage. */
6155 TREE_PUBLIC (decl) = 1;
6156 TREE_STATIC (decl) = 1;
6157 /* For non-template classes, static data members are always put
6158 out in exactly those files where they are defined, just as
6159 with ordinary namespace-scope variables. */
6160 if (!processing_template_decl)
6161 DECL_INTERFACE_KNOWN (decl) = 1;
6164 /* Create a VAR_DECL named NAME with the indicated TYPE.
6166 If SCOPE is non-NULL, it is the class type or namespace containing
6167 the variable. If SCOPE is NULL, the variable should is created in
6168 the innermost enclosings scope. */
6170 static tree
6171 grokvardecl (tree type,
6172 tree name,
6173 const cp_decl_specifier_seq *declspecs,
6174 int initialized,
6175 int constp,
6176 tree scope)
6178 tree decl;
6179 tree explicit_scope;
6181 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6183 /* Compute the scope in which to place the variable, but remember
6184 whether or not that scope was explicitly specified by the user. */
6185 explicit_scope = scope;
6186 if (!scope)
6188 /* An explicit "extern" specifier indicates a namespace-scope
6189 variable. */
6190 if (declspecs->storage_class == sc_extern)
6191 scope = current_namespace;
6192 else if (!at_function_scope_p ())
6193 scope = current_scope ();
6196 if (scope
6197 && (/* If the variable is a namespace-scope variable declared in a
6198 template, we need DECL_LANG_SPECIFIC. */
6199 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6200 /* Similarly for namespace-scope variables with language linkage
6201 other than C++. */
6202 || (TREE_CODE (scope) == NAMESPACE_DECL
6203 && current_lang_name != lang_name_cplusplus)
6204 /* Similarly for static data members. */
6205 || TYPE_P (scope)))
6206 decl = build_lang_decl (VAR_DECL, name, type);
6207 else
6208 decl = build_decl (VAR_DECL, name, type);
6210 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6211 set_decl_namespace (decl, explicit_scope, 0);
6212 else
6213 DECL_CONTEXT (decl) = scope;
6215 if (declspecs->storage_class == sc_extern)
6217 DECL_THIS_EXTERN (decl) = 1;
6218 DECL_EXTERNAL (decl) = !initialized;
6221 if (DECL_CLASS_SCOPE_P (decl))
6223 set_linkage_for_static_data_member (decl);
6224 /* This function is only called with out-of-class definitions. */
6225 DECL_EXTERNAL (decl) = 0;
6226 check_class_member_definition_namespace (decl);
6228 /* At top level, either `static' or no s.c. makes a definition
6229 (perhaps tentative), and absence of `static' makes it public. */
6230 else if (toplevel_bindings_p ())
6232 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6233 && (DECL_THIS_EXTERN (decl) || ! constp));
6234 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6236 /* Not at top level, only `static' makes a static definition. */
6237 else
6239 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6240 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6243 if (declspecs->specs[(int)ds_thread])
6245 if (targetm.have_tls)
6246 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6247 else
6248 /* A mere warning is sure to result in improper semantics
6249 at runtime. Don't bother to allow this to compile. */
6250 error ("thread-local storage not supported for this target");
6253 if (TREE_PUBLIC (decl))
6255 /* [basic.link]: A name with no linkage (notably, the name of a class
6256 or enumeration declared in a local scope) shall not be used to
6257 declare an entity with linkage.
6259 Only check this for public decls for now. */
6260 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6261 if (t)
6263 if (TYPE_ANONYMOUS_P (t))
6265 if (DECL_EXTERN_C_P (decl))
6266 /* Allow this; it's pretty common in C. */
6268 else
6270 /* DRs 132, 319 and 389 seem to indicate types with
6271 no linkage can only be used to declare extern "C"
6272 entities. Since it's not always an error in the
6273 ISO C++ 90 Standard, we only issue a warning. */
6274 warning (0, "non-local variable %q#D uses anonymous type",
6275 decl);
6276 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6277 warning (0, "%q+#D does not refer to the unqualified "
6278 "type, so it is not used for linkage",
6279 TYPE_NAME (t));
6282 else
6283 warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6286 else
6287 DECL_INTERFACE_KNOWN (decl) = 1;
6289 return decl;
6292 /* Create and return a canonical pointer to member function type, for
6293 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
6295 tree
6296 build_ptrmemfunc_type (tree type)
6298 tree field, fields;
6299 tree t;
6300 tree unqualified_variant = NULL_TREE;
6302 if (type == error_mark_node)
6303 return type;
6305 /* If a canonical type already exists for this type, use it. We use
6306 this method instead of type_hash_canon, because it only does a
6307 simple equality check on the list of field members. */
6309 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6310 return t;
6312 /* Make sure that we always have the unqualified pointer-to-member
6313 type first. */
6314 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6315 unqualified_variant
6316 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6318 t = make_aggr_type (RECORD_TYPE);
6319 xref_basetypes (t, NULL_TREE);
6321 /* Let the front-end know this is a pointer to member function... */
6322 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6323 /* ... and not really an aggregate. */
6324 SET_IS_AGGR_TYPE (t, 0);
6326 field = build_decl (FIELD_DECL, pfn_identifier, type);
6327 fields = field;
6329 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6330 TREE_CHAIN (field) = fields;
6331 fields = field;
6333 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6335 /* Zap out the name so that the back-end will give us the debugging
6336 information for this anonymous RECORD_TYPE. */
6337 TYPE_NAME (t) = NULL_TREE;
6339 /* If this is not the unqualified form of this pointer-to-member
6340 type, set the TYPE_MAIN_VARIANT for this type to be the
6341 unqualified type. Since they are actually RECORD_TYPEs that are
6342 not variants of each other, we must do this manually. */
6343 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6345 t = build_qualified_type (t, cp_type_quals (type));
6346 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6347 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6348 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6351 /* Cache this pointer-to-member type so that we can find it again
6352 later. */
6353 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6355 return t;
6358 /* Create and return a pointer to data member type. */
6360 tree
6361 build_ptrmem_type (tree class_type, tree member_type)
6363 if (TREE_CODE (member_type) == METHOD_TYPE)
6365 tree arg_types;
6367 arg_types = TYPE_ARG_TYPES (member_type);
6368 class_type = (cp_build_qualified_type
6369 (class_type,
6370 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6371 member_type
6372 = build_method_type_directly (class_type,
6373 TREE_TYPE (member_type),
6374 TREE_CHAIN (arg_types));
6375 return build_ptrmemfunc_type (build_pointer_type (member_type));
6377 else
6379 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6380 return build_offset_type (class_type, member_type);
6384 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6385 Check to see that the definition is valid. Issue appropriate error
6386 messages. Return 1 if the definition is particularly bad, or 0
6387 otherwise. */
6390 check_static_variable_definition (tree decl, tree type)
6392 /* Motion 10 at San Diego: If a static const integral data member is
6393 initialized with an integral constant expression, the initializer
6394 may appear either in the declaration (within the class), or in
6395 the definition, but not both. If it appears in the class, the
6396 member is a member constant. The file-scope definition is always
6397 required. */
6398 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6400 error ("invalid in-class initialization of static data member "
6401 "of non-integral type %qT",
6402 type);
6403 /* If we just return the declaration, crashes will sometimes
6404 occur. We therefore return void_type_node, as if this were a
6405 friend declaration, to cause callers to completely ignore
6406 this declaration. */
6407 return 1;
6409 else if (!CP_TYPE_CONST_P (type))
6410 error ("ISO C++ forbids in-class initialization of non-const "
6411 "static member %qD",
6412 decl);
6413 else if (pedantic && !INTEGRAL_TYPE_P (type))
6414 pedwarn ("ISO C++ forbids initialization of member constant "
6415 "%qD of non-integral type %qT", decl, type);
6417 return 0;
6420 /* Given the SIZE (i.e., number of elements) in an array, compute an
6421 appropriate index type for the array. If non-NULL, NAME is the
6422 name of the thing being declared. */
6424 tree
6425 compute_array_index_type (tree name, tree size)
6427 tree type;
6428 tree itype;
6430 if (error_operand_p (size))
6431 return error_mark_node;
6433 type = TREE_TYPE (size);
6434 /* The array bound must be an integer type. */
6435 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6437 if (name)
6438 error ("size of array %qD has non-integral type %qT", name, type);
6439 else
6440 error ("size of array has non-integral type %qT", type);
6441 size = integer_one_node;
6442 type = TREE_TYPE (size);
6445 if (abi_version_at_least (2)
6446 /* We should only handle value dependent expressions specially. */
6447 ? value_dependent_expression_p (size)
6448 /* But for abi-1, we handled all instances in templates. This
6449 effects the manglings produced. */
6450 : processing_template_decl)
6451 return build_index_type (build_min (MINUS_EXPR, sizetype,
6452 size, integer_one_node));
6454 /* The size might be the result of a cast. */
6455 STRIP_TYPE_NOPS (size);
6457 /* It might be a const variable or enumeration constant. */
6458 size = integral_constant_value (size);
6460 /* Normally, the array-bound will be a constant. */
6461 if (TREE_CODE (size) == INTEGER_CST)
6463 /* Check to see if the array bound overflowed. Make that an
6464 error, no matter how generous we're being. */
6465 int old_flag_pedantic_errors = flag_pedantic_errors;
6466 int old_pedantic = pedantic;
6467 pedantic = flag_pedantic_errors = 1;
6468 constant_expression_warning (size);
6469 pedantic = old_pedantic;
6470 flag_pedantic_errors = old_flag_pedantic_errors;
6472 /* An array must have a positive number of elements. */
6473 if (INT_CST_LT (size, integer_zero_node))
6475 if (name)
6476 error ("size of array %qD is negative", name);
6477 else
6478 error ("size of array is negative");
6479 size = integer_one_node;
6481 /* As an extension we allow zero-sized arrays. We always allow
6482 them in system headers because glibc uses them. */
6483 else if (integer_zerop (size) && pedantic && !in_system_header)
6485 if (name)
6486 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6487 else
6488 pedwarn ("ISO C++ forbids zero-size array");
6491 else if (TREE_CONSTANT (size))
6493 /* `(int) &fn' is not a valid array bound. */
6494 if (name)
6495 error ("size of array %qD is not an integral constant-expression",
6496 name);
6497 else
6498 error ("size of array is not an integral constant-expression");
6499 size = integer_one_node;
6501 else if (pedantic)
6503 if (name)
6504 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6505 else
6506 pedwarn ("ISO C++ forbids variable-size array");
6509 if (processing_template_decl && !TREE_CONSTANT (size))
6510 /* A variable sized array. */
6511 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6512 else
6514 HOST_WIDE_INT saved_processing_template_decl;
6516 /* Compute the index of the largest element in the array. It is
6517 one less than the number of elements in the array. We save
6518 and restore PROCESSING_TEMPLATE_DECL so that computations in
6519 cp_build_binary_op will be appropriately folded. */
6520 saved_processing_template_decl = processing_template_decl;
6521 processing_template_decl = 0;
6522 itype = cp_build_binary_op (MINUS_EXPR,
6523 cp_convert (ssizetype, size),
6524 cp_convert (ssizetype, integer_one_node));
6525 itype = fold (itype);
6526 processing_template_decl = saved_processing_template_decl;
6528 if (!TREE_CONSTANT (itype))
6529 /* A variable sized array. */
6530 itype = variable_size (itype);
6531 /* Make sure that there was no overflow when creating to a signed
6532 index type. (For example, on a 32-bit machine, an array with
6533 size 2^32 - 1 is too big.) */
6534 else if (TREE_CODE (itype) == INTEGER_CST
6535 && TREE_OVERFLOW (itype))
6537 error ("overflow in array dimension");
6538 TREE_OVERFLOW (itype) = 0;
6542 /* Create and return the appropriate index type. */
6543 return build_index_type (itype);
6546 /* Returns the scope (if any) in which the entity declared by
6547 DECLARATOR will be located. If the entity was declared with an
6548 unqualified name, NULL_TREE is returned. */
6550 tree
6551 get_scope_of_declarator (const cp_declarator *declarator)
6553 while (declarator && declarator->kind != cdk_id)
6554 declarator = declarator->declarator;
6556 /* If the declarator-id is a SCOPE_REF, the scope in which the
6557 declaration occurs is the first operand. */
6558 if (declarator
6559 && declarator->u.id.qualifying_scope)
6560 return declarator->u.id.qualifying_scope;
6562 /* Otherwise, the declarator is not a qualified name; the entity will
6563 be declared in the current scope. */
6564 return NULL_TREE;
6567 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6568 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6569 with this type. */
6571 static tree
6572 create_array_type_for_decl (tree name, tree type, tree size)
6574 tree itype = NULL_TREE;
6575 const char* error_msg;
6577 /* If things have already gone awry, bail now. */
6578 if (type == error_mark_node || size == error_mark_node)
6579 return error_mark_node;
6581 /* Assume that everything will go OK. */
6582 error_msg = NULL;
6584 /* There are some types which cannot be array elements. */
6585 switch (TREE_CODE (type))
6587 case VOID_TYPE:
6588 error_msg = "array of void";
6589 break;
6591 case FUNCTION_TYPE:
6592 error_msg = "array of functions";
6593 break;
6595 case REFERENCE_TYPE:
6596 error_msg = "array of references";
6597 break;
6599 case METHOD_TYPE:
6600 error_msg = "array of function members";
6601 break;
6603 default:
6604 break;
6607 /* If something went wrong, issue an error-message and return. */
6608 if (error_msg)
6610 if (name)
6611 error ("declaration of %qD as %s", name, error_msg);
6612 else
6613 error ("creating %s", error_msg);
6615 return error_mark_node;
6618 /* [dcl.array]
6620 The constant expressions that specify the bounds of the arrays
6621 can be omitted only for the first member of the sequence. */
6622 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6624 if (name)
6625 error ("declaration of %qD as multidimensional array must "
6626 "have bounds for all dimensions except the first",
6627 name);
6628 else
6629 error ("multidimensional array must have bounds for all "
6630 "dimensions except the first");
6632 return error_mark_node;
6635 /* Figure out the index type for the array. */
6636 if (size)
6637 itype = compute_array_index_type (name, size);
6639 /* [dcl.array]
6640 T is called the array element type; this type shall not be [...] an
6641 abstract class type. */
6642 abstract_virtuals_error (name, type);
6644 return build_cplus_array_type (type, itype);
6647 /* Check that it's OK to declare a function with the indicated TYPE.
6648 SFK indicates the kind of special function (if any) that this
6649 function is. OPTYPE is the type given in a conversion operator
6650 declaration, or the class type for a constructor/destructor.
6651 Returns the actual return type of the function; that
6652 may be different than TYPE if an error occurs, or for certain
6653 special functions. */
6655 static tree
6656 check_special_function_return_type (special_function_kind sfk,
6657 tree type,
6658 tree optype)
6660 switch (sfk)
6662 case sfk_constructor:
6663 if (type)
6664 error ("return type specification for constructor invalid");
6666 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6667 type = build_pointer_type (optype);
6668 else
6669 type = void_type_node;
6670 break;
6672 case sfk_destructor:
6673 if (type)
6674 error ("return type specification for destructor invalid");
6675 /* We can't use the proper return type here because we run into
6676 problems with ambiguous bases and covariant returns.
6677 Java classes are left unchanged because (void *) isn't a valid
6678 Java type, and we don't want to change the Java ABI. */
6679 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6680 type = build_pointer_type (void_type_node);
6681 else
6682 type = void_type_node;
6683 break;
6685 case sfk_conversion:
6686 if (type && !same_type_p (type, optype))
6687 error ("operator %qT declared to return %qT", optype, type);
6688 else if (type)
6689 pedwarn ("return type specified for %<operator %T%>", optype);
6690 type = optype;
6691 break;
6693 default:
6694 gcc_unreachable ();
6697 return type;
6700 /* A variable or data member (whose unqualified name is IDENTIFIER)
6701 has been declared with the indicated TYPE. If the TYPE is not
6702 acceptable, issue an error message and return a type to use for
6703 error-recovery purposes. */
6705 tree
6706 check_var_type (tree identifier, tree type)
6708 if (VOID_TYPE_P (type))
6710 if (!identifier)
6711 error ("unnamed variable or field declared void");
6712 else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6714 gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6715 error ("variable or field %qE declared void", identifier);
6717 else
6718 error ("variable or field declared void");
6719 type = integer_type_node;
6722 return type;
6725 /* Given declspecs and a declarator (abstract or otherwise), determine
6726 the name and type of the object declared and construct a DECL node
6727 for it.
6729 DECLSPECS is a chain of tree_list nodes whose value fields
6730 are the storage classes and type specifiers.
6732 DECL_CONTEXT says which syntactic context this declaration is in:
6733 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6734 FUNCDEF for a function definition. Like NORMAL but a few different
6735 error messages in each case. Return value may be zero meaning
6736 this definition is too screwy to try to parse.
6737 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6738 handle member functions (which have FIELD context).
6739 Return value may be zero meaning this definition is too screwy to
6740 try to parse.
6741 PARM for a parameter declaration (either within a function prototype
6742 or before a function body). Make a PARM_DECL, or return void_type_node.
6743 CATCHPARM for a parameter declaration before a catch clause.
6744 TYPENAME if for a typename (in a cast or sizeof).
6745 Don't make a DECL node; just return the ..._TYPE node.
6746 FIELD for a struct or union field; make a FIELD_DECL.
6747 BITFIELD for a field with specified width.
6748 INITIALIZED is 1 if the decl has an initializer.
6750 ATTRLIST is a pointer to the list of attributes, which may be NULL
6751 if there are none; *ATTRLIST may be modified if attributes from inside
6752 the declarator should be applied to the declaration.
6754 When this function is called, scoping variables (such as
6755 CURRENT_CLASS_TYPE) should reflect the scope in which the
6756 declaration occurs, not the scope in which the new declaration will
6757 be placed. For example, on:
6759 void S::f() { ... }
6761 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6762 should not be `S'. */
6764 tree
6765 grokdeclarator (const cp_declarator *declarator,
6766 const cp_decl_specifier_seq *declspecs,
6767 enum decl_context decl_context,
6768 int initialized,
6769 tree* attrlist)
6771 tree type = NULL_TREE;
6772 int longlong = 0;
6773 int type_quals;
6774 int virtualp, explicitp, friendp, inlinep, staticp;
6775 int explicit_int = 0;
6776 int explicit_char = 0;
6777 int defaulted_int = 0;
6778 tree dependant_name = NULL_TREE;
6780 tree typedef_decl = NULL_TREE;
6781 const char *name = NULL;
6782 tree typedef_type = NULL_TREE;
6783 /* True if this declarator is a function definition. */
6784 bool funcdef_flag = false;
6785 cp_declarator_kind innermost_code = cdk_error;
6786 int bitfield = 0;
6787 #if 0
6788 /* See the code below that used this. */
6789 tree decl_attr = NULL_TREE;
6790 #endif
6792 /* Keep track of what sort of function is being processed
6793 so that we can warn about default return values, or explicit
6794 return values which do not match prescribed defaults. */
6795 special_function_kind sfk = sfk_none;
6797 tree dname = NULL_TREE;
6798 tree ctor_return_type = NULL_TREE;
6799 enum overload_flags flags = NO_SPECIAL;
6800 cp_cv_quals quals = TYPE_UNQUALIFIED;
6801 tree raises = NULL_TREE;
6802 int template_count = 0;
6803 tree returned_attrs = NULL_TREE;
6804 tree parms = NULL_TREE;
6805 const cp_declarator *id_declarator;
6806 /* The unqualified name of the declarator; either an
6807 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6808 tree unqualified_id;
6809 /* The class type, if any, in which this entity is located,
6810 or NULL_TREE if none. Note that this value may be different from
6811 the current class type; for example if an attempt is made to declare
6812 "A::f" inside "B", this value will be "A". */
6813 tree ctype = current_class_type;
6814 /* The NAMESPACE_DECL for the namespace in which this entity is
6815 located. If an unqualified name is used to declare the entity,
6816 this value will be NULL_TREE, even if the entity is located at
6817 namespace scope. */
6818 tree in_namespace = NULL_TREE;
6819 cp_storage_class storage_class;
6820 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6821 bool type_was_error_mark_node = false;
6823 signed_p = declspecs->specs[(int)ds_signed];
6824 unsigned_p = declspecs->specs[(int)ds_unsigned];
6825 short_p = declspecs->specs[(int)ds_short];
6826 long_p = declspecs->specs[(int)ds_long];
6827 longlong = declspecs->specs[(int)ds_long] >= 2;
6828 thread_p = declspecs->specs[(int)ds_thread];
6830 if (decl_context == FUNCDEF)
6831 funcdef_flag = true, decl_context = NORMAL;
6832 else if (decl_context == MEMFUNCDEF)
6833 funcdef_flag = true, decl_context = FIELD;
6834 else if (decl_context == BITFIELD)
6835 bitfield = 1, decl_context = FIELD;
6837 /* Look inside a declarator for the name being declared
6838 and get it as a string, for an error message. */
6839 for (id_declarator = declarator;
6840 id_declarator;
6841 id_declarator = id_declarator->declarator)
6843 if (id_declarator->kind != cdk_id)
6844 innermost_code = id_declarator->kind;
6846 switch (id_declarator->kind)
6848 case cdk_function:
6849 if (id_declarator->declarator
6850 && id_declarator->declarator->kind == cdk_id)
6852 sfk = id_declarator->declarator->u.id.sfk;
6853 if (sfk == sfk_destructor)
6854 flags = DTOR_FLAG;
6856 break;
6858 case cdk_id:
6860 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6861 tree decl = id_declarator->u.id.unqualified_name;
6862 if (!decl)
6863 break;
6864 if (qualifying_scope)
6866 if (TYPE_P (qualifying_scope))
6868 ctype = qualifying_scope;
6869 if (innermost_code != cdk_function
6870 && current_class_type
6871 && !UNIQUELY_DERIVED_FROM_P (ctype,
6872 current_class_type))
6874 error ("type %qT is not derived from type %qT",
6875 ctype, current_class_type);
6876 return error_mark_node;
6879 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6880 in_namespace = qualifying_scope;
6882 switch (TREE_CODE (decl))
6884 case BIT_NOT_EXPR:
6886 tree type;
6888 if (innermost_code != cdk_function)
6890 error ("declaration of %qD as non-function", decl);
6891 return error_mark_node;
6893 else if (!qualifying_scope
6894 && !(current_class_type && at_class_scope_p ()))
6896 error ("declaration of %qD as non-member", decl);
6897 return error_mark_node;
6900 type = TREE_OPERAND (decl, 0);
6901 name = IDENTIFIER_POINTER (constructor_name (type));
6902 dname = decl;
6904 break;
6906 case TEMPLATE_ID_EXPR:
6908 tree fns = TREE_OPERAND (decl, 0);
6910 dname = fns;
6911 if (TREE_CODE (dname) == COMPONENT_REF)
6912 dname = TREE_OPERAND (dname, 1);
6913 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6915 gcc_assert (is_overloaded_fn (dname));
6916 dname = DECL_NAME (get_first_fn (dname));
6919 /* Fall through. */
6921 case IDENTIFIER_NODE:
6922 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6923 dname = decl;
6925 if (C_IS_RESERVED_WORD (dname))
6927 error ("declarator-id missing; using reserved word %qD",
6928 dname);
6929 name = IDENTIFIER_POINTER (dname);
6931 else if (!IDENTIFIER_TYPENAME_P (dname))
6932 name = IDENTIFIER_POINTER (dname);
6933 else
6935 gcc_assert (flags == NO_SPECIAL);
6936 flags = TYPENAME_FLAG;
6937 ctor_return_type = TREE_TYPE (dname);
6938 sfk = sfk_conversion;
6939 if (is_typename_at_global_scope (dname))
6940 name = IDENTIFIER_POINTER (dname);
6941 else
6942 name = "<invalid operator>";
6944 break;
6946 default:
6947 gcc_unreachable ();
6949 break;
6951 case cdk_array:
6952 case cdk_pointer:
6953 case cdk_reference:
6954 case cdk_ptrmem:
6955 break;
6957 case cdk_error:
6958 break;
6960 default:
6961 gcc_unreachable ();
6964 if (id_declarator->kind == cdk_id)
6965 break;
6968 /* A function definition's declarator must have the form of
6969 a function declarator. */
6971 if (funcdef_flag && innermost_code != cdk_function)
6972 return NULL_TREE;
6974 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6975 && innermost_code != cdk_function
6976 && ! (ctype && !declspecs->any_specifiers_p))
6978 error ("declaration of %qD as non-function", dname);
6979 return error_mark_node;
6982 /* Anything declared one level down from the top level
6983 must be one of the parameters of a function
6984 (because the body is at least two levels down). */
6986 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6987 by not allowing C++ class definitions to specify their parameters
6988 with xdecls (must be spec.d in the parmlist).
6990 Since we now wait to push a class scope until we are sure that
6991 we are in a legitimate method context, we must set oldcname
6992 explicitly (since current_class_name is not yet alive).
6994 We also want to avoid calling this a PARM if it is in a namespace. */
6996 if (decl_context == NORMAL && !toplevel_bindings_p ())
6998 struct cp_binding_level *b = current_binding_level;
6999 current_binding_level = b->level_chain;
7000 if (current_binding_level != 0 && toplevel_bindings_p ())
7001 decl_context = PARM;
7002 current_binding_level = b;
7005 if (name == NULL)
7006 name = decl_context == PARM ? "parameter" : "type name";
7008 /* If there were multiple types specified in the decl-specifier-seq,
7009 issue an error message. */
7010 if (declspecs->multiple_types_p)
7011 error ("two or more data types in declaration of %qs", name);
7012 /* Extract the basic type from the decl-specifier-seq. */
7013 type = declspecs->type;
7014 if (type == error_mark_node)
7016 type = NULL_TREE;
7017 type_was_error_mark_node = true;
7019 /* If the entire declaration is itself tagged as deprecated then
7020 suppress reports of deprecated items. */
7021 if (type && TREE_DEPRECATED (type)
7022 && deprecated_state != DEPRECATED_SUPPRESS)
7023 warn_deprecated_use (type);
7024 if (type && TREE_CODE (type) == TYPE_DECL)
7026 typedef_decl = type;
7027 type = TREE_TYPE (typedef_decl);
7029 /* No type at all: default to `int', and set DEFAULTED_INT
7030 because it was not a user-defined typedef. */
7031 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7033 /* These imply 'int'. */
7034 type = integer_type_node;
7035 defaulted_int = 1;
7037 /* Gather flags. */
7038 explicit_int = declspecs->explicit_int_p;
7039 explicit_char = declspecs->explicit_char_p;
7041 #if 0
7042 /* See the code below that used this. */
7043 if (typedef_decl)
7044 decl_attr = DECL_ATTRIBUTES (typedef_decl);
7045 #endif
7046 typedef_type = type;
7049 if (sfk != sfk_conversion)
7050 ctor_return_type = ctype;
7052 if (sfk != sfk_none)
7053 type = check_special_function_return_type (sfk, type,
7054 ctor_return_type);
7055 else if (type == NULL_TREE)
7057 int is_main;
7059 explicit_int = -1;
7061 /* We handle `main' specially here, because 'main () { }' is so
7062 common. With no options, it is allowed. With -Wreturn-type,
7063 it is a warning. It is only an error with -pedantic-errors. */
7064 is_main = (funcdef_flag
7065 && dname && MAIN_NAME_P (dname)
7066 && ctype == NULL_TREE
7067 && in_namespace == NULL_TREE
7068 && current_namespace == global_namespace);
7070 if (type_was_error_mark_node)
7071 /* We've already issued an error, don't complain more. */;
7072 else if (in_system_header || flag_ms_extensions)
7073 /* Allow it, sigh. */;
7074 else if (pedantic || ! is_main)
7075 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7076 else if (warn_return_type)
7077 warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7079 type = integer_type_node;
7082 ctype = NULL_TREE;
7084 /* Now process the modifiers that were specified
7085 and check for invalid combinations. */
7087 /* Long double is a special combination. */
7088 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
7090 long_p = false;
7091 type = build_qualified_type (long_double_type_node,
7092 cp_type_quals (type));
7095 /* Check all other uses of type modifiers. */
7097 if (unsigned_p || signed_p || long_p || short_p)
7099 int ok = 0;
7101 if (TREE_CODE (type) == REAL_TYPE)
7102 error ("short, signed or unsigned invalid for %qs", name);
7103 else if (TREE_CODE (type) != INTEGER_TYPE)
7104 error ("long, short, signed or unsigned invalid for %qs", name);
7105 else if (long_p && short_p)
7106 error ("long and short specified together for %qs", name);
7107 else if ((long_p || short_p) && explicit_char)
7108 error ("long or short specified with char for %qs", name);
7109 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
7110 error ("long or short specified with floating type for %qs", name);
7111 else if (signed_p && unsigned_p)
7112 error ("signed and unsigned given together for %qs", name);
7113 else
7115 ok = 1;
7116 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7118 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7119 name);
7120 if (flag_pedantic_errors)
7121 ok = 0;
7125 /* Discard the type modifiers if they are invalid. */
7126 if (! ok)
7128 unsigned_p = false;
7129 signed_p = false;
7130 long_p = false;
7131 short_p = false;
7132 longlong = 0;
7136 /* Decide whether an integer type is signed or not.
7137 Optionally treat bitfields as signed by default. */
7138 if (unsigned_p
7139 /* [class.bit]
7141 It is implementation-defined whether a plain (neither
7142 explicitly signed or unsigned) char, short, int, or long
7143 bit-field is signed or unsigned.
7145 Naturally, we extend this to long long as well. Note that
7146 this does not include wchar_t. */
7147 || (bitfield && !flag_signed_bitfields
7148 && !signed_p
7149 /* A typedef for plain `int' without `signed' can be
7150 controlled just like plain `int', but a typedef for
7151 `signed int' cannot be so controlled. */
7152 && !(typedef_decl
7153 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7154 && TREE_CODE (type) == INTEGER_TYPE
7155 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7157 if (longlong)
7158 type = long_long_unsigned_type_node;
7159 else if (long_p)
7160 type = long_unsigned_type_node;
7161 else if (short_p)
7162 type = short_unsigned_type_node;
7163 else if (type == char_type_node)
7164 type = unsigned_char_type_node;
7165 else if (typedef_decl)
7166 type = c_common_unsigned_type (type);
7167 else
7168 type = unsigned_type_node;
7170 else if (signed_p && type == char_type_node)
7171 type = signed_char_type_node;
7172 else if (longlong)
7173 type = long_long_integer_type_node;
7174 else if (long_p)
7175 type = long_integer_type_node;
7176 else if (short_p)
7177 type = short_integer_type_node;
7179 if (declspecs->specs[(int)ds_complex])
7181 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7182 error ("complex invalid for %qs", name);
7183 /* If we just have "complex", it is equivalent to
7184 "complex double", but if any modifiers at all are specified it is
7185 the complex form of TYPE. E.g, "complex short" is
7186 "complex short int". */
7188 else if (defaulted_int && ! longlong
7189 && ! (long_p || short_p || signed_p || unsigned_p))
7190 type = complex_double_type_node;
7191 else if (type == integer_type_node)
7192 type = complex_integer_type_node;
7193 else if (type == float_type_node)
7194 type = complex_float_type_node;
7195 else if (type == double_type_node)
7196 type = complex_double_type_node;
7197 else if (type == long_double_type_node)
7198 type = complex_long_double_type_node;
7199 else
7200 type = build_complex_type (type);
7203 type_quals = TYPE_UNQUALIFIED;
7204 if (declspecs->specs[(int)ds_const])
7205 type_quals |= TYPE_QUAL_CONST;
7206 if (declspecs->specs[(int)ds_volatile])
7207 type_quals |= TYPE_QUAL_VOLATILE;
7208 if (declspecs->specs[(int)ds_restrict])
7209 type_quals |= TYPE_QUAL_RESTRICT;
7210 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7211 error ("qualifiers are not allowed on declaration of %<operator %T%>",
7212 ctor_return_type);
7214 if (TREE_CODE (type) == FUNCTION_TYPE
7215 && type_quals != TYPE_UNQUALIFIED)
7217 /* This was an error in C++98 (cv-qualifiers cannot be added to
7218 a function type), but DR 295 makes the code well-formed by
7219 dropping the extra qualifiers. */
7220 if (pedantic)
7222 tree bad_type = build_qualified_type (type, type_quals);
7223 pedwarn ("ignoring %qV qualifiers added to function type %qT",
7224 bad_type, type);
7226 type_quals = TYPE_UNQUALIFIED;
7228 type_quals |= cp_type_quals (type);
7229 type = cp_build_qualified_type_real
7230 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7231 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7232 /* We might have ignored or rejected some of the qualifiers. */
7233 type_quals = cp_type_quals (type);
7235 staticp = 0;
7236 inlinep = !! declspecs->specs[(int)ds_inline];
7237 virtualp = !! declspecs->specs[(int)ds_virtual];
7238 explicitp = !! declspecs->specs[(int)ds_explicit];
7240 storage_class = declspecs->storage_class;
7241 if (storage_class == sc_static)
7242 staticp = 1 + (decl_context == FIELD);
7244 if (virtualp && staticp == 2)
7246 error ("member %qD cannot be declared both virtual and static", dname);
7247 storage_class = sc_none;
7248 staticp = 0;
7250 friendp = !! declspecs->specs[(int)ds_friend];
7252 if (dependant_name && !friendp)
7254 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
7255 return void_type_node;
7258 /* Issue errors about use of storage classes for parameters. */
7259 if (decl_context == PARM)
7261 if (declspecs->specs[(int)ds_typedef])
7262 error ("typedef declaration invalid in parameter declaration");
7263 else if (storage_class == sc_static
7264 || storage_class == sc_extern
7265 || thread_p)
7266 error ("storage class specifiers invalid in parameter declarations");
7269 /* Give error if `virtual' is used outside of class declaration. */
7270 if (virtualp
7271 && (current_class_name == NULL_TREE || decl_context != FIELD))
7273 error ("virtual outside class declaration");
7274 virtualp = 0;
7277 /* Static anonymous unions are dealt with here. */
7278 if (staticp && decl_context == TYPENAME
7279 && declspecs->type
7280 && ANON_AGGR_TYPE_P (declspecs->type))
7281 decl_context = FIELD;
7283 /* Warn about storage classes that are invalid for certain
7284 kinds of declarations (parameters, typenames, etc.). */
7285 if (declspecs->multiple_storage_classes_p)
7287 error ("multiple storage classes in declaration of %qs", name);
7288 storage_class = sc_none;
7290 else if (thread_p
7291 && ((storage_class
7292 && storage_class != sc_extern
7293 && storage_class != sc_static)
7294 || declspecs->specs[(int)ds_typedef]))
7296 error ("multiple storage classes in declaration of %qs", name);
7297 thread_p = false;
7299 else if (decl_context != NORMAL
7300 && ((storage_class != sc_none
7301 && storage_class != sc_mutable)
7302 || thread_p))
7304 if ((decl_context == PARM || decl_context == CATCHPARM)
7305 && (storage_class == sc_register
7306 || storage_class == sc_auto))
7308 else if (declspecs->specs[(int)ds_typedef])
7310 else if (decl_context == FIELD
7311 /* C++ allows static class elements. */
7312 && storage_class == sc_static)
7313 /* C++ also allows inlines and signed and unsigned elements,
7314 but in those cases we don't come in here. */
7316 else
7318 if (decl_context == FIELD)
7319 error ("storage class specified for %qs", name);
7320 else
7322 if (decl_context == PARM || decl_context == CATCHPARM)
7323 error ("storage class specified for parameter %qs", name);
7324 else
7325 error ("storage class specified for typename");
7327 if (storage_class == sc_register
7328 || storage_class == sc_auto
7329 || storage_class == sc_extern
7330 || thread_p)
7331 storage_class = sc_none;
7334 else if (storage_class == sc_extern && initialized
7335 && !funcdef_flag)
7337 if (toplevel_bindings_p ())
7339 /* It's common practice (and completely valid) to have a const
7340 be initialized and declared extern. */
7341 if (!(type_quals & TYPE_QUAL_CONST))
7342 warning (0, "%qs initialized and declared %<extern%>", name);
7344 else
7345 error ("%qs has both %<extern%> and initializer", name);
7347 else if (storage_class == sc_extern && funcdef_flag
7348 && ! toplevel_bindings_p ())
7349 error ("nested function %qs declared %<extern%>", name);
7350 else if (toplevel_bindings_p ())
7352 if (storage_class == sc_auto)
7353 error ("top-level declaration of %qs specifies %<auto%>", name);
7355 else if (thread_p
7356 && storage_class != sc_extern
7357 && storage_class != sc_static)
7359 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7360 name);
7361 thread_p = false;
7364 if (storage_class && friendp)
7365 error ("storage class specifiers invalid in friend function declarations");
7367 if (!id_declarator)
7368 unqualified_id = NULL_TREE;
7369 else
7371 unqualified_id = id_declarator->u.id.unqualified_name;
7372 switch (TREE_CODE (unqualified_id))
7374 case BIT_NOT_EXPR:
7375 unqualified_id
7376 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7377 break;
7379 case IDENTIFIER_NODE:
7380 case TEMPLATE_ID_EXPR:
7381 break;
7383 default:
7384 gcc_unreachable ();
7388 /* Determine the type of the entity declared by recurring on the
7389 declarator. */
7390 for (; declarator; declarator = declarator->declarator)
7392 const cp_declarator *inner_declarator;
7393 tree attrs;
7395 if (type == error_mark_node)
7396 return error_mark_node;
7398 attrs = declarator->attributes;
7399 if (attrs)
7401 int attr_flags;
7403 attr_flags = 0;
7404 if (declarator == NULL || declarator->kind == cdk_id)
7405 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7406 if (declarator->kind == cdk_function)
7407 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7408 if (declarator->kind == cdk_array)
7409 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7410 returned_attrs = decl_attributes (&type,
7411 chainon (returned_attrs, attrs),
7412 attr_flags);
7415 if (declarator->kind == cdk_id)
7416 break;
7418 inner_declarator = declarator->declarator;
7420 switch (declarator->kind)
7422 case cdk_array:
7423 type = create_array_type_for_decl (dname, type,
7424 declarator->u.array.bounds);
7425 break;
7427 case cdk_function:
7429 tree arg_types;
7430 int funcdecl_p;
7432 /* Declaring a function type.
7433 Make sure we have a valid type for the function to return. */
7435 /* We now know that the TYPE_QUALS don't apply to the
7436 decl, but to its return type. */
7437 type_quals = TYPE_UNQUALIFIED;
7439 /* Warn about some types functions can't return. */
7441 if (TREE_CODE (type) == FUNCTION_TYPE)
7443 error ("%qs declared as function returning a function", name);
7444 type = integer_type_node;
7446 if (TREE_CODE (type) == ARRAY_TYPE)
7448 error ("%qs declared as function returning an array", name);
7449 type = integer_type_node;
7452 /* Pick up type qualifiers which should be applied to `this'. */
7453 quals = declarator->u.function.qualifiers;
7455 /* Pick up the exception specifications. */
7456 raises = declarator->u.function.exception_specification;
7458 /* Say it's a definition only for the CALL_EXPR
7459 closest to the identifier. */
7460 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7462 if (ctype == NULL_TREE
7463 && decl_context == FIELD
7464 && funcdecl_p
7465 && (friendp == 0 || dname == current_class_name))
7466 ctype = current_class_type;
7468 if (ctype && (sfk == sfk_constructor
7469 || sfk == sfk_destructor))
7471 /* We are within a class's scope. If our declarator name
7472 is the same as the class name, and we are defining
7473 a function, then it is a constructor/destructor, and
7474 therefore returns a void type. */
7476 if (flags == DTOR_FLAG)
7478 /* ISO C++ 12.4/2. A destructor may not be
7479 declared const or volatile. A destructor may
7480 not be static. */
7481 if (staticp == 2)
7482 error ("destructor cannot be static member function");
7483 if (quals)
7485 error ("destructors may not be cv-qualified");
7486 quals = TYPE_UNQUALIFIED;
7488 if (decl_context == FIELD)
7490 if (! member_function_or_else (ctype,
7491 current_class_type,
7492 flags))
7493 return void_type_node;
7496 else /* It's a constructor. */
7498 if (explicitp == 1)
7499 explicitp = 2;
7500 /* ISO C++ 12.1. A constructor may not be
7501 declared const or volatile. A constructor may
7502 not be virtual. A constructor may not be
7503 static. */
7504 if (staticp == 2)
7505 error ("constructor cannot be static member function");
7506 if (virtualp)
7508 pedwarn ("constructors cannot be declared virtual");
7509 virtualp = 0;
7511 if (quals)
7513 error ("constructors may not be cv-qualified");
7514 quals = TYPE_UNQUALIFIED;
7516 if (decl_context == FIELD)
7518 if (! member_function_or_else (ctype,
7519 current_class_type,
7520 flags))
7521 return void_type_node;
7522 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7523 if (sfk != sfk_constructor)
7524 return NULL_TREE;
7527 if (decl_context == FIELD)
7528 staticp = 0;
7530 else if (friendp)
7532 if (initialized)
7533 error ("can't initialize friend function %qs", name);
7534 if (virtualp)
7536 /* Cannot be both friend and virtual. */
7537 error ("virtual functions cannot be friends");
7538 friendp = 0;
7540 if (decl_context == NORMAL)
7541 error ("friend declaration not in class definition");
7542 if (current_function_decl && funcdef_flag)
7543 error ("can't define friend function %qs in a local "
7544 "class definition",
7545 name);
7548 arg_types = grokparms (declarator->u.function.parameters,
7549 &parms);
7551 if (inner_declarator
7552 && inner_declarator->kind == cdk_id
7553 && inner_declarator->u.id.sfk == sfk_destructor
7554 && arg_types != void_list_node)
7556 error ("destructors may not have parameters");
7557 arg_types = void_list_node;
7558 parms = NULL_TREE;
7561 type = build_function_type (type, arg_types);
7562 type = cp_build_qualified_type (type, quals);
7564 break;
7566 case cdk_pointer:
7567 case cdk_reference:
7568 case cdk_ptrmem:
7569 /* Filter out pointers-to-references and references-to-references.
7570 We can get these if a TYPE_DECL is used. */
7572 if (TREE_CODE (type) == REFERENCE_TYPE)
7574 error (declarator->kind == cdk_reference
7575 ? "cannot declare reference to %q#T"
7576 : "cannot declare pointer to %q#T", type);
7577 type = TREE_TYPE (type);
7579 else if (VOID_TYPE_P (type))
7581 if (declarator->kind == cdk_reference)
7582 error ("cannot declare reference to %q#T", type);
7583 else if (declarator->kind == cdk_ptrmem)
7584 error ("cannot declare pointer to %q#T member", type);
7587 /* We now know that the TYPE_QUALS don't apply to the decl,
7588 but to the target of the pointer. */
7589 type_quals = TYPE_UNQUALIFIED;
7591 if (declarator->kind == cdk_ptrmem
7592 && (TREE_CODE (type) == FUNCTION_TYPE
7593 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7595 tree dummy;
7597 /* If the type is a FUNCTION_TYPE, pick up the
7598 qualifiers from that function type. No other
7599 qualifiers may be supplied. */
7600 if (TREE_CODE (type) == FUNCTION_TYPE)
7601 quals = cp_type_quals (type);
7603 dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7604 grok_method_quals (declarator->u.pointer.class_type,
7605 dummy, quals);
7606 type = TREE_TYPE (dummy);
7607 quals = TYPE_UNQUALIFIED;
7610 if (declarator->kind == cdk_reference)
7612 if (!VOID_TYPE_P (type))
7613 type = build_reference_type (type);
7615 else if (TREE_CODE (type) == METHOD_TYPE)
7616 type = build_ptrmemfunc_type (build_pointer_type (type));
7617 else if (declarator->kind == cdk_ptrmem)
7619 /* We might have parsed a namespace as the class type. */
7620 if (TREE_CODE (declarator->u.pointer.class_type)
7621 == NAMESPACE_DECL)
7623 error ("%qD is a namespace",
7624 declarator->u.pointer.class_type);
7625 type = build_pointer_type (type);
7627 else if (declarator->u.pointer.class_type == error_mark_node)
7628 /* We will already have complained. */
7629 type = error_mark_node;
7630 else
7631 type = build_ptrmem_type (declarator->u.pointer.class_type,
7632 type);
7634 else
7635 type = build_pointer_type (type);
7637 /* Process a list of type modifier keywords (such as
7638 const or volatile) that were given inside the `*' or `&'. */
7640 if (declarator->u.pointer.qualifiers)
7642 type
7643 = cp_build_qualified_type (type,
7644 declarator->u.pointer.qualifiers);
7645 type_quals = cp_type_quals (type);
7647 ctype = NULL_TREE;
7648 break;
7650 case cdk_error:
7651 break;
7653 default:
7654 gcc_unreachable ();
7658 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7659 && TREE_CODE (type) != FUNCTION_TYPE
7660 && TREE_CODE (type) != METHOD_TYPE)
7662 error ("template-id %qD used as a declarator",
7663 unqualified_id);
7664 unqualified_id = dname;
7667 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7668 qualified with a class-name, turn it into a METHOD_TYPE, unless
7669 we know that the function is static. We take advantage of this
7670 opportunity to do other processing that pertains to entities
7671 explicitly declared to be class members. Note that if DECLARATOR
7672 is non-NULL, we know it is a cdk_id declarator; otherwise, we
7673 would not have exited the loop above. */
7674 if (declarator
7675 && declarator->u.id.qualifying_scope
7676 && TYPE_P (declarator->u.id.qualifying_scope))
7678 tree t;
7680 ctype = declarator->u.id.qualifying_scope;
7681 ctype = TYPE_MAIN_VARIANT (ctype);
7682 t = ctype;
7683 while (t != NULL_TREE && CLASS_TYPE_P (t))
7685 /* You're supposed to have one `template <...>' for every
7686 template class, but you don't need one for a full
7687 specialization. For example:
7689 template <class T> struct S{};
7690 template <> struct S<int> { void f(); };
7691 void S<int>::f () {}
7693 is correct; there shouldn't be a `template <>' for the
7694 definition of `S<int>::f'. */
7695 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7696 && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7697 /* T is an explicit (not partial) specialization. All
7698 containing classes must therefore also be explicitly
7699 specialized. */
7700 break;
7701 if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7702 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7703 template_count += 1;
7705 t = TYPE_MAIN_DECL (t);
7706 t = DECL_CONTEXT (t);
7709 if (ctype == current_class_type)
7711 if (friendp)
7712 pedwarn ("member functions are implicitly friends of their class");
7713 else
7714 pedwarn ("extra qualification %<%T::%> on member %qs",
7715 ctype, name);
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_method_type_directly (ctype,
7738 TREE_TYPE (type),
7739 TYPE_ARG_TYPES (type));
7741 else if (declspecs->specs[(int)ds_typedef]
7742 || COMPLETE_TYPE_P (complete_type (ctype)))
7744 /* Have to move this code elsewhere in this function.
7745 this code is used for i.e., typedef int A::M; M *pm;
7747 It is? How? jason 10/2/94 */
7749 if (current_class_type)
7751 error ("cannot declare member %<%T::%s%> within %qT",
7752 ctype, name, current_class_type);
7753 return void_type_node;
7756 else
7758 cxx_incomplete_type_error (NULL_TREE, ctype);
7759 return error_mark_node;
7763 /* Now TYPE has the actual type. */
7765 if (returned_attrs)
7767 if (attrlist)
7768 *attrlist = chainon (returned_attrs, *attrlist);
7769 else
7770 attrlist = &returned_attrs;
7773 /* Did array size calculations overflow? */
7775 if (TREE_CODE (type) == ARRAY_TYPE
7776 && COMPLETE_TYPE_P (type)
7777 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7778 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7780 error ("size of array %qs is too large", name);
7781 /* If we proceed with the array type as it is, we'll eventually
7782 crash in tree_low_cst(). */
7783 type = error_mark_node;
7786 if ((decl_context == FIELD || decl_context == PARM)
7787 && !processing_template_decl
7788 && variably_modified_type_p (type, NULL_TREE))
7790 if (decl_context == FIELD)
7791 error ("data member may not have variably modified type %qT", type);
7792 else
7793 error ("parameter may not have variably modified type %qT", type);
7794 type = error_mark_node;
7797 if (explicitp == 1 || (explicitp && friendp))
7799 /* [dcl.fct.spec] The explicit specifier shall only be used in
7800 declarations of constructors within a class definition. */
7801 error ("only declarations of constructors can be %<explicit%>");
7802 explicitp = 0;
7805 if (storage_class == sc_mutable)
7807 if (decl_context != FIELD || friendp)
7809 error ("non-member %qs cannot be declared %<mutable%>", name);
7810 storage_class = sc_none;
7812 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7814 error ("non-object member %qs cannot be declared %<mutable%>", name);
7815 storage_class = sc_none;
7817 else if (TREE_CODE (type) == FUNCTION_TYPE
7818 || TREE_CODE (type) == METHOD_TYPE)
7820 error ("function %qs cannot be declared %<mutable%>", name);
7821 storage_class = sc_none;
7823 else if (staticp)
7825 error ("static %qs cannot be declared %<mutable%>", name);
7826 storage_class = sc_none;
7828 else if (type_quals & TYPE_QUAL_CONST)
7830 error ("const %qs cannot be declared %<mutable%>", name);
7831 storage_class = sc_none;
7835 /* If this is declaring a typedef name, return a TYPE_DECL. */
7836 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7838 tree decl;
7840 /* Note that the grammar rejects storage classes
7841 in typenames, fields or parameters. */
7842 if (current_lang_name == lang_name_java)
7843 TYPE_FOR_JAVA (type) = 1;
7845 if (decl_context == FIELD)
7846 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7847 else
7848 decl = build_decl (TYPE_DECL, unqualified_id, type);
7849 if (id_declarator && declarator->u.id.qualifying_scope)
7850 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7852 if (decl_context != FIELD)
7854 if (!current_function_decl)
7855 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7856 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7857 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7858 (current_function_decl)))
7859 /* The TYPE_DECL is "abstract" because there will be
7860 clones of this constructor/destructor, and there will
7861 be copies of this TYPE_DECL generated in those
7862 clones. */
7863 DECL_ABSTRACT (decl) = 1;
7865 else if (constructor_name_p (unqualified_id, current_class_type))
7866 pedwarn ("ISO C++ forbids nested type %qD with same name "
7867 "as enclosing class",
7868 unqualified_id);
7870 /* If the user declares "typedef struct {...} foo" then the
7871 struct will have an anonymous name. Fill that name in now.
7872 Nothing can refer to it, so nothing needs know about the name
7873 change. */
7874 if (type != error_mark_node
7875 && unqualified_id
7876 && TYPE_NAME (type)
7877 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7878 && TYPE_ANONYMOUS_P (type)
7879 /* Don't do this if there are attributes. */
7880 && (!attrlist || !*attrlist)
7881 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7883 tree oldname = TYPE_NAME (type);
7884 tree t;
7886 /* Replace the anonymous name with the real name everywhere. */
7887 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7888 if (TYPE_NAME (t) == oldname)
7889 TYPE_NAME (t) = decl;
7891 if (TYPE_LANG_SPECIFIC (type))
7892 TYPE_WAS_ANONYMOUS (type) = 1;
7894 /* If this is a typedef within a template class, the nested
7895 type is a (non-primary) template. The name for the
7896 template needs updating as well. */
7897 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7898 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7899 = TYPE_IDENTIFIER (type);
7901 /* FIXME remangle member functions; member functions of a
7902 type with external linkage have external linkage. */
7905 if (quals)
7907 if (ctype == NULL_TREE)
7909 if (TREE_CODE (type) == METHOD_TYPE)
7910 ctype = TYPE_METHOD_BASETYPE (type);
7911 /* Any qualifiers on a function type typedef have
7912 already been dealt with. */
7913 else if (TREE_CODE (type) == FUNCTION_TYPE)
7914 quals = TYPE_UNQUALIFIED;
7916 if (ctype != NULL_TREE)
7917 grok_method_quals (ctype, decl, quals);
7920 if (signed_p
7921 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7922 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7924 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7925 inlinep, friendp, raises != NULL_TREE);
7927 return decl;
7930 /* Detect the case of an array type of unspecified size
7931 which came, as such, direct from a typedef name.
7932 We must copy the type, so that the array's domain can be
7933 individually set by the object's initializer. */
7935 if (type && typedef_type
7936 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7937 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7938 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7940 /* Detect where we're using a typedef of function type to declare a
7941 function. PARMS will not be set, so we must create it now. */
7943 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7945 tree decls = NULL_TREE;
7946 tree args;
7948 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7950 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7952 TREE_CHAIN (decl) = decls;
7953 decls = decl;
7956 parms = nreverse (decls);
7958 if (decl_context != TYPENAME)
7960 /* A cv-qualifier-seq shall only be part of the function type
7961 for a non-static member function. [8.3.5/4 dcl.fct] */
7962 if (cp_type_quals (type) != TYPE_UNQUALIFIED
7963 && (current_class_type == NULL_TREE || staticp) )
7965 error ("qualified function types cannot be used to declare %s functions",
7966 (staticp? "static member" : "free"));
7967 type = TYPE_MAIN_VARIANT (type);
7970 /* The qualifiers on the function type become the qualifiers on
7971 the non-static member function. */
7972 quals |= cp_type_quals (type);
7976 /* If this is a type name (such as, in a cast or sizeof),
7977 compute the type and return it now. */
7979 if (decl_context == TYPENAME)
7981 /* Note that the grammar rejects storage classes
7982 in typenames, fields or parameters. */
7983 if (type_quals != TYPE_UNQUALIFIED)
7984 type_quals = TYPE_UNQUALIFIED;
7986 /* Special case: "friend class foo" looks like a TYPENAME context. */
7987 if (friendp)
7989 if (type_quals != TYPE_UNQUALIFIED)
7991 error ("type qualifiers specified for friend class declaration");
7992 type_quals = TYPE_UNQUALIFIED;
7994 if (inlinep)
7996 error ("%<inline%> specified for friend class declaration");
7997 inlinep = 0;
8000 if (!current_aggr)
8002 /* Don't allow friend declaration without a class-key. */
8003 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8004 pedwarn ("template parameters cannot be friends");
8005 else if (TREE_CODE (type) == TYPENAME_TYPE)
8006 pedwarn ("friend declaration requires class-key, "
8007 "i.e. %<friend class %T::%D%>",
8008 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8009 else
8010 pedwarn ("friend declaration requires class-key, "
8011 "i.e. %<friend %#T%>",
8012 type);
8015 /* Only try to do this stuff if we didn't already give up. */
8016 if (type != integer_type_node)
8018 /* A friendly class? */
8019 if (current_class_type)
8020 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8021 /*complain=*/true);
8022 else
8023 error ("trying to make class %qT a friend of global scope",
8024 type);
8026 type = void_type_node;
8029 else if (quals)
8031 if (ctype == NULL_TREE)
8033 if (TREE_CODE (type) != METHOD_TYPE)
8034 error ("invalid qualifiers on non-member function type");
8035 else
8036 ctype = TYPE_METHOD_BASETYPE (type);
8038 if (ctype)
8040 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
8041 grok_method_quals (ctype, dummy, quals);
8042 type = TREE_TYPE (dummy);
8046 return type;
8048 else if (unqualified_id == NULL_TREE && decl_context != PARM
8049 && decl_context != CATCHPARM
8050 && TREE_CODE (type) != UNION_TYPE
8051 && ! bitfield)
8053 error ("abstract declarator %qT used as declaration", type);
8054 return error_mark_node;
8057 /* Only functions may be declared using an operator-function-id. */
8058 if (unqualified_id
8059 && IDENTIFIER_OPNAME_P (unqualified_id)
8060 && TREE_CODE (type) != FUNCTION_TYPE
8061 && TREE_CODE (type) != METHOD_TYPE)
8063 error ("declaration of %qD as non-function", unqualified_id);
8064 return error_mark_node;
8067 /* We don't check parameter types here because we can emit a better
8068 error message later. */
8069 if (decl_context != PARM)
8070 type = check_var_type (unqualified_id, type);
8072 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8073 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
8075 if (decl_context == PARM || decl_context == CATCHPARM)
8077 if (ctype || in_namespace)
8078 error ("cannot use %<::%> in parameter declaration");
8080 /* A parameter declared as an array of T is really a pointer to T.
8081 One declared as a function is really a pointer to a function.
8082 One declared as a member is really a pointer to member. */
8084 if (TREE_CODE (type) == ARRAY_TYPE)
8086 /* Transfer const-ness of array into that of type pointed to. */
8087 type = build_pointer_type (TREE_TYPE (type));
8088 type_quals = TYPE_UNQUALIFIED;
8090 else if (TREE_CODE (type) == FUNCTION_TYPE)
8091 type = build_pointer_type (type);
8095 tree decl;
8097 if (decl_context == PARM)
8099 decl = cp_build_parm_decl (unqualified_id, type);
8101 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
8102 inlinep, friendp, raises != NULL_TREE);
8104 else if (decl_context == FIELD)
8106 /* The C99 flexible array extension. */
8107 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8108 && TYPE_DOMAIN (type) == NULL_TREE)
8110 tree itype = compute_array_index_type (dname, integer_zero_node);
8111 type = build_cplus_array_type (TREE_TYPE (type), itype);
8114 if (type == error_mark_node)
8116 /* Happens when declaring arrays of sizes which
8117 are error_mark_node, for example. */
8118 decl = NULL_TREE;
8120 else if (in_namespace && !friendp)
8122 /* Something like struct S { int N::j; }; */
8123 error ("invalid use of %<::%>");
8124 decl = NULL_TREE;
8126 else if (TREE_CODE (type) == FUNCTION_TYPE)
8128 int publicp = 0;
8129 tree function_context;
8131 if (friendp == 0)
8133 if (ctype == NULL_TREE)
8134 ctype = current_class_type;
8136 if (ctype == NULL_TREE)
8138 error ("can't make %qD into a method -- not in a class",
8139 unqualified_id);
8140 return void_type_node;
8143 /* ``A union may [ ... ] not [ have ] virtual functions.''
8144 ARM 9.5 */
8145 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8147 error ("function %qD declared virtual inside a union",
8148 unqualified_id);
8149 return void_type_node;
8152 if (NEW_DELETE_OPNAME_P (unqualified_id))
8154 if (virtualp)
8156 error ("%qD cannot be declared virtual, since it "
8157 "is always static",
8158 unqualified_id);
8159 virtualp = 0;
8162 else if (staticp < 2)
8163 type = build_method_type_directly (ctype,
8164 TREE_TYPE (type),
8165 TYPE_ARG_TYPES (type));
8168 /* Check that the name used for a destructor makes sense. */
8169 if (sfk == sfk_destructor)
8171 if (!ctype)
8173 gcc_assert (friendp);
8174 error ("expected qualified name in friend declaration "
8175 "for destructor %qD",
8176 id_declarator->u.id.unqualified_name);
8177 return error_mark_node;
8180 if (!same_type_p (TREE_OPERAND
8181 (id_declarator->u.id.unqualified_name, 0),
8182 ctype))
8184 error ("declaration of %qD as member of %qT",
8185 id_declarator->u.id.unqualified_name, ctype);
8186 return error_mark_node;
8190 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8191 function_context = (ctype != NULL_TREE) ?
8192 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8193 publicp = (! friendp || ! staticp)
8194 && function_context == NULL_TREE;
8195 decl = grokfndecl (ctype, type,
8196 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8197 ? unqualified_id : dname,
8198 parms,
8199 unqualified_id,
8200 virtualp, flags, quals, raises,
8201 friendp ? -1 : 0, friendp, publicp, inlinep,
8202 sfk,
8203 funcdef_flag, template_count, in_namespace, attrlist);
8204 if (decl == NULL_TREE)
8205 return decl;
8206 #if 0
8207 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8208 /* The decl and setting of decl_attr is also turned off. */
8209 decl = build_decl_attribute_variant (decl, decl_attr);
8210 #endif
8212 /* [class.conv.ctor]
8214 A constructor declared without the function-specifier
8215 explicit that can be called with a single parameter
8216 specifies a conversion from the type of its first
8217 parameter to the type of its class. Such a constructor
8218 is called a converting constructor. */
8219 if (explicitp == 2)
8220 DECL_NONCONVERTING_P (decl) = 1;
8221 else if (DECL_CONSTRUCTOR_P (decl))
8223 /* The constructor can be called with exactly one
8224 parameter if there is at least one parameter, and
8225 any subsequent parameters have default arguments.
8226 Ignore any compiler-added parms. */
8227 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8229 if (arg_types == void_list_node
8230 || (arg_types
8231 && TREE_CHAIN (arg_types)
8232 && TREE_CHAIN (arg_types) != void_list_node
8233 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8234 DECL_NONCONVERTING_P (decl) = 1;
8237 else if (TREE_CODE (type) == METHOD_TYPE)
8239 /* We only get here for friend declarations of
8240 members of other classes. */
8241 /* All method decls are public, so tell grokfndecl to set
8242 TREE_PUBLIC, also. */
8243 decl = grokfndecl (ctype, type,
8244 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8245 ? unqualified_id : dname,
8246 parms,
8247 unqualified_id,
8248 virtualp, flags, quals, raises,
8249 friendp ? -1 : 0, friendp, 1, 0, sfk,
8250 funcdef_flag, template_count, in_namespace,
8251 attrlist);
8252 if (decl == NULL_TREE)
8253 return NULL_TREE;
8255 else if (!staticp && !dependent_type_p (type)
8256 && !COMPLETE_TYPE_P (complete_type (type))
8257 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8259 if (unqualified_id)
8260 error ("field %qD has incomplete type", unqualified_id);
8261 else
8262 error ("name %qT has incomplete type", type);
8264 /* If we're instantiating a template, tell them which
8265 instantiation made the field's type be incomplete. */
8266 if (current_class_type
8267 && TYPE_NAME (current_class_type)
8268 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8269 && declspecs->type
8270 && declspecs->type == type)
8271 error (" in instantiation of template %qT",
8272 current_class_type);
8274 type = error_mark_node;
8275 decl = NULL_TREE;
8277 else
8279 if (friendp)
8281 error ("%qE is neither function nor member function; "
8282 "cannot be declared friend", unqualified_id);
8283 friendp = 0;
8285 decl = NULL_TREE;
8288 if (friendp)
8290 /* Friends are treated specially. */
8291 if (ctype == current_class_type)
8292 ; /* We already issued a pedwarn. */
8293 else if (decl && DECL_NAME (decl))
8295 if (template_class_depth (current_class_type) == 0)
8297 decl = check_explicit_specialization
8298 (unqualified_id, decl, template_count,
8299 2 * funcdef_flag + 4);
8300 if (decl == error_mark_node)
8301 return error_mark_node;
8304 decl = do_friend (ctype, unqualified_id, decl,
8305 *attrlist, flags, quals, funcdef_flag);
8306 return decl;
8308 else
8309 return void_type_node;
8312 /* Structure field. It may not be a function, except for C++. */
8314 if (decl == NULL_TREE)
8316 if (initialized)
8318 if (!staticp)
8320 /* An attempt is being made to initialize a non-static
8321 member. But, from [class.mem]:
8323 4 A member-declarator can contain a
8324 constant-initializer only if it declares a static
8325 member (_class.static_) of integral or enumeration
8326 type, see _class.static.data_.
8328 This used to be relatively common practice, but
8329 the rest of the compiler does not correctly
8330 handle the initialization unless the member is
8331 static so we make it static below. */
8332 pedwarn ("ISO C++ forbids initialization of member %qD",
8333 unqualified_id);
8334 pedwarn ("making %qD static", unqualified_id);
8335 staticp = 1;
8338 if (uses_template_parms (type))
8339 /* We'll check at instantiation time. */
8341 else if (check_static_variable_definition (unqualified_id,
8342 type))
8343 /* If we just return the declaration, crashes
8344 will sometimes occur. We therefore return
8345 void_type_node, as if this was a friend
8346 declaration, to cause callers to completely
8347 ignore this declaration. */
8348 return void_type_node;
8351 if (staticp)
8353 /* C++ allows static class members. All other work
8354 for this is done by grokfield. */
8355 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8356 set_linkage_for_static_data_member (decl);
8357 /* Even if there is an in-class initialization, DECL
8358 is considered undefined until an out-of-class
8359 definition is provided. */
8360 DECL_EXTERNAL (decl) = 1;
8362 if (thread_p)
8364 if (targetm.have_tls)
8365 DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8366 else
8367 /* A mere warning is sure to result in improper
8368 semantics at runtime. Don't bother to allow this to
8369 compile. */
8370 error ("thread-local storage not supported for this target");
8373 else
8375 decl = build_decl (FIELD_DECL, unqualified_id, type);
8376 DECL_NONADDRESSABLE_P (decl) = bitfield;
8377 if (storage_class == sc_mutable)
8379 DECL_MUTABLE_P (decl) = 1;
8380 storage_class = sc_none;
8384 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8385 inlinep, friendp, raises != NULL_TREE);
8388 else if (TREE_CODE (type) == FUNCTION_TYPE
8389 || TREE_CODE (type) == METHOD_TYPE)
8391 tree original_name;
8392 int publicp = 0;
8394 if (!unqualified_id)
8395 return NULL_TREE;
8397 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8398 original_name = dname;
8399 else
8400 original_name = unqualified_id;
8402 if (storage_class == sc_auto)
8403 error ("storage class %<auto%> invalid for function %qs", name);
8404 else if (storage_class == sc_register)
8405 error ("storage class %<register%> invalid for function %qs", name);
8406 else if (thread_p)
8407 error ("storage class %<__thread%> invalid for function %qs", name);
8409 /* Function declaration not at top level.
8410 Storage classes other than `extern' are not allowed
8411 and `extern' makes no difference. */
8412 if (! toplevel_bindings_p ()
8413 && (storage_class == sc_static
8414 || declspecs->specs[(int)ds_inline])
8415 && pedantic)
8417 if (storage_class == sc_static)
8418 pedwarn ("%<static%> specified invalid for function %qs "
8419 "declared out of global scope", name);
8420 else
8421 pedwarn ("%<inline%> specifier invalid for function %qs "
8422 "declared out of global scope", name);
8425 if (ctype == NULL_TREE)
8427 if (virtualp)
8429 error ("virtual non-class function %qs", name);
8430 virtualp = 0;
8433 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8434 && !NEW_DELETE_OPNAME_P (original_name))
8435 type = build_method_type_directly (ctype,
8436 TREE_TYPE (type),
8437 TYPE_ARG_TYPES (type));
8439 /* Record presence of `static'. */
8440 publicp = (ctype != NULL_TREE
8441 || storage_class == sc_extern
8442 || storage_class != sc_static);
8444 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8445 virtualp, flags, quals, raises,
8446 1, friendp,
8447 publicp, inlinep, sfk, funcdef_flag,
8448 template_count, in_namespace, attrlist);
8449 if (decl == NULL_TREE)
8450 return NULL_TREE;
8452 if (staticp == 1)
8454 int invalid_static = 0;
8456 /* Don't allow a static member function in a class, and forbid
8457 declaring main to be static. */
8458 if (TREE_CODE (type) == METHOD_TYPE)
8460 pedwarn ("cannot declare member function %qD to have "
8461 "static linkage", decl);
8462 invalid_static = 1;
8464 else if (current_function_decl)
8466 /* FIXME need arm citation */
8467 error ("cannot declare static function inside another function");
8468 invalid_static = 1;
8471 if (invalid_static)
8473 staticp = 0;
8474 storage_class = sc_none;
8478 else
8480 /* It's a variable. */
8482 /* An uninitialized decl with `extern' is a reference. */
8483 decl = grokvardecl (type, unqualified_id,
8484 declspecs,
8485 initialized,
8486 (type_quals & TYPE_QUAL_CONST) != 0,
8487 ctype ? ctype : in_namespace);
8488 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8489 inlinep, friendp, raises != NULL_TREE);
8491 if (ctype)
8493 DECL_CONTEXT (decl) = ctype;
8494 if (staticp == 1)
8496 pedwarn ("%<static%> may not be used when defining "
8497 "(as opposed to declaring) a static data member");
8498 staticp = 0;
8499 storage_class = sc_none;
8501 if (storage_class == sc_register && TREE_STATIC (decl))
8503 error ("static member %qD declared %<register%>", decl);
8504 storage_class = sc_none;
8506 if (storage_class == sc_extern && pedantic)
8508 pedwarn ("cannot explicitly declare member %q#D to have "
8509 "extern linkage",
8510 decl);
8511 storage_class = sc_none;
8516 /* Record `register' declaration for warnings on &
8517 and in case doing stupid register allocation. */
8519 if (storage_class == sc_register)
8520 DECL_REGISTER (decl) = 1;
8521 else if (storage_class == sc_extern)
8522 DECL_THIS_EXTERN (decl) = 1;
8523 else if (storage_class == sc_static)
8524 DECL_THIS_STATIC (decl) = 1;
8526 /* Record constancy and volatility. There's no need to do this
8527 when processing a template; we'll do this for the instantiated
8528 declaration based on the type of DECL. */
8529 if (!processing_template_decl)
8530 cp_apply_type_quals_to_decl (type_quals, decl);
8532 return decl;
8536 /* Subroutine of start_function. Ensure that each of the parameter
8537 types (as listed in PARMS) is complete, as is required for a
8538 function definition. */
8540 static void
8541 require_complete_types_for_parms (tree parms)
8543 for (; parms; parms = TREE_CHAIN (parms))
8545 if (dependent_type_p (TREE_TYPE (parms)))
8546 continue;
8547 if (!VOID_TYPE_P (TREE_TYPE (parms))
8548 && complete_type_or_else (TREE_TYPE (parms), parms))
8550 relayout_decl (parms);
8551 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8553 else
8554 /* grokparms or complete_type_or_else will have already issued
8555 an error. */
8556 TREE_TYPE (parms) = error_mark_node;
8560 /* Returns nonzero if T is a local variable. */
8563 local_variable_p (tree t)
8565 if ((TREE_CODE (t) == VAR_DECL
8566 /* A VAR_DECL with a context that is a _TYPE is a static data
8567 member. */
8568 && !TYPE_P (CP_DECL_CONTEXT (t))
8569 /* Any other non-local variable must be at namespace scope. */
8570 && !DECL_NAMESPACE_SCOPE_P (t))
8571 || (TREE_CODE (t) == PARM_DECL))
8572 return 1;
8574 return 0;
8577 /* Returns nonzero if T is an automatic local variable or a label.
8578 (These are the declarations that need to be remapped when the code
8579 containing them is duplicated.) */
8582 nonstatic_local_decl_p (tree t)
8584 return ((local_variable_p (t) && !TREE_STATIC (t))
8585 || TREE_CODE (t) == LABEL_DECL
8586 || TREE_CODE (t) == RESULT_DECL);
8589 /* Like local_variable_p, but suitable for use as a tree-walking
8590 function. */
8592 static tree
8593 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8594 void *data ATTRIBUTE_UNUSED)
8596 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8597 return *tp;
8598 else if (TYPE_P (*tp))
8599 *walk_subtrees = 0;
8601 return NULL_TREE;
8605 /* Check that ARG, which is a default-argument expression for a
8606 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8607 something goes wrong. DECL may also be a _TYPE node, rather than a
8608 DECL, if there is no DECL available. */
8610 tree
8611 check_default_argument (tree decl, tree arg)
8613 tree var;
8614 tree decl_type;
8616 if (TREE_CODE (arg) == DEFAULT_ARG)
8617 /* We get a DEFAULT_ARG when looking at an in-class declaration
8618 with a default argument. Ignore the argument for now; we'll
8619 deal with it after the class is complete. */
8620 return arg;
8622 if (TYPE_P (decl))
8624 decl_type = decl;
8625 decl = NULL_TREE;
8627 else
8628 decl_type = TREE_TYPE (decl);
8630 if (arg == error_mark_node
8631 || decl == error_mark_node
8632 || TREE_TYPE (arg) == error_mark_node
8633 || decl_type == error_mark_node)
8634 /* Something already went wrong. There's no need to check
8635 further. */
8636 return error_mark_node;
8638 /* [dcl.fct.default]
8640 A default argument expression is implicitly converted to the
8641 parameter type. */
8642 if (!TREE_TYPE (arg)
8643 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8645 if (decl)
8646 error ("default argument for %q#D has type %qT",
8647 decl, TREE_TYPE (arg));
8648 else
8649 error ("default argument for parameter of type %qT has type %qT",
8650 decl_type, TREE_TYPE (arg));
8652 return error_mark_node;
8655 /* [dcl.fct.default]
8657 Local variables shall not be used in default argument
8658 expressions.
8660 The keyword `this' shall not be used in a default argument of a
8661 member function. */
8662 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8663 NULL);
8664 if (var)
8666 error ("default argument %qE uses local variable %qD", arg, var);
8667 return error_mark_node;
8670 /* All is well. */
8671 return arg;
8674 /* Decode the list of parameter types for a function type.
8675 Given the list of things declared inside the parens,
8676 return a list of types.
8678 If this parameter does not end with an ellipsis, we append
8679 void_list_node.
8681 *PARMS is set to the chain of PARM_DECLs created. */
8683 static tree
8684 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8686 tree result = NULL_TREE;
8687 tree decls = NULL_TREE;
8688 int ellipsis = !first_parm || first_parm->ellipsis_p;
8689 cp_parameter_declarator *parm;
8690 int any_error = 0;
8692 for (parm = first_parm; parm != NULL; parm = parm->next)
8694 tree type = NULL_TREE;
8695 tree init = parm->default_argument;
8696 tree attrs;
8697 tree decl;
8699 if (parm == no_parameters)
8700 break;
8702 attrs = parm->decl_specifiers.attributes;
8703 parm->decl_specifiers.attributes = NULL_TREE;
8704 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8705 PARM, init != NULL_TREE, &attrs);
8706 if (! decl || TREE_TYPE (decl) == error_mark_node)
8707 continue;
8709 if (attrs)
8710 cplus_decl_attributes (&decl, attrs, 0);
8712 type = TREE_TYPE (decl);
8713 if (VOID_TYPE_P (type))
8715 if (same_type_p (type, void_type_node)
8716 && DECL_SELF_REFERENCE_P (type)
8717 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8718 /* this is a parmlist of `(void)', which is ok. */
8719 break;
8720 cxx_incomplete_type_error (decl, type);
8721 /* It's not a good idea to actually create parameters of
8722 type `void'; other parts of the compiler assume that a
8723 void type terminates the parameter list. */
8724 type = error_mark_node;
8725 TREE_TYPE (decl) = error_mark_node;
8728 if (type != error_mark_node)
8730 /* Top-level qualifiers on the parameters are
8731 ignored for function types. */
8732 type = cp_build_qualified_type (type, 0);
8733 if (TREE_CODE (type) == METHOD_TYPE)
8735 error ("parameter %qD invalidly declared method type", decl);
8736 type = build_pointer_type (type);
8737 TREE_TYPE (decl) = type;
8739 else if (abstract_virtuals_error (decl, type))
8740 any_error = 1; /* Seems like a good idea. */
8741 else if (POINTER_TYPE_P (type))
8743 /* [dcl.fct]/6, parameter types cannot contain pointers
8744 (references) to arrays of unknown bound. */
8745 tree t = TREE_TYPE (type);
8746 int ptr = TYPE_PTR_P (type);
8748 while (1)
8750 if (TYPE_PTR_P (t))
8751 ptr = 1;
8752 else if (TREE_CODE (t) != ARRAY_TYPE)
8753 break;
8754 else if (!TYPE_DOMAIN (t))
8755 break;
8756 t = TREE_TYPE (t);
8758 if (TREE_CODE (t) == ARRAY_TYPE)
8759 error ("parameter %qD includes %s to array of unknown "
8760 "bound %qT",
8761 decl, ptr ? "pointer" : "reference", t);
8764 if (any_error)
8765 init = NULL_TREE;
8766 else if (init && !processing_template_decl)
8767 init = check_default_argument (decl, init);
8770 TREE_CHAIN (decl) = decls;
8771 decls = decl;
8772 result = tree_cons (init, type, result);
8774 decls = nreverse (decls);
8775 result = nreverse (result);
8776 if (!ellipsis)
8777 result = chainon (result, void_list_node);
8778 *parms = decls;
8780 return result;
8784 /* D is a constructor or overloaded `operator='.
8786 Let T be the class in which D is declared. Then, this function
8787 returns:
8789 -1 if D's is an ill-formed constructor or copy assignment operator
8790 whose first parameter is of type `T'.
8791 0 if D is not a copy constructor or copy assignment
8792 operator.
8793 1 if D is a copy constructor or copy assignment operator whose
8794 first parameter is a reference to const qualified T.
8795 2 if D is a copy constructor or copy assignment operator whose
8796 first parameter is a reference to non-const qualified T.
8798 This function can be used as a predicate. Positive values indicate
8799 a copy constructor and nonzero values indicate a copy assignment
8800 operator. */
8803 copy_fn_p (tree d)
8805 tree args;
8806 tree arg_type;
8807 int result = 1;
8809 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8811 if (DECL_TEMPLATE_INFO (d)
8812 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8813 /* Instantiations of template member functions are never copy
8814 functions. Note that member functions of templated classes are
8815 represented as template functions internally, and we must
8816 accept those as copy functions. */
8817 return 0;
8819 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8820 if (!args)
8821 return 0;
8823 arg_type = TREE_VALUE (args);
8825 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8827 /* Pass by value copy assignment operator. */
8828 result = -1;
8830 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8831 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8833 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8834 result = 2;
8836 else
8837 return 0;
8839 args = TREE_CHAIN (args);
8841 if (args && args != void_list_node && !TREE_PURPOSE (args))
8842 /* There are more non-optional args. */
8843 return 0;
8845 return result;
8848 /* Remember any special properties of member function DECL. */
8850 void grok_special_member_properties (tree decl)
8852 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8853 ; /* Not special. */
8854 else if (DECL_CONSTRUCTOR_P (decl))
8856 int ctor = copy_fn_p (decl);
8858 if (ctor > 0)
8860 /* [class.copy]
8862 A non-template constructor for class X is a copy
8863 constructor if its first parameter is of type X&, const
8864 X&, volatile X& or const volatile X&, and either there
8865 are no other parameters or else all other parameters have
8866 default arguments. */
8867 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8868 if (ctor > 1)
8869 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8871 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8872 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8874 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8876 /* [class.copy]
8878 A non-template assignment operator for class X is a copy
8879 assignment operator if its parameter is of type X, X&, const
8880 X&, volatile X& or const volatile X&. */
8882 int assop = copy_fn_p (decl);
8884 if (assop)
8886 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8887 if (assop != 1)
8888 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8893 /* Check a constructor DECL has the correct form. Complains
8894 if the class has a constructor of the form X(X). */
8897 grok_ctor_properties (tree ctype, tree decl)
8899 int ctor_parm = copy_fn_p (decl);
8901 if (ctor_parm < 0)
8903 /* [class.copy]
8905 A declaration of a constructor for a class X is ill-formed if
8906 its first parameter is of type (optionally cv-qualified) X
8907 and either there are no other parameters or else all other
8908 parameters have default arguments.
8910 We *don't* complain about member template instantiations that
8911 have this form, though; they can occur as we try to decide
8912 what constructor to use during overload resolution. Since
8913 overload resolution will never prefer such a constructor to
8914 the non-template copy constructor (which is either explicitly
8915 or implicitly defined), there's no need to worry about their
8916 existence. Theoretically, they should never even be
8917 instantiated, but that's hard to forestall. */
8918 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8919 ctype, ctype);
8920 return 0;
8923 return 1;
8926 /* An operator with this code is unary, but can also be binary. */
8928 static int
8929 ambi_op_p (enum tree_code code)
8931 return (code == INDIRECT_REF
8932 || code == ADDR_EXPR
8933 || code == UNARY_PLUS_EXPR
8934 || code == NEGATE_EXPR
8935 || code == PREINCREMENT_EXPR
8936 || code == PREDECREMENT_EXPR);
8939 /* An operator with this name can only be unary. */
8941 static int
8942 unary_op_p (enum tree_code code)
8944 return (code == TRUTH_NOT_EXPR
8945 || code == BIT_NOT_EXPR
8946 || code == COMPONENT_REF
8947 || code == TYPE_EXPR);
8950 /* DECL is a declaration for an overloaded operator. If COMPLAIN is true,
8951 errors are issued for invalid declarations. */
8953 void
8954 grok_op_properties (tree decl, bool complain)
8956 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8957 tree argtype;
8958 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8959 tree name = DECL_NAME (decl);
8960 enum tree_code operator_code;
8961 int arity;
8962 bool ellipsis_p;
8963 tree class_type;
8965 /* Count the number of arguments and check for ellipsis. */
8966 for (argtype = argtypes, arity = 0;
8967 argtype && argtype != void_list_node;
8968 argtype = TREE_CHAIN (argtype))
8969 ++arity;
8970 ellipsis_p = !argtype;
8972 class_type = DECL_CONTEXT (decl);
8973 if (class_type && !CLASS_TYPE_P (class_type))
8974 class_type = NULL_TREE;
8976 if (DECL_CONV_FN_P (decl))
8977 operator_code = TYPE_EXPR;
8978 else
8981 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8982 if (ansi_opname (CODE) == name) \
8984 operator_code = (CODE); \
8985 break; \
8987 else if (ansi_assopname (CODE) == name) \
8989 operator_code = (CODE); \
8990 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8991 break; \
8994 #include "operators.def"
8995 #undef DEF_OPERATOR
8997 gcc_unreachable ();
8999 while (0);
9000 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9001 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9003 if (class_type)
9004 switch (operator_code)
9006 case NEW_EXPR:
9007 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9008 break;
9010 case DELETE_EXPR:
9011 TYPE_GETS_DELETE (class_type) |= 1;
9012 break;
9014 case VEC_NEW_EXPR:
9015 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9016 break;
9018 case VEC_DELETE_EXPR:
9019 TYPE_GETS_DELETE (class_type) |= 2;
9020 break;
9022 default:
9023 break;
9026 /* [basic.std.dynamic.allocation]/1:
9028 A program is ill-formed if an allocation function is declared
9029 in a namespace scope other than global scope or declared static
9030 in global scope.
9032 The same also holds true for deallocation functions. */
9033 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9034 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9036 if (DECL_NAMESPACE_SCOPE_P (decl))
9038 if (CP_DECL_CONTEXT (decl) != global_namespace)
9039 error ("%qD may not be declared within a namespace", decl);
9040 else if (!TREE_PUBLIC (decl))
9041 error ("%qD may not be declared as static", decl);
9045 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9046 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9047 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9048 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9049 else
9051 /* An operator function must either be a non-static member function
9052 or have at least one parameter of a class, a reference to a class,
9053 an enumeration, or a reference to an enumeration. 13.4.0.6 */
9054 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9056 if (operator_code == TYPE_EXPR
9057 || operator_code == CALL_EXPR
9058 || operator_code == COMPONENT_REF
9059 || operator_code == ARRAY_REF
9060 || operator_code == NOP_EXPR)
9062 error ("%qD must be a nonstatic member function", decl);
9063 return;
9065 else
9067 tree p;
9069 if (DECL_STATIC_FUNCTION_P (decl))
9071 error ("%qD must be either a non-static member "
9072 "function or a non-member function", decl);
9073 return;
9076 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9078 tree arg = non_reference (TREE_VALUE (p));
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 /* Determine the ELF visibility attribute for the function. We must
10424 not do this before calling "pushdecl", as we must allow
10425 "duplicate_decls" to merge any attributes appropriately. */
10426 if (!DECL_CLONED_FUNCTION_P (decl1))
10427 determine_visibility (decl1);
10429 /* Reset these in case the call to pushdecl changed them. */
10430 current_function_decl = decl1;
10431 cfun->decl = decl1;
10433 /* If we are (erroneously) defining a function that we have already
10434 defined before, wipe out what we knew before. */
10435 if (!DECL_PENDING_INLINE_P (decl1))
10436 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10438 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10440 /* We know that this was set up by `grokclassfn'. We do not
10441 wait until `store_parm_decls', since evil parse errors may
10442 never get us to that point. Here we keep the consistency
10443 between `current_class_type' and `current_class_ptr'. */
10444 tree t = DECL_ARGUMENTS (decl1);
10446 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10447 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10449 cp_function_chain->x_current_class_ref
10450 = build_indirect_ref (t, NULL);
10451 cp_function_chain->x_current_class_ptr = t;
10453 /* Constructors and destructors need to know whether they're "in
10454 charge" of initializing virtual base classes. */
10455 t = TREE_CHAIN (t);
10456 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10458 current_in_charge_parm = t;
10459 t = TREE_CHAIN (t);
10461 if (DECL_HAS_VTT_PARM_P (decl1))
10463 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10464 current_vtt_parm = t;
10468 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10469 /* Implicitly-defined methods (like the
10470 destructor for a class in which no destructor
10471 is explicitly declared) must not be defined
10472 until their definition is needed. So, we
10473 ignore interface specifications for
10474 compiler-generated functions. */
10475 && !DECL_ARTIFICIAL (decl1));
10477 if (DECL_INTERFACE_KNOWN (decl1))
10479 tree ctx = decl_function_context (decl1);
10481 if (DECL_NOT_REALLY_EXTERN (decl1))
10482 DECL_EXTERNAL (decl1) = 0;
10484 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10485 && TREE_PUBLIC (ctx))
10486 /* This is a function in a local class in an extern inline
10487 function. */
10488 comdat_linkage (decl1);
10490 /* If this function belongs to an interface, it is public.
10491 If it belongs to someone else's interface, it is also external.
10492 This only affects inlines and template instantiations. */
10493 else if (!finfo->interface_unknown && honor_interface)
10495 if (DECL_DECLARED_INLINE_P (decl1)
10496 || DECL_TEMPLATE_INSTANTIATION (decl1)
10497 || processing_template_decl)
10499 DECL_EXTERNAL (decl1)
10500 = (finfo->interface_only
10501 || (DECL_DECLARED_INLINE_P (decl1)
10502 && ! flag_implement_inlines
10503 && !DECL_VINDEX (decl1)));
10505 /* For WIN32 we also want to put these in linkonce sections. */
10506 maybe_make_one_only (decl1);
10508 else
10509 DECL_EXTERNAL (decl1) = 0;
10510 DECL_INTERFACE_KNOWN (decl1) = 1;
10511 /* If this function is in an interface implemented in this file,
10512 make sure that the backend knows to emit this function
10513 here. */
10514 if (!DECL_EXTERNAL (decl1))
10515 mark_needed (decl1);
10517 else if (finfo->interface_unknown && finfo->interface_only
10518 && honor_interface)
10520 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10521 interface, we will have both finfo->interface_unknown and
10522 finfo->interface_only set. In that case, we don't want to
10523 use the normal heuristics because someone will supply a
10524 #pragma implementation elsewhere, and deducing it here would
10525 produce a conflict. */
10526 comdat_linkage (decl1);
10527 DECL_EXTERNAL (decl1) = 0;
10528 DECL_INTERFACE_KNOWN (decl1) = 1;
10529 DECL_DEFER_OUTPUT (decl1) = 1;
10531 else
10533 /* This is a definition, not a reference.
10534 So clear DECL_EXTERNAL. */
10535 DECL_EXTERNAL (decl1) = 0;
10537 if ((DECL_DECLARED_INLINE_P (decl1)
10538 || DECL_TEMPLATE_INSTANTIATION (decl1))
10539 && ! DECL_INTERFACE_KNOWN (decl1)
10540 /* Don't try to defer nested functions for now. */
10541 && ! decl_function_context (decl1))
10542 DECL_DEFER_OUTPUT (decl1) = 1;
10543 else
10544 DECL_INTERFACE_KNOWN (decl1) = 1;
10547 begin_scope (sk_function_parms, decl1);
10549 ++function_depth;
10551 if (DECL_DESTRUCTOR_P (decl1)
10552 || (DECL_CONSTRUCTOR_P (decl1)
10553 && targetm.cxx.cdtor_returns_this ()))
10555 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10556 DECL_CONTEXT (cdtor_label) = current_function_decl;
10559 start_fname_decls ();
10561 store_parm_decls (current_function_parms);
10565 /* Like start_preparsed_function, except that instead of a
10566 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10568 Returns 1 on success. If the DECLARATOR is not suitable for a function
10569 (it defines a datum instead), we return 0, which tells
10570 yyparse to report a parse error. */
10573 start_function (cp_decl_specifier_seq *declspecs,
10574 const cp_declarator *declarator,
10575 tree attrs)
10577 tree decl1;
10579 if (have_extern_spec)
10581 declspecs->storage_class = sc_extern;
10582 /* This should only be done once on the outermost decl. */
10583 have_extern_spec = false;
10586 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10587 /* If the declarator is not suitable for a function definition,
10588 cause a syntax error. */
10589 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10590 return 0;
10592 if (DECL_MAIN_P (decl1))
10593 /* main must return int. grokfndecl should have corrected it
10594 (and issued a diagnostic) if the user got it wrong. */
10595 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10596 integer_type_node));
10598 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10600 return 1;
10603 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10604 FN. */
10606 static bool
10607 use_eh_spec_block (tree fn)
10609 return (flag_exceptions && flag_enforce_eh_specs
10610 && !processing_template_decl
10611 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10612 /* We insert the EH_SPEC_BLOCK only in the original
10613 function; then, it is copied automatically to the
10614 clones. */
10615 && !DECL_CLONED_FUNCTION_P (fn)
10616 /* Implicitly-generated constructors and destructors have
10617 exception specifications. However, those specifications
10618 are the union of the possible exceptions specified by the
10619 constructors/destructors for bases and members, so no
10620 unallowed exception will ever reach this function. By
10621 not creating the EH_SPEC_BLOCK we save a little memory,
10622 and we avoid spurious warnings about unreachable
10623 code. */
10624 && !DECL_ARTIFICIAL (fn));
10627 /* Store the parameter declarations into the current function declaration.
10628 This is called after parsing the parameter declarations, before
10629 digesting the body of the function.
10631 Also install to binding contour return value identifier, if any. */
10633 static void
10634 store_parm_decls (tree current_function_parms)
10636 tree fndecl = current_function_decl;
10637 tree parm;
10639 /* This is a chain of any other decls that came in among the parm
10640 declarations. If a parm is declared with enum {foo, bar} x;
10641 then CONST_DECLs for foo and bar are put here. */
10642 tree nonparms = NULL_TREE;
10644 if (current_function_parms)
10646 /* This case is when the function was defined with an ANSI prototype.
10647 The parms already have decls, so we need not do anything here
10648 except record them as in effect
10649 and complain if any redundant old-style parm decls were written. */
10651 tree specparms = current_function_parms;
10652 tree next;
10654 /* Must clear this because it might contain TYPE_DECLs declared
10655 at class level. */
10656 current_binding_level->names = NULL;
10658 /* If we're doing semantic analysis, then we'll call pushdecl
10659 for each of these. We must do them in reverse order so that
10660 they end in the correct forward order. */
10661 specparms = nreverse (specparms);
10663 for (parm = specparms; parm; parm = next)
10665 next = TREE_CHAIN (parm);
10666 if (TREE_CODE (parm) == PARM_DECL)
10668 if (DECL_NAME (parm) == NULL_TREE
10669 || TREE_CODE (parm) != VOID_TYPE)
10670 pushdecl (parm);
10671 else
10672 error ("parameter %qD declared void", parm);
10674 else
10676 /* If we find an enum constant or a type tag,
10677 put it aside for the moment. */
10678 TREE_CHAIN (parm) = NULL_TREE;
10679 nonparms = chainon (nonparms, parm);
10683 /* Get the decls in their original chain order and record in the
10684 function. This is all and only the PARM_DECLs that were
10685 pushed into scope by the loop above. */
10686 DECL_ARGUMENTS (fndecl) = getdecls ();
10688 else
10689 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10691 /* Now store the final chain of decls for the arguments
10692 as the decl-chain of the current lexical scope.
10693 Put the enumerators in as well, at the front so that
10694 DECL_ARGUMENTS is not modified. */
10695 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10697 if (use_eh_spec_block (current_function_decl))
10698 current_eh_spec_block = begin_eh_spec_block ();
10702 /* We have finished doing semantic analysis on DECL, but have not yet
10703 generated RTL for its body. Save away our current state, so that
10704 when we want to generate RTL later we know what to do. */
10706 static void
10707 save_function_data (tree decl)
10709 struct language_function *f;
10711 /* Save the language-specific per-function data so that we can
10712 get it back when we really expand this function. */
10713 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10715 /* Make a copy. */
10716 f = GGC_NEW (struct language_function);
10717 memcpy (f, cp_function_chain, sizeof (struct language_function));
10718 DECL_SAVED_FUNCTION_DATA (decl) = f;
10720 /* Clear out the bits we don't need. */
10721 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10722 f->bindings = NULL;
10723 f->x_local_names = NULL;
10727 /* Set the return value of the constructor (if present). */
10729 static void
10730 finish_constructor_body (void)
10732 tree val;
10733 tree exprstmt;
10735 if (targetm.cxx.cdtor_returns_this ())
10737 /* Any return from a constructor will end up here. */
10738 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10740 val = DECL_ARGUMENTS (current_function_decl);
10741 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10742 DECL_RESULT (current_function_decl), val);
10743 /* Return the address of the object. */
10744 exprstmt = build_stmt (RETURN_EXPR, val);
10745 add_stmt (exprstmt);
10749 /* Do all the processing for the beginning of a destructor; set up the
10750 vtable pointers and cleanups for bases and members. */
10752 static void
10753 begin_destructor_body (void)
10755 tree compound_stmt;
10757 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10758 issued an error message. We still want to try to process the
10759 body of the function, but initialize_vtbl_ptrs will crash if
10760 TYPE_BINFO is NULL. */
10761 if (COMPLETE_TYPE_P (current_class_type))
10763 compound_stmt = begin_compound_stmt (0);
10764 /* Make all virtual function table pointers in non-virtual base
10765 classes point to CURRENT_CLASS_TYPE's virtual function
10766 tables. */
10767 initialize_vtbl_ptrs (current_class_ptr);
10768 finish_compound_stmt (compound_stmt);
10770 /* And insert cleanups for our bases and members so that they
10771 will be properly destroyed if we throw. */
10772 push_base_cleanups ();
10776 /* At the end of every destructor we generate code to delete the object if
10777 necessary. Do that now. */
10779 static void
10780 finish_destructor_body (void)
10782 tree exprstmt;
10784 /* Any return from a destructor will end up here; that way all base
10785 and member cleanups will be run when the function returns. */
10786 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10788 /* In a virtual destructor, we must call delete. */
10789 if (DECL_VIRTUAL_P (current_function_decl))
10791 tree if_stmt;
10792 tree virtual_size = cxx_sizeof (current_class_type);
10794 /* [class.dtor]
10796 At the point of definition of a virtual destructor (including
10797 an implicit definition), non-placement operator delete shall
10798 be looked up in the scope of the destructor's class and if
10799 found shall be accessible and unambiguous. */
10800 exprstmt = build_op_delete_call
10801 (DELETE_EXPR, current_class_ptr, virtual_size,
10802 /*global_p=*/false, NULL_TREE);
10804 if_stmt = begin_if_stmt ();
10805 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10806 current_in_charge_parm,
10807 integer_one_node),
10808 if_stmt);
10809 finish_expr_stmt (exprstmt);
10810 finish_then_clause (if_stmt);
10811 finish_if_stmt (if_stmt);
10814 if (targetm.cxx.cdtor_returns_this ())
10816 tree val;
10818 val = DECL_ARGUMENTS (current_function_decl);
10819 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10820 DECL_RESULT (current_function_decl), val);
10821 /* Return the address of the object. */
10822 exprstmt = build_stmt (RETURN_EXPR, val);
10823 add_stmt (exprstmt);
10827 /* Do the necessary processing for the beginning of a function body, which
10828 in this case includes member-initializers, but not the catch clauses of
10829 a function-try-block. Currently, this means opening a binding level
10830 for the member-initializers (in a ctor) and member cleanups (in a dtor). */
10832 tree
10833 begin_function_body (void)
10835 tree stmt;
10837 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10838 return NULL_TREE;
10840 if (processing_template_decl)
10841 /* Do nothing now. */;
10842 else
10843 /* Always keep the BLOCK node associated with the outermost pair of
10844 curly braces of a function. These are needed for correct
10845 operation of dwarfout.c. */
10846 keep_next_level (true);
10848 stmt = begin_compound_stmt (BCS_FN_BODY);
10850 if (processing_template_decl)
10851 /* Do nothing now. */;
10852 else if (DECL_DESTRUCTOR_P (current_function_decl))
10853 begin_destructor_body ();
10855 return stmt;
10858 /* Do the processing for the end of a function body. Currently, this means
10859 closing out the cleanups for fully-constructed bases and members, and in
10860 the case of the destructor, deleting the object if desired. Again, this
10861 is only meaningful for [cd]tors, since they are the only functions where
10862 there is a significant distinction between the main body and any
10863 function catch clauses. Handling, say, main() return semantics here
10864 would be wrong, as flowing off the end of a function catch clause for
10865 main() would also need to return 0. */
10867 void
10868 finish_function_body (tree compstmt)
10870 if (compstmt == NULL_TREE)
10871 return;
10873 /* Close the block. */
10874 finish_compound_stmt (compstmt);
10876 if (processing_template_decl)
10877 /* Do nothing now. */;
10878 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10879 finish_constructor_body ();
10880 else if (DECL_DESTRUCTOR_P (current_function_decl))
10881 finish_destructor_body ();
10884 /* Given a function, returns the BLOCK corresponding to the outermost level
10885 of curly braces, skipping the artificial block created for constructor
10886 initializers. */
10888 static tree
10889 outer_curly_brace_block (tree fndecl)
10891 tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
10892 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10893 /* Skip the artificial function body block. */
10894 block = BLOCK_SUBBLOCKS (block);
10895 return block;
10898 /* Finish up a function declaration and compile that function
10899 all the way to assembler language output. The free the storage
10900 for the function definition.
10902 FLAGS is a bitwise or of the following values:
10903 2 - INCLASS_INLINE
10904 We just finished processing the body of an in-class inline
10905 function definition. (This processing will have taken place
10906 after the class definition is complete.) */
10908 tree
10909 finish_function (int flags)
10911 tree fndecl = current_function_decl;
10912 tree fntype, ctype = NULL_TREE;
10913 int inclass_inline = (flags & 2) != 0;
10914 int nested;
10916 /* When we get some parse errors, we can end up without a
10917 current_function_decl, so cope. */
10918 if (fndecl == NULL_TREE)
10919 return error_mark_node;
10921 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10922 && DECL_VIRTUAL_P (fndecl)
10923 && !processing_template_decl)
10925 tree fnclass = DECL_CONTEXT (fndecl);
10926 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10927 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10930 nested = function_depth > 1;
10931 fntype = TREE_TYPE (fndecl);
10933 /* TREE_READONLY (fndecl) = 1;
10934 This caused &foo to be of type ptr-to-const-function
10935 which then got a warning when stored in a ptr-to-function variable. */
10937 gcc_assert (building_stmt_tree ());
10939 /* For a cloned function, we've already got all the code we need;
10940 there's no need to add any extra bits. */
10941 if (!DECL_CLONED_FUNCTION_P (fndecl))
10943 if (DECL_MAIN_P (current_function_decl))
10945 tree stmt;
10947 /* Make it so that `main' always returns 0 by default (or
10948 1 for VMS). */
10949 #if VMS_TARGET
10950 stmt = finish_return_stmt (integer_one_node);
10951 #else
10952 stmt = finish_return_stmt (integer_zero_node);
10953 #endif
10954 /* Hack. We don't want the middle-end to warn that this
10955 return is unreachable, so put the statement on the
10956 special line 0. */
10957 #ifdef USE_MAPPED_LOCATION
10958 SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10959 #else
10960 annotate_with_file_line (stmt, input_filename, 0);
10961 #endif
10964 if (use_eh_spec_block (current_function_decl))
10965 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10966 (TREE_TYPE (current_function_decl)),
10967 current_eh_spec_block);
10970 /* If we're saving up tree structure, tie off the function now. */
10971 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10973 finish_fname_decls ();
10975 /* If this function can't throw any exceptions, remember that. */
10976 if (!processing_template_decl
10977 && !cp_function_chain->can_throw
10978 && !flag_non_call_exceptions)
10979 TREE_NOTHROW (fndecl) = 1;
10981 /* This must come after expand_function_end because cleanups might
10982 have declarations (from inline functions) that need to go into
10983 this function's blocks. */
10985 /* If the current binding level isn't the outermost binding level
10986 for this function, either there is a bug, or we have experienced
10987 syntax errors and the statement tree is malformed. */
10988 if (current_binding_level->kind != sk_function_parms)
10990 /* Make sure we have already experienced errors. */
10991 gcc_assert (errorcount);
10993 /* Throw away the broken statement tree and extra binding
10994 levels. */
10995 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10997 while (current_binding_level->kind != sk_function_parms)
10999 if (current_binding_level->kind == sk_class)
11000 pop_nested_class ();
11001 else
11002 poplevel (0, 0, 0);
11005 poplevel (1, 0, 1);
11007 /* Statements should always be full-expressions at the outermost set
11008 of curly braces for a function. */
11009 gcc_assert (stmts_are_full_exprs_p ());
11011 /* Set up the named return value optimization, if we can. Candidate
11012 variables are selected in check_return_value. */
11013 if (current_function_return_value)
11015 tree r = current_function_return_value;
11016 tree outer;
11018 if (r != error_mark_node
11019 /* This is only worth doing for fns that return in memory--and
11020 simpler, since we don't have to worry about promoted modes. */
11021 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11022 /* Only allow this for variables declared in the outer scope of
11023 the function so we know that their lifetime always ends with a
11024 return; see g++.dg/opt/nrv6.C. We could be more flexible if
11025 we were to do this optimization in tree-ssa. */
11026 && (outer = outer_curly_brace_block (fndecl))
11027 && chain_member (r, BLOCK_VARS (outer)))
11028 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11030 current_function_return_value = NULL_TREE;
11033 /* Remember that we were in class scope. */
11034 if (current_class_name)
11035 ctype = current_class_type;
11037 /* Must mark the RESULT_DECL as being in this function. */
11038 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11040 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11041 to the FUNCTION_DECL node itself. */
11042 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11044 /* Save away current state, if appropriate. */
11045 if (!processing_template_decl)
11046 save_function_data (fndecl);
11048 /* Complain if there's just no return statement. */
11049 if (warn_return_type
11050 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11051 && !dependent_type_p (TREE_TYPE (fntype))
11052 && !current_function_returns_value && !current_function_returns_null
11053 /* Don't complain if we abort or throw. */
11054 && !current_function_returns_abnormally
11055 && !DECL_NAME (DECL_RESULT (fndecl))
11056 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
11057 inline function, as we might never be compiled separately. */
11058 && (DECL_INLINE (fndecl) || processing_template_decl)
11059 /* Structor return values (if any) are set by the compiler. */
11060 && !DECL_CONSTRUCTOR_P (fndecl)
11061 && !DECL_DESTRUCTOR_P (fndecl))
11062 warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11064 /* Store the end of the function, so that we get good line number
11065 info for the epilogue. */
11066 cfun->function_end_locus = input_location;
11068 /* Genericize before inlining. */
11069 if (!processing_template_decl)
11071 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11072 cp_genericize (fndecl);
11073 /* Clear out the bits we don't need. */
11074 f->x_current_class_ptr = NULL;
11075 f->x_current_class_ref = NULL;
11076 f->x_eh_spec_block = NULL;
11077 f->x_in_charge_parm = NULL;
11078 f->x_vtt_parm = NULL;
11079 f->x_return_value = NULL;
11080 f->bindings = NULL;
11082 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
11083 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11085 /* Clear out the bits we don't need. */
11086 local_names = NULL;
11088 /* We're leaving the context of this function, so zap cfun. It's still in
11089 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
11090 cfun = NULL;
11091 current_function_decl = NULL;
11093 /* If this is an in-class inline definition, we may have to pop the
11094 bindings for the template parameters that we added in
11095 maybe_begin_member_template_processing when start_function was
11096 called. */
11097 if (inclass_inline)
11098 maybe_end_member_template_processing ();
11100 /* Leave the scope of the class. */
11101 if (ctype)
11102 pop_nested_class ();
11104 --function_depth;
11106 /* Clean up. */
11107 if (! nested)
11108 /* Let the error reporting routines know that we're outside a
11109 function. For a nested function, this value is used in
11110 cxx_pop_function_context and then reset via pop_function_context. */
11111 current_function_decl = NULL_TREE;
11113 return fndecl;
11116 /* Create the FUNCTION_DECL for a function definition.
11117 DECLSPECS and DECLARATOR are the parts of the declaration;
11118 they describe the return type and the name of the function,
11119 but twisted together in a fashion that parallels the syntax of C.
11121 This function creates a binding context for the function body
11122 as well as setting up the FUNCTION_DECL in current_function_decl.
11124 Returns a FUNCTION_DECL on success.
11126 If the DECLARATOR is not suitable for a function (it defines a datum
11127 instead), we return 0, which tells yyparse to report a parse error.
11129 May return void_type_node indicating that this method is actually
11130 a friend. See grokfield for more details.
11132 Came here with a `.pushlevel' .
11134 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11135 CHANGES TO CODE IN `grokfield'. */
11137 tree
11138 start_method (cp_decl_specifier_seq *declspecs,
11139 const cp_declarator *declarator, tree attrlist)
11141 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11142 &attrlist);
11144 if (fndecl == error_mark_node)
11145 return error_mark_node;
11147 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11149 error ("invalid member function declaration");
11150 return error_mark_node;
11153 if (attrlist)
11154 cplus_decl_attributes (&fndecl, attrlist, 0);
11156 /* Pass friends other than inline friend functions back. */
11157 if (fndecl == void_type_node)
11158 return fndecl;
11160 if (DECL_IN_AGGR_P (fndecl))
11162 if (DECL_CONTEXT (fndecl)
11163 && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11164 error ("%qD is already defined in class %qT", fndecl,
11165 DECL_CONTEXT (fndecl));
11166 return error_mark_node;
11169 check_template_shadow (fndecl);
11171 DECL_DECLARED_INLINE_P (fndecl) = 1;
11172 if (flag_default_inline)
11173 DECL_INLINE (fndecl) = 1;
11175 /* We process method specializations in finish_struct_1. */
11176 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11178 fndecl = push_template_decl (fndecl);
11179 if (fndecl == error_mark_node)
11180 return fndecl;
11183 if (! DECL_FRIEND_P (fndecl))
11185 if (TREE_CHAIN (fndecl))
11187 fndecl = copy_node (fndecl);
11188 TREE_CHAIN (fndecl) = NULL_TREE;
11190 grok_special_member_properties (fndecl);
11193 finish_decl (fndecl, NULL_TREE, NULL_TREE);
11195 /* Make a place for the parms. */
11196 begin_scope (sk_function_parms, fndecl);
11198 DECL_IN_AGGR_P (fndecl) = 1;
11199 return fndecl;
11202 /* Go through the motions of finishing a function definition.
11203 We don't compile this method until after the whole class has
11204 been processed.
11206 FINISH_METHOD must return something that looks as though it
11207 came from GROKFIELD (since we are defining a method, after all).
11209 This is called after parsing the body of the function definition.
11210 STMTS is the chain of statements that makes up the function body.
11212 DECL is the ..._DECL that `start_method' provided. */
11214 tree
11215 finish_method (tree decl)
11217 tree fndecl = decl;
11218 tree old_initial;
11220 tree link;
11222 if (decl == void_type_node)
11223 return decl;
11225 old_initial = DECL_INITIAL (fndecl);
11227 /* Undo the level for the parms (from start_method).
11228 This is like poplevel, but it causes nothing to be
11229 saved. Saving information here confuses symbol-table
11230 output routines. Besides, this information will
11231 be correctly output when this method is actually
11232 compiled. */
11234 /* Clear out the meanings of the local variables of this level;
11235 also record in each decl which block it belongs to. */
11237 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11239 if (DECL_NAME (link) != NULL_TREE)
11240 pop_binding (DECL_NAME (link), link);
11241 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11242 DECL_CONTEXT (link) = NULL_TREE;
11245 poplevel (0, 0, 0);
11247 DECL_INITIAL (fndecl) = old_initial;
11249 /* We used to check if the context of FNDECL was different from
11250 current_class_type as another way to get inside here. This didn't work
11251 for String.cc in libg++. */
11252 if (DECL_FRIEND_P (fndecl))
11254 VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11255 fndecl);
11256 decl = void_type_node;
11259 return decl;
11263 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
11264 we can lay it out later, when and if its type becomes complete. */
11266 void
11267 maybe_register_incomplete_var (tree var)
11269 gcc_assert (TREE_CODE (var) == VAR_DECL);
11271 /* Keep track of variables with incomplete types. */
11272 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11273 && DECL_EXTERNAL (var))
11275 tree inner_type = TREE_TYPE (var);
11277 while (TREE_CODE (inner_type) == ARRAY_TYPE)
11278 inner_type = TREE_TYPE (inner_type);
11279 inner_type = TYPE_MAIN_VARIANT (inner_type);
11281 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11282 /* RTTI TD entries are created while defining the type_info. */
11283 || (TYPE_LANG_SPECIFIC (inner_type)
11284 && TYPE_BEING_DEFINED (inner_type)))
11285 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11289 /* Called when a class type (given by TYPE) is defined. If there are
11290 any existing VAR_DECLs whose type hsa been completed by this
11291 declaration, update them now. */
11293 void
11294 complete_vars (tree type)
11296 tree *list = &incomplete_vars;
11298 gcc_assert (CLASS_TYPE_P (type));
11299 while (*list)
11301 if (same_type_p (type, TREE_PURPOSE (*list)))
11303 tree var = TREE_VALUE (*list);
11304 tree type = TREE_TYPE (var);
11305 /* Complete the type of the variable. The VAR_DECL itself
11306 will be laid out in expand_expr. */
11307 complete_type (type);
11308 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11309 /* Remove this entry from the list. */
11310 *list = TREE_CHAIN (*list);
11312 else
11313 list = &TREE_CHAIN (*list);
11316 /* Check for pending declarations which may have abstract type. */
11317 complete_type_check_abstract (type);
11320 /* If DECL is of a type which needs a cleanup, build that cleanup
11321 here. */
11323 tree
11324 cxx_maybe_build_cleanup (tree decl)
11326 tree type = TREE_TYPE (decl);
11328 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11330 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11331 tree rval;
11332 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11333 && CLASSTYPE_VBASECLASSES (type));
11335 if (TREE_CODE (type) == ARRAY_TYPE)
11336 rval = decl;
11337 else
11339 cxx_mark_addressable (decl);
11340 rval = build_unary_op (ADDR_EXPR, decl, 0);
11343 /* Optimize for space over speed here. */
11344 if (!has_vbases || flag_expensive_optimizations)
11345 flags |= LOOKUP_NONVIRTUAL;
11347 rval = build_delete (TREE_TYPE (rval), rval,
11348 sfk_complete_destructor, flags, 0);
11350 return rval;
11352 return NULL_TREE;
11355 /* When a stmt has been parsed, this function is called. */
11357 void
11358 finish_stmt (void)
11362 /* DECL was originally constructed as a non-static member function,
11363 but turned out to be static. Update it accordingly. */
11365 void
11366 revert_static_member_fn (tree decl)
11368 tree tmp;
11369 tree function = TREE_TYPE (decl);
11370 tree args = TYPE_ARG_TYPES (function);
11372 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11373 != TYPE_UNQUALIFIED)
11374 error ("static member function %q#D declared with type qualifiers", decl);
11376 args = TREE_CHAIN (args);
11377 tmp = build_function_type (TREE_TYPE (function), args);
11378 tmp = build_qualified_type (tmp, cp_type_quals (function));
11379 tmp = build_exception_variant (tmp,
11380 TYPE_RAISES_EXCEPTIONS (function));
11381 TREE_TYPE (decl) = tmp;
11382 if (DECL_ARGUMENTS (decl))
11383 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11384 DECL_STATIC_FUNCTION_P (decl) = 1;
11387 /* Initialize the variables used during compilation of a C++
11388 function. */
11390 void
11391 cxx_push_function_context (struct function * f)
11393 struct language_function *p = GGC_CNEW (struct language_function);
11394 f->language = p;
11396 /* Whenever we start a new function, we destroy temporaries in the
11397 usual way. */
11398 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11400 if (f->decl)
11402 tree fn = f->decl;
11404 if (DECL_SAVED_FUNCTION_DATA (fn))
11406 /* If we already parsed this function, and we're just expanding it
11407 now, restore saved state. */
11408 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11410 /* We don't need the saved data anymore. Unless this is an inline
11411 function; we need the named return value info for
11412 declare_return_variable. */
11413 if (! DECL_INLINE (fn))
11414 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11419 /* Free the language-specific parts of F, now that we've finished
11420 compiling the function. */
11422 void
11423 cxx_pop_function_context (struct function * f)
11425 f->language = 0;
11428 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11429 one of the language-independent trees. */
11431 enum cp_tree_node_structure_enum
11432 cp_tree_node_structure (union lang_tree_node * t)
11434 switch (TREE_CODE (&t->generic))
11436 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11437 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11438 case OVERLOAD: return TS_CP_OVERLOAD;
11439 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11440 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
11441 case PTRMEM_CST: return TS_CP_PTRMEM;
11442 case BASELINK: return TS_CP_BASELINK;
11443 default: return TS_CP_GENERIC;
11447 /* Build the void_list_node (void_type_node having been created). */
11448 tree
11449 build_void_list_node (void)
11451 tree t = build_tree_list (NULL_TREE, void_type_node);
11452 return t;
11455 bool
11456 cp_missing_noreturn_ok_p (tree decl)
11458 /* A missing noreturn is ok for the `main' function. */
11459 return DECL_MAIN_P (decl);
11462 /* Return the COMDAT group into which DECL should be placed. */
11464 const char *
11465 cxx_comdat_group (tree decl)
11467 tree name;
11469 /* Virtual tables, construction virtual tables, and virtual table
11470 tables all go in a single COMDAT group, named after the primary
11471 virtual table. */
11472 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11473 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11474 /* For all other DECLs, the COMDAT group is the mangled name of the
11475 declaration itself. */
11476 else
11478 while (DECL_THUNK_P (decl))
11480 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11481 into the same section as the target function. In that case
11482 we must return target's name. */
11483 tree target = THUNK_TARGET (decl);
11484 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11485 && DECL_SECTION_NAME (target) != NULL
11486 && DECL_ONE_ONLY (target))
11487 decl = target;
11488 else
11489 break;
11491 name = DECL_ASSEMBLER_NAME (decl);
11494 return IDENTIFIER_POINTER (name);
11497 #include "gt-cp-decl.h"