* trans-stmt.c (gfc_trans_simple_do): New function.
[official-gcc.git] / gcc / cp / decl.c
blob078e2f9326d1d129cf8eb07a0ec508286421876f
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 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, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, 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 grokfndecl (tree, tree, tree, tree, tree, int,
65 enum overload_flags, cp_cv_quals,
66 tree, int, int, int, int, int, int, tree,
67 tree *);
68 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
69 int, int, tree);
70 static void record_unknown_type (tree, const char *);
71 static tree builtin_function_1 (const char *, tree, tree,
72 enum built_in_function code,
73 enum built_in_class cl, const char *,
74 tree);
75 static tree build_library_fn_1 (tree, enum tree_code, tree);
76 static int member_function_or_else (tree, tree, enum overload_flags);
77 static void bad_specifiers (tree, const char *, int, int, int, int,
78 int);
79 static void check_for_uninitialized_const_var (tree);
80 static hashval_t typename_hash (const void *);
81 static int typename_compare (const void *, const void *);
82 static tree local_variable_p_walkfn (tree *, int *, void *);
83 static tree record_builtin_java_type (const char *, int);
84 static const char *tag_name (enum tag_types code);
85 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
86 static int walk_globals_r (tree, void*);
87 static int walk_vtables_r (tree, void*);
88 static tree make_label_decl (tree, int);
89 static void use_label (tree);
90 static void check_previous_goto_1 (tree, struct cp_binding_level *, tree,
91 const location_t *);
92 static void check_previous_goto (struct named_label_use_list *);
93 static void check_switch_goto (struct cp_binding_level *);
94 static void check_previous_gotos (tree);
95 static void pop_label (tree, tree);
96 static void pop_labels (tree);
97 static void maybe_deduce_size_from_array_init (tree, tree);
98 static void layout_var_decl (tree);
99 static void maybe_commonize_var (tree);
100 static tree check_initializer (tree, tree, int, tree *);
101 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
102 static void save_function_data (tree);
103 static void check_function_type (tree, tree);
104 static void finish_constructor_body (void);
105 static void begin_destructor_body (void);
106 static void finish_destructor_body (void);
107 static tree create_array_type_for_decl (tree, tree, tree);
108 static tree get_atexit_node (void);
109 static tree get_dso_handle_node (void);
110 static tree start_cleanup_fn (void);
111 static void end_cleanup_fn (void);
112 static tree cp_make_fname_decl (tree, int);
113 static void initialize_predefined_identifiers (void);
114 static tree check_special_function_return_type
115 (special_function_kind, tree, tree);
116 static tree push_cp_library_fn (enum tree_code, tree);
117 static tree build_cp_library_fn (tree, enum tree_code, tree);
118 static void store_parm_decls (tree);
119 static void initialize_local_var (tree, tree);
120 static void expand_static_init (tree, tree);
121 static tree next_initializable_field (tree);
122 static tree reshape_init (tree, tree *);
123 static tree build_typename_type (tree, tree, tree);
125 /* Erroneous argument lists can use this *IFF* they do not modify it. */
126 tree error_mark_list;
128 /* The following symbols are subsumed in the cp_global_trees array, and
129 listed here individually for documentation purposes.
131 C++ extensions
132 tree wchar_decl_node;
134 tree vtable_entry_type;
135 tree delta_type_node;
136 tree __t_desc_type_node;
137 tree ti_desc_type_node;
138 tree bltn_desc_type_node, ptr_desc_type_node;
139 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
140 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
141 tree ptm_desc_type_node;
142 tree base_desc_type_node;
144 tree class_type_node;
145 tree unknown_type_node;
147 Array type `vtable_entry_type[]'
149 tree vtbl_type_node;
150 tree vtbl_ptr_type_node;
152 Namespaces,
154 tree std_node;
155 tree abi_node;
157 A FUNCTION_DECL which can call `abort'. Not necessarily the
158 one that the user will declare, but sufficient to be called
159 by routines that want to abort the program.
161 tree abort_fndecl;
163 The FUNCTION_DECL for the default `::operator delete'.
165 tree global_delete_fndecl;
167 Used by RTTI
168 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
169 tree tinfo_var_id;
173 tree cp_global_trees[CPTI_MAX];
175 /* Indicates that there is a type value in some namespace, although
176 that is not necessarily in scope at the moment. */
178 tree global_type_node;
180 /* The node that holds the "name" of the global scope. */
181 tree global_scope_name;
183 /* Used only for jumps to as-yet undefined labels, since jumps to
184 defined labels can have their validity checked immediately. */
186 struct named_label_use_list GTY(())
188 struct cp_binding_level *binding_level;
189 tree names_in_scope;
190 tree label_decl;
191 location_t o_goto_locus;
192 struct named_label_use_list *next;
195 #define named_label_uses cp_function_chain->x_named_label_uses
197 #define local_names cp_function_chain->x_local_names
199 /* A list of objects which have constructors or destructors
200 which reside in the global scope. The decl is stored in
201 the TREE_VALUE slot and the initializer is stored
202 in the TREE_PURPOSE slot. */
203 tree static_aggregates;
205 /* -- end of C++ */
207 /* A node for the integer constants 2, and 3. */
209 tree integer_two_node, integer_three_node;
211 /* A list of all LABEL_DECLs in the function that have names. Here so
212 we can clear out their names' definitions at the end of the
213 function, and so we can check the validity of jumps to these labels. */
215 struct named_label_list GTY(())
217 struct cp_binding_level *binding_level;
218 tree names_in_scope;
219 tree old_value;
220 tree label_decl;
221 tree bad_decls;
222 struct named_label_list *next;
223 unsigned int in_try_scope : 1;
224 unsigned int in_catch_scope : 1;
227 #define named_labels cp_function_chain->x_named_labels
229 /* The number of function bodies which we are currently processing.
230 (Zero if we are at namespace scope, one inside the body of a
231 function, two inside the body of a function in a local class, etc.) */
232 int function_depth;
234 /* States indicating how grokdeclarator() should handle declspecs marked
235 with __attribute__((deprecated)). An object declared as
236 __attribute__((deprecated)) suppresses warnings of uses of other
237 deprecated items. */
239 enum deprecated_states {
240 DEPRECATED_NORMAL,
241 DEPRECATED_SUPPRESS
244 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
246 /* True if a declaration with an `extern' linkage specifier is being
247 processed. */
248 bool have_extern_spec;
251 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
252 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
253 time the VAR_DECL was declared, the type was incomplete. */
255 static GTY(()) tree incomplete_vars;
257 /* Returns the kind of template specialization we are currently
258 processing, given that it's declaration contained N_CLASS_SCOPES
259 explicit scope qualifications. */
261 tmpl_spec_kind
262 current_tmpl_spec_kind (int n_class_scopes)
264 int n_template_parm_scopes = 0;
265 int seen_specialization_p = 0;
266 int innermost_specialization_p = 0;
267 struct cp_binding_level *b;
269 /* Scan through the template parameter scopes. */
270 for (b = current_binding_level;
271 b->kind == sk_template_parms;
272 b = b->level_chain)
274 /* If we see a specialization scope inside a parameter scope,
275 then something is wrong. That corresponds to a declaration
276 like:
278 template <class T> template <> ...
280 which is always invalid since [temp.expl.spec] forbids the
281 specialization of a class member template if the enclosing
282 class templates are not explicitly specialized as well. */
283 if (b->explicit_spec_p)
285 if (n_template_parm_scopes == 0)
286 innermost_specialization_p = 1;
287 else
288 seen_specialization_p = 1;
290 else if (seen_specialization_p == 1)
291 return tsk_invalid_member_spec;
293 ++n_template_parm_scopes;
296 /* Handle explicit instantiations. */
297 if (processing_explicit_instantiation)
299 if (n_template_parm_scopes != 0)
300 /* We've seen a template parameter list during an explicit
301 instantiation. For example:
303 template <class T> template void f(int);
305 This is erroneous. */
306 return tsk_invalid_expl_inst;
307 else
308 return tsk_expl_inst;
311 if (n_template_parm_scopes < n_class_scopes)
312 /* We've not seen enough template headers to match all the
313 specialized classes present. For example:
315 template <class T> void R<T>::S<T>::f(int);
317 This is invalid; there needs to be one set of template
318 parameters for each class. */
319 return tsk_insufficient_parms;
320 else if (n_template_parm_scopes == n_class_scopes)
321 /* We're processing a non-template declaration (even though it may
322 be a member of a template class.) For example:
324 template <class T> void S<T>::f(int);
326 The `class T' maches the `S<T>', leaving no template headers
327 corresponding to the `f'. */
328 return tsk_none;
329 else if (n_template_parm_scopes > n_class_scopes + 1)
330 /* We've got too many template headers. For example:
332 template <> template <class T> void f (T);
334 There need to be more enclosing classes. */
335 return tsk_excessive_parms;
336 else
337 /* This must be a template. It's of the form:
339 template <class T> template <class U> void S<T>::f(U);
341 This is a specialization if the innermost level was a
342 specialization; otherwise it's just a definition of the
343 template. */
344 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
347 /* Exit the current scope. */
349 void
350 finish_scope (void)
352 poplevel (0, 0, 0);
355 /* When a label goes out of scope, check to see if that label was used
356 in a valid manner, and issue any appropriate warnings or errors. */
358 static void
359 pop_label (tree label, tree old_value)
361 if (!processing_template_decl)
363 if (DECL_INITIAL (label) == NULL_TREE)
365 location_t location;
367 cp_error_at ("label %qD used but not defined", label);
368 #ifdef USE_MAPPED_LOCATION
369 location = input_location; /* FIXME want (input_filename, (line)0) */
370 #else
371 location.file = input_filename;
372 location.line = 0;
373 #endif
374 /* Avoid crashing later. */
375 define_label (location, DECL_NAME (label));
377 else if (warn_unused_label && !TREE_USED (label))
378 cp_warning_at ("label %qD defined but not used", label);
381 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
384 /* At the end of a function, all labels declared within the function
385 go out of scope. BLOCK is the top-level block for the
386 function. */
388 static void
389 pop_labels (tree block)
391 struct named_label_list *link;
393 /* Clear out the definitions of all label names, since their scopes
394 end here. */
395 for (link = named_labels; link; link = link->next)
397 pop_label (link->label_decl, link->old_value);
398 /* Put the labels into the "variables" of the top-level block,
399 so debugger can see them. */
400 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
401 BLOCK_VARS (block) = link->label_decl;
404 named_labels = NULL;
407 /* The following two routines are used to interface to Objective-C++.
408 The binding level is purposely treated as an opaque type. */
410 void *
411 objc_get_current_scope (void)
413 return current_binding_level;
416 /* The following routine is used by the NeXT-style SJLJ exceptions;
417 variables get marked 'volatile' so as to not be clobbered by
418 _setjmp()/_longjmp() calls. All variables in the current scope,
419 as well as parent scopes up to (but not including) ENCLOSING_BLK
420 shall be thusly marked. */
422 void
423 objc_mark_locals_volatile (void *enclosing_blk)
425 struct cp_binding_level *scope;
427 for (scope = current_binding_level;
428 scope && scope != enclosing_blk && scope->kind == sk_block;
429 scope = scope->level_chain)
431 tree decl;
433 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
435 if (TREE_CODE (decl) == VAR_DECL)
437 DECL_REGISTER (decl) = 0;
438 TREE_THIS_VOLATILE (decl) = 1;
444 /* Exit a binding level.
445 Pop the level off, and restore the state of the identifier-decl mappings
446 that were in effect when this level was entered.
448 If KEEP == 1, this level had explicit declarations, so
449 and create a "block" (a BLOCK node) for the level
450 to record its declarations and subblocks for symbol table output.
452 If FUNCTIONBODY is nonzero, this level is the body of a function,
453 so create a block as if KEEP were set and also clear out all
454 label names.
456 If REVERSE is nonzero, reverse the order of decls before putting
457 them into the BLOCK. */
459 tree
460 poplevel (int keep, int reverse, int functionbody)
462 tree link;
463 /* The chain of decls was accumulated in reverse order.
464 Put it into forward order, just for cleanliness. */
465 tree decls;
466 int tmp = functionbody;
467 int real_functionbody;
468 tree subblocks;
469 tree block;
470 tree decl;
471 int leaving_for_scope;
472 scope_kind kind;
474 timevar_push (TV_NAME_LOOKUP);
475 restart:
477 block = NULL_TREE;
479 gcc_assert (current_binding_level->kind != sk_class);
481 real_functionbody = (current_binding_level->kind == sk_cleanup
482 ? ((functionbody = 0), tmp) : functionbody);
483 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
485 gcc_assert (!VEC_length(cp_class_binding,
486 current_binding_level->class_shadowed));
488 /* We used to use KEEP == 2 to indicate that the new block should go
489 at the beginning of the list of blocks at this binding level,
490 rather than the end. This hack is no longer used. */
491 gcc_assert (keep == 0 || keep == 1);
493 if (current_binding_level->keep)
494 keep = 1;
496 /* Any uses of undefined labels, and any defined labels, now operate
497 under constraints of next binding contour. */
498 if (cfun && !functionbody)
500 struct cp_binding_level *level_chain;
501 level_chain = current_binding_level->level_chain;
502 if (level_chain)
504 struct named_label_use_list *uses;
505 struct named_label_list *labels;
506 for (labels = named_labels; labels; labels = labels->next)
507 if (labels->binding_level == current_binding_level)
509 tree decl;
510 if (current_binding_level->kind == sk_try)
511 labels->in_try_scope = 1;
512 if (current_binding_level->kind == sk_catch)
513 labels->in_catch_scope = 1;
514 for (decl = labels->names_in_scope; decl;
515 decl = TREE_CHAIN (decl))
516 if (decl_jump_unsafe (decl))
517 labels->bad_decls = tree_cons (NULL_TREE, decl,
518 labels->bad_decls);
519 labels->binding_level = level_chain;
520 labels->names_in_scope = level_chain->names;
523 for (uses = named_label_uses; uses; uses = uses->next)
524 if (uses->binding_level == current_binding_level)
526 uses->binding_level = level_chain;
527 uses->names_in_scope = level_chain->names;
532 /* Get the decls in the order they were written.
533 Usually current_binding_level->names is in reverse order.
534 But parameter decls were previously put in forward order. */
536 if (reverse)
537 current_binding_level->names
538 = decls = nreverse (current_binding_level->names);
539 else
540 decls = current_binding_level->names;
542 /* If there were any declarations or structure tags in that level,
543 or if this level is a function body,
544 create a BLOCK to record them for the life of this function. */
545 block = NULL_TREE;
546 if (keep == 1 || functionbody)
547 block = make_node (BLOCK);
548 if (block != NULL_TREE)
550 BLOCK_VARS (block) = decls;
551 BLOCK_SUBBLOCKS (block) = subblocks;
554 /* In each subblock, record that this is its superior. */
555 if (keep >= 0)
556 for (link = subblocks; link; link = TREE_CHAIN (link))
557 BLOCK_SUPERCONTEXT (link) = block;
559 /* We still support the old for-scope rules, whereby the variables
560 in a for-init statement were in scope after the for-statement
561 ended. We only use the new rules if flag_new_for_scope is
562 nonzero. */
563 leaving_for_scope
564 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
566 /* Before we remove the declarations first check for unused variables. */
567 if (warn_unused_variable
568 && !processing_template_decl)
569 for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
570 if (TREE_CODE (decl) == VAR_DECL
571 && ! TREE_USED (decl)
572 && ! DECL_IN_SYSTEM_HEADER (decl)
573 && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
574 warning ("%Junused variable %qD", decl, decl);
576 /* Remove declarations for all the DECLs in this level. */
577 for (link = decls; link; link = TREE_CHAIN (link))
579 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
580 && DECL_NAME (link))
582 tree name = DECL_NAME (link);
583 cxx_binding *ob;
584 tree ns_binding;
586 ob = outer_binding (name,
587 IDENTIFIER_BINDING (name),
588 /*class_p=*/true);
589 if (!ob)
590 ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
591 else
592 ns_binding = NULL_TREE;
594 if (ob && ob->scope == current_binding_level->level_chain)
595 /* We have something like:
597 int i;
598 for (int i; ;);
600 and we are leaving the `for' scope. There's no reason to
601 keep the binding of the inner `i' in this case. */
602 pop_binding (name, link);
603 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
604 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
605 /* Here, we have something like:
607 typedef int I;
609 void f () {
610 for (int I; ;);
613 We must pop the for-scope binding so we know what's a
614 type and what isn't. */
615 pop_binding (name, link);
616 else
618 /* Mark this VAR_DECL as dead so that we can tell we left it
619 there only for backward compatibility. */
620 DECL_DEAD_FOR_LOCAL (link) = 1;
622 /* Keep track of what should have happened when we
623 popped the binding. */
624 if (ob && ob->value)
625 DECL_SHADOWED_FOR_VAR (link) = ob->value;
627 /* Add it to the list of dead variables in the next
628 outermost binding to that we can remove these when we
629 leave that binding. */
630 current_binding_level->level_chain->dead_vars_from_for
631 = tree_cons (NULL_TREE, link,
632 current_binding_level->level_chain->
633 dead_vars_from_for);
635 /* Although we don't pop the cxx_binding, we do clear
636 its SCOPE since the scope is going away now. */
637 IDENTIFIER_BINDING (name)->scope
638 = current_binding_level->level_chain;
641 else
643 tree name;
645 /* Remove the binding. */
646 decl = link;
648 if (TREE_CODE (decl) == TREE_LIST)
649 decl = TREE_VALUE (decl);
650 name = decl;
652 if (TREE_CODE (name) == OVERLOAD)
653 name = OVL_FUNCTION (name);
655 gcc_assert (DECL_P (name));
656 pop_binding (DECL_NAME (name), decl);
660 /* Remove declarations for any `for' variables from inner scopes
661 that we kept around. */
662 for (link = current_binding_level->dead_vars_from_for;
663 link; link = TREE_CHAIN (link))
664 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
666 /* Restore the IDENTIFIER_TYPE_VALUEs. */
667 for (link = current_binding_level->type_shadowed;
668 link; link = TREE_CHAIN (link))
669 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
671 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
672 for (link = current_binding_level->shadowed_labels;
673 link;
674 link = TREE_CHAIN (link))
675 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
677 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
678 list if a `using' declaration put them there. The debugging
679 back-ends won't understand OVERLOAD, so we remove them here.
680 Because the BLOCK_VARS are (temporarily) shared with
681 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
682 popped all the bindings. */
683 if (block)
685 tree* d;
687 for (d = &BLOCK_VARS (block); *d; )
689 if (TREE_CODE (*d) == TREE_LIST)
690 *d = TREE_CHAIN (*d);
691 else
692 d = &TREE_CHAIN (*d);
696 /* If the level being exited is the top level of a function,
697 check over all the labels. */
698 if (functionbody)
700 /* Since this is the top level block of a function, the vars are
701 the function's parameters. Don't leave them in the BLOCK
702 because they are found in the FUNCTION_DECL instead. */
703 BLOCK_VARS (block) = 0;
704 pop_labels (block);
707 kind = current_binding_level->kind;
708 if (kind == sk_cleanup)
710 tree stmt;
712 /* If this is a temporary binding created for a cleanup, then we'll
713 have pushed a statement list level. Pop that, create a new
714 BIND_EXPR for the block, and insert it into the stream. */
715 stmt = pop_stmt_list (current_binding_level->statement_list);
716 stmt = c_build_bind_expr (block, stmt);
717 add_stmt (stmt);
720 leave_scope ();
721 if (functionbody)
722 DECL_INITIAL (current_function_decl) = block;
723 else if (block)
724 current_binding_level->blocks
725 = chainon (current_binding_level->blocks, block);
727 /* If we did not make a block for the level just exited,
728 any blocks made for inner levels
729 (since they cannot be recorded as subblocks in that level)
730 must be carried forward so they will later become subblocks
731 of something else. */
732 else if (subblocks)
733 current_binding_level->blocks
734 = chainon (current_binding_level->blocks, subblocks);
736 /* Each and every BLOCK node created here in `poplevel' is important
737 (e.g. for proper debugging information) so if we created one
738 earlier, mark it as "used". */
739 if (block)
740 TREE_USED (block) = 1;
742 /* All temporary bindings created for cleanups are popped silently. */
743 if (kind == sk_cleanup)
744 goto restart;
746 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
749 /* Delete the node BLOCK from the current binding level.
750 This is used for the block inside a stmt expr ({...})
751 so that the block can be reinserted where appropriate. */
753 void
754 delete_block (tree block)
756 tree t;
757 if (current_binding_level->blocks == block)
758 current_binding_level->blocks = TREE_CHAIN (block);
759 for (t = current_binding_level->blocks; t;)
761 if (TREE_CHAIN (t) == block)
762 TREE_CHAIN (t) = TREE_CHAIN (block);
763 else
764 t = TREE_CHAIN (t);
766 TREE_CHAIN (block) = NULL_TREE;
767 /* Clear TREE_USED which is always set by poplevel.
768 The flag is set again if insert_block is called. */
769 TREE_USED (block) = 0;
772 /* Insert BLOCK at the end of the list of subblocks of the
773 current binding level. This is used when a BIND_EXPR is expanded,
774 to handle the BLOCK node inside the BIND_EXPR. */
776 void
777 insert_block (tree block)
779 TREE_USED (block) = 1;
780 current_binding_level->blocks
781 = chainon (current_binding_level->blocks, block);
784 /* Returns nonzero if T is a virtual function table. */
787 vtable_decl_p (tree t, void* data ATTRIBUTE_UNUSED )
789 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
792 /* Returns nonzero if T is a TYPE_DECL for a type with virtual
793 functions. */
796 vtype_decl_p (tree t, void *data ATTRIBUTE_UNUSED )
798 return (TREE_CODE (t) == TYPE_DECL
799 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
800 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
803 struct walk_globals_data {
804 walk_globals_pred p;
805 walk_globals_fn f;
806 void *data;
809 /* Walk the vtable declarations in NAMESPACE. Whenever one is found
810 for which P returns nonzero, call F with its address. If any call
811 to F returns a nonzero value, return a nonzero value. */
813 static int
814 walk_vtables_r (tree namespace, void* data)
816 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
817 walk_globals_fn f = wgd->f;
818 void *d = wgd->data;
819 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
820 int result = 0;
822 for (; decl ; decl = TREE_CHAIN (decl))
823 result |= (*f) (&decl, d);
825 return result;
828 /* Walk the vtable declarations. Whenever one is found for which P
829 returns nonzero, call F with its address. If any call to F
830 returns a nonzero value, return a nonzero value. */
831 bool
832 walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
834 struct walk_globals_data wgd;
835 wgd.p = p;
836 wgd.f = f;
837 wgd.data = data;
839 return walk_namespaces (walk_vtables_r, &wgd);
842 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
843 itself, calling F for each. The DATA is passed to F as well. */
845 static int
846 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
848 int result = 0;
849 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
851 result |= (*f) (namespace, data);
853 for (; current; current = TREE_CHAIN (current))
854 result |= walk_namespaces_r (current, f, data);
856 return result;
859 /* Walk all the namespaces, calling F for each. The DATA is passed to
860 F as well. */
863 walk_namespaces (walk_namespaces_fn f, void* data)
865 return walk_namespaces_r (global_namespace, f, data);
868 /* Walk the global declarations in NAMESPACE. Whenever one is found
869 for which P returns nonzero, call F with its address. If any call
870 to F returns a nonzero value, return a nonzero value. */
872 static int
873 walk_globals_r (tree namespace, void* data)
875 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
876 walk_globals_pred p = wgd->p;
877 walk_globals_fn f = wgd->f;
878 void *d = wgd->data;
879 tree *t;
880 int result = 0;
882 t = &NAMESPACE_LEVEL (namespace)->names;
884 while (*t)
886 tree glbl = *t;
888 if ((*p) (glbl, d))
889 result |= (*f) (t, d);
891 /* If F changed *T, then *T still points at the next item to
892 examine. */
893 if (*t == glbl)
894 t = &TREE_CHAIN (*t);
897 return result;
900 /* Walk the global declarations. Whenever one is found for which P
901 returns true, call F with its address. If any call to F
902 returns true, return true. */
904 bool
905 walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
907 struct walk_globals_data wgd;
908 wgd.p = p;
909 wgd.f = f;
910 wgd.data = data;
912 return walk_namespaces (walk_globals_r, &wgd);
915 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
916 DATA is non-NULL, this is the last time we will call
917 wrapup_global_declarations for this NAMESPACE. */
920 wrapup_globals_for_namespace (tree namespace, void* data)
922 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
923 varray_type statics = level->static_decls;
924 tree *vec = &VARRAY_TREE (statics, 0);
925 int len = VARRAY_ACTIVE_SIZE (statics);
926 int last_time = (data != 0);
928 if (last_time)
930 check_global_declarations (vec, len);
931 return 0;
934 /* Write out any globals that need to be output. */
935 return wrapup_global_declarations (vec, len);
939 /* In C++, you don't have to write `struct S' to refer to `S'; you
940 can just use `S'. We accomplish this by creating a TYPE_DECL as
941 if the user had written `typedef struct S S'. Create and return
942 the TYPE_DECL for TYPE. */
944 tree
945 create_implicit_typedef (tree name, tree type)
947 tree decl;
949 decl = build_decl (TYPE_DECL, name, type);
950 DECL_ARTIFICIAL (decl) = 1;
951 /* There are other implicit type declarations, like the one *within*
952 a class that allows you to write `S::S'. We must distinguish
953 amongst these. */
954 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
955 TYPE_NAME (type) = decl;
957 return decl;
960 /* Remember a local name for name-mangling purposes. */
962 static void
963 push_local_name (tree decl)
965 size_t i, nelts;
966 tree t, name;
968 timevar_push (TV_NAME_LOOKUP);
969 if (!local_names)
970 VARRAY_TREE_INIT (local_names, 8, "local_names");
972 name = DECL_NAME (decl);
974 nelts = VARRAY_ACTIVE_SIZE (local_names);
975 for (i = 0; i < nelts; i++)
977 t = VARRAY_TREE (local_names, i);
978 if (DECL_NAME (t) == name)
980 if (!DECL_LANG_SPECIFIC (decl))
981 retrofit_lang_decl (decl);
982 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
983 if (DECL_LANG_SPECIFIC (t))
984 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
985 else
986 DECL_DISCRIMINATOR (decl) = 1;
988 VARRAY_TREE (local_names, i) = decl;
989 timevar_pop (TV_NAME_LOOKUP);
990 return;
994 VARRAY_PUSH_TREE (local_names, decl);
995 timevar_pop (TV_NAME_LOOKUP);
998 /* Subroutine of duplicate_decls: return truthvalue of whether
999 or not types of these decls match.
1001 For C++, we must compare the parameter list so that `int' can match
1002 `int&' in a parameter position, but `int&' is not confused with
1003 `const int&'. */
1006 decls_match (tree newdecl, tree olddecl)
1008 int types_match;
1010 if (newdecl == olddecl)
1011 return 1;
1013 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1014 /* If the two DECLs are not even the same kind of thing, we're not
1015 interested in their types. */
1016 return 0;
1018 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1020 tree f1 = TREE_TYPE (newdecl);
1021 tree f2 = TREE_TYPE (olddecl);
1022 tree p1 = TYPE_ARG_TYPES (f1);
1023 tree p2 = TYPE_ARG_TYPES (f2);
1025 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1026 && ! (DECL_EXTERN_C_P (newdecl)
1027 && DECL_EXTERN_C_P (olddecl)))
1028 return 0;
1030 if (TREE_CODE (f1) != TREE_CODE (f2))
1031 return 0;
1033 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
1035 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
1036 && (DECL_BUILT_IN (olddecl)
1037 #ifndef NO_IMPLICIT_EXTERN_C
1038 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1039 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1040 #endif
1043 types_match = self_promoting_args_p (p1);
1044 if (p1 == void_list_node)
1045 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1047 #ifndef NO_IMPLICIT_EXTERN_C
1048 else if (p1 == NULL_TREE
1049 && (DECL_EXTERN_C_P (olddecl)
1050 && DECL_IN_SYSTEM_HEADER (olddecl)
1051 && !DECL_CLASS_SCOPE_P (olddecl))
1052 && (DECL_EXTERN_C_P (newdecl)
1053 && DECL_IN_SYSTEM_HEADER (newdecl)
1054 && !DECL_CLASS_SCOPE_P (newdecl)))
1056 types_match = self_promoting_args_p (p2);
1057 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1059 #endif
1060 else
1061 types_match = compparms (p1, p2);
1063 else
1064 types_match = 0;
1066 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1068 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1069 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1070 return 0;
1072 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1073 DECL_TEMPLATE_PARMS (olddecl)))
1074 return 0;
1076 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1077 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1078 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1079 else
1080 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1081 DECL_TEMPLATE_RESULT (newdecl));
1083 else
1085 if (TREE_TYPE (newdecl) == error_mark_node)
1086 types_match = TREE_TYPE (olddecl) == error_mark_node;
1087 else if (TREE_TYPE (olddecl) == NULL_TREE)
1088 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1089 else if (TREE_TYPE (newdecl) == NULL_TREE)
1090 types_match = 0;
1091 else
1092 types_match = comptypes (TREE_TYPE (newdecl),
1093 TREE_TYPE (olddecl),
1094 COMPARE_REDECLARATION);
1097 return types_match;
1100 /* If NEWDECL is `static' and an `extern' was seen previously,
1101 warn about it. OLDDECL is the previous declaration.
1103 Note that this does not apply to the C++ case of declaring
1104 a variable `extern const' and then later `const'.
1106 Don't complain about built-in functions, since they are beyond
1107 the user's control. */
1109 void
1110 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1112 tree name;
1114 if (TREE_CODE (newdecl) == TYPE_DECL
1115 || TREE_CODE (newdecl) == TEMPLATE_DECL
1116 || TREE_CODE (newdecl) == CONST_DECL
1117 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1118 return;
1120 /* Don't get confused by static member functions; that's a different
1121 use of `static'. */
1122 if (TREE_CODE (newdecl) == FUNCTION_DECL
1123 && DECL_STATIC_FUNCTION_P (newdecl))
1124 return;
1126 /* If the old declaration was `static', or the new one isn't, then
1127 then everything is OK. */
1128 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1129 return;
1131 /* It's OK to declare a builtin function as `static'. */
1132 if (TREE_CODE (olddecl) == FUNCTION_DECL
1133 && DECL_ARTIFICIAL (olddecl))
1134 return;
1136 name = DECL_ASSEMBLER_NAME (newdecl);
1137 pedwarn ("%qD was declared %<extern%> and later %<static%>", newdecl);
1138 cp_pedwarn_at ("previous declaration of %qD", olddecl);
1141 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1142 If the redeclaration is invalid, a diagnostic is issued, and the
1143 error_mark_node is returned. Otherwise, OLDDECL is returned.
1145 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1146 returned. */
1148 tree
1149 duplicate_decls (tree newdecl, tree olddecl)
1151 unsigned olddecl_uid = DECL_UID (olddecl);
1152 int olddecl_friend = 0, types_match = 0;
1153 int new_defines_function = 0;
1155 if (newdecl == olddecl)
1156 return olddecl;
1158 types_match = decls_match (newdecl, olddecl);
1160 /* If either the type of the new decl or the type of the old decl is an
1161 error_mark_node, then that implies that we have already issued an
1162 error (earlier) for some bogus type specification, and in that case,
1163 it is rather pointless to harass the user with yet more error message
1164 about the same declaration, so just pretend the types match here. */
1165 if (TREE_TYPE (newdecl) == error_mark_node
1166 || TREE_TYPE (olddecl) == error_mark_node)
1167 types_match = 1;
1169 if (DECL_P (olddecl)
1170 && TREE_CODE (newdecl) == FUNCTION_DECL
1171 && TREE_CODE (olddecl) == FUNCTION_DECL
1172 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1174 if (DECL_DECLARED_INLINE_P (newdecl)
1175 && DECL_UNINLINABLE (newdecl)
1176 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1177 /* Already warned elsewhere. */;
1178 else if (DECL_DECLARED_INLINE_P (olddecl)
1179 && DECL_UNINLINABLE (olddecl)
1180 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1181 /* Already warned. */;
1182 else if (DECL_DECLARED_INLINE_P (newdecl)
1183 && DECL_UNINLINABLE (olddecl)
1184 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1186 warning ("%Jfunction %qD redeclared as inline", newdecl, newdecl);
1187 warning ("%Jprevious declaration of %qD with attribute noinline",
1188 olddecl, olddecl);
1190 else if (DECL_DECLARED_INLINE_P (olddecl)
1191 && DECL_UNINLINABLE (newdecl)
1192 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1194 warning ("%Jfunction %qD redeclared with attribute noinline",
1195 newdecl, newdecl);
1196 warning ("%Jprevious declaration of %qD was inline",
1197 olddecl, olddecl);
1201 /* Check for redeclaration and other discrepancies. */
1202 if (TREE_CODE (olddecl) == FUNCTION_DECL
1203 && DECL_ARTIFICIAL (olddecl))
1205 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1207 /* Avoid warnings redeclaring anticipated built-ins. */
1208 if (DECL_ANTICIPATED (olddecl))
1209 return NULL_TREE;
1211 /* If you declare a built-in or predefined function name as static,
1212 the old definition is overridden, but optionally warn this was a
1213 bad choice of name. */
1214 if (! TREE_PUBLIC (newdecl))
1216 if (warn_shadow)
1217 warning ("shadowing %s function %q#D",
1218 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1219 olddecl);
1220 /* Discard the old built-in function. */
1221 return NULL_TREE;
1223 /* If the built-in is not ansi, then programs can override
1224 it even globally without an error. */
1225 else if (! DECL_BUILT_IN (olddecl))
1226 warning ("library function %q#D redeclared as non-function %q#D",
1227 olddecl, newdecl);
1228 else
1230 error ("declaration of %q#D", newdecl);
1231 error ("conflicts with built-in declaration %q#D",
1232 olddecl);
1234 return NULL_TREE;
1236 else if (!types_match)
1238 /* Avoid warnings redeclaring anticipated built-ins. */
1239 if (DECL_ANTICIPATED (olddecl))
1241 /* Deal with fileptr_type_node. FILE type is not known
1242 at the time we create the builtins. */
1243 tree t1, t2;
1245 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1246 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1247 t1 || t2;
1248 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1249 if (!t1 || !t2)
1250 break;
1251 else if (TREE_VALUE (t2) == fileptr_type_node)
1253 tree t = TREE_VALUE (t1);
1255 if (TREE_CODE (t) == POINTER_TYPE
1256 && TYPE_NAME (TREE_TYPE (t))
1257 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1258 == get_identifier ("FILE")
1259 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1261 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1263 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1264 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1265 types_match = decls_match (newdecl, olddecl);
1266 if (types_match)
1267 return duplicate_decls (newdecl, olddecl);
1268 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1271 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1272 break;
1274 else if ((DECL_EXTERN_C_P (newdecl)
1275 && DECL_EXTERN_C_P (olddecl))
1276 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1277 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1279 /* A near match; override the builtin. */
1281 if (TREE_PUBLIC (newdecl))
1283 warning ("new declaration %q#D", newdecl);
1284 warning ("ambiguates built-in declaration %q#D",
1285 olddecl);
1287 else if (warn_shadow)
1288 warning ("shadowing %s function %q#D",
1289 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1290 olddecl);
1292 else
1293 /* Discard the old built-in function. */
1294 return NULL_TREE;
1296 /* Replace the old RTL to avoid problems with inlining. */
1297 COPY_DECL_RTL (newdecl, olddecl);
1299 /* Even if the types match, prefer the new declarations type
1300 for anticipated built-ins, for exception lists, etc... */
1301 else if (DECL_ANTICIPATED (olddecl))
1303 tree type = TREE_TYPE (newdecl);
1304 tree attribs = (*targetm.merge_type_attributes)
1305 (TREE_TYPE (olddecl), type);
1307 type = cp_build_type_attribute_variant (type, attribs);
1308 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1311 /* Whether or not the builtin can throw exceptions has no
1312 bearing on this declarator. */
1313 TREE_NOTHROW (olddecl) = 0;
1315 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1317 /* If a builtin function is redeclared as `static', merge
1318 the declarations, but make the original one static. */
1319 DECL_THIS_STATIC (olddecl) = 1;
1320 TREE_PUBLIC (olddecl) = 0;
1322 /* Make the old declaration consistent with the new one so
1323 that all remnants of the builtin-ness of this function
1324 will be banished. */
1325 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1326 COPY_DECL_RTL (newdecl, olddecl);
1329 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1331 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1332 && TREE_CODE (newdecl) != TYPE_DECL
1333 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1334 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1335 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1336 && TREE_CODE (olddecl) != TYPE_DECL
1337 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1338 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1339 == TYPE_DECL))))
1341 /* We do nothing special here, because C++ does such nasty
1342 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1343 get shadowed, and know that if we need to find a TYPE_DECL
1344 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1345 slot of the identifier. */
1346 return NULL_TREE;
1349 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1350 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1351 || (TREE_CODE (olddecl) == FUNCTION_DECL
1352 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1353 return NULL_TREE;
1355 error ("%q#D redeclared as different kind of symbol", newdecl);
1356 if (TREE_CODE (olddecl) == TREE_LIST)
1357 olddecl = TREE_VALUE (olddecl);
1358 cp_error_at ("previous declaration of %q#D", olddecl);
1360 return error_mark_node;
1362 else if (!types_match)
1364 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1365 /* These are certainly not duplicate declarations; they're
1366 from different scopes. */
1367 return NULL_TREE;
1369 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1371 /* The name of a class template may not be declared to refer to
1372 any other template, class, function, object, namespace, value,
1373 or type in the same scope. */
1374 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1375 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1377 error ("declaration of template %q#D", newdecl);
1378 cp_error_at ("conflicts with previous declaration %q#D",
1379 olddecl);
1381 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1382 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1383 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1384 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1385 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1386 DECL_TEMPLATE_PARMS (olddecl))
1387 /* Template functions can be disambiguated by
1388 return type. */
1389 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1390 TREE_TYPE (TREE_TYPE (olddecl))))
1392 error ("new declaration %q#D", newdecl);
1393 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1395 return NULL_TREE;
1397 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1399 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1401 error ("declaration of C function %q#D conflicts with",
1402 newdecl);
1403 cp_error_at ("previous declaration %q#D here", olddecl);
1405 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1406 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1408 error ("new declaration %q#D", newdecl);
1409 cp_error_at ("ambiguates old declaration %q#D", olddecl);
1411 else
1412 return NULL_TREE;
1414 else
1416 error ("conflicting declaration %q#D", newdecl);
1417 cp_error_at ("%qD has a previous declaration as %q#D",
1418 olddecl, olddecl);
1419 return NULL_TREE;
1422 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1423 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1424 && (!DECL_TEMPLATE_INFO (newdecl)
1425 || (DECL_TI_TEMPLATE (newdecl)
1426 != DECL_TI_TEMPLATE (olddecl))))
1427 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1428 && (!DECL_TEMPLATE_INFO (olddecl)
1429 || (DECL_TI_TEMPLATE (olddecl)
1430 != DECL_TI_TEMPLATE (newdecl))))))
1431 /* It's OK to have a template specialization and a non-template
1432 with the same type, or to have specializations of two
1433 different templates with the same type. Note that if one is a
1434 specialization, and the other is an instantiation of the same
1435 template, that we do not exit at this point. That situation
1436 can occur if we instantiate a template class, and then
1437 specialize one of its methods. This situation is valid, but
1438 the declarations must be merged in the usual way. */
1439 return NULL_TREE;
1440 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1441 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1442 && !DECL_USE_TEMPLATE (newdecl))
1443 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1444 && !DECL_USE_TEMPLATE (olddecl))))
1445 /* One of the declarations is a template instantiation, and the
1446 other is not a template at all. That's OK. */
1447 return NULL_TREE;
1448 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1450 /* In [namespace.alias] we have:
1452 In a declarative region, a namespace-alias-definition can be
1453 used to redefine a namespace-alias declared in that declarative
1454 region to refer only to the namespace to which it already
1455 refers.
1457 Therefore, if we encounter a second alias directive for the same
1458 alias, we can just ignore the second directive. */
1459 if (DECL_NAMESPACE_ALIAS (newdecl)
1460 && (DECL_NAMESPACE_ALIAS (newdecl)
1461 == DECL_NAMESPACE_ALIAS (olddecl)))
1462 return olddecl;
1463 /* [namespace.alias]
1465 A namespace-name or namespace-alias shall not be declared as
1466 the name of any other entity in the same declarative region.
1467 A namespace-name defined at global scope shall not be
1468 declared as the name of any other entity in any global scope
1469 of the program. */
1470 error ("declaration of namespace %qD conflicts with", newdecl);
1471 cp_error_at ("previous declaration of namespace %qD here", olddecl);
1472 return error_mark_node;
1474 else
1476 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1477 if (errmsg)
1479 error (errmsg, newdecl);
1480 if (DECL_NAME (olddecl) != NULL_TREE)
1481 cp_error_at ((DECL_INITIAL (olddecl)
1482 && namespace_bindings_p ())
1483 ? "%q#D previously defined here"
1484 : "%q#D previously declared here", olddecl);
1485 return error_mark_node;
1487 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1488 && DECL_INITIAL (olddecl) != NULL_TREE
1489 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1490 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1492 /* Prototype decl follows defn w/o prototype. */
1493 cp_warning_at ("prototype for %q#D", newdecl);
1494 warning ("%Jfollows non-prototype definition here", olddecl);
1496 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1497 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1499 /* extern "C" int foo ();
1500 int foo () { bar (); }
1501 is OK. */
1502 if (current_lang_depth () == 0)
1503 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1504 else
1506 cp_error_at ("previous declaration of %q#D with %qL linkage",
1507 olddecl, DECL_LANGUAGE (olddecl));
1508 error ("conflicts with new declaration with %qL linkage",
1509 DECL_LANGUAGE (newdecl));
1513 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1515 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1517 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1518 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1519 int i = 1;
1521 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1522 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1524 for (; t1 && t1 != void_list_node;
1525 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1526 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1528 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1529 TREE_PURPOSE (t2)))
1531 pedwarn ("default argument given for parameter %d of %q#D",
1532 i, newdecl);
1533 cp_pedwarn_at ("after previous specification in %q#D",
1534 olddecl);
1536 else
1538 error ("default argument given for parameter %d of %q#D",
1539 i, newdecl);
1540 cp_error_at ("after previous specification in %q#D",
1541 olddecl);
1545 if (DECL_DECLARED_INLINE_P (newdecl)
1546 && ! DECL_DECLARED_INLINE_P (olddecl)
1547 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1549 warning ("%q#D was used before it was declared inline", newdecl);
1550 warning ("%Jprevious non-inline declaration here", olddecl);
1555 /* Do not merge an implicit typedef with an explicit one. In:
1557 class A;
1559 typedef class A A __attribute__ ((foo));
1561 the attribute should apply only to the typedef. */
1562 if (TREE_CODE (olddecl) == TYPE_DECL
1563 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1564 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1565 return NULL_TREE;
1567 /* If new decl is `static' and an `extern' was seen previously,
1568 warn about it. */
1569 warn_extern_redeclared_static (newdecl, olddecl);
1571 /* We have committed to returning 1 at this point. */
1572 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1574 /* Now that functions must hold information normally held
1575 by field decls, there is extra work to do so that
1576 declaration information does not get destroyed during
1577 definition. */
1578 if (DECL_VINDEX (olddecl))
1579 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1580 if (DECL_CONTEXT (olddecl))
1581 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1582 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1583 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1584 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1585 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1586 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1587 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1588 SET_OVERLOADED_OPERATOR_CODE
1589 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1590 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1592 /* Optionally warn about more than one declaration for the same
1593 name, but don't warn about a function declaration followed by a
1594 definition. */
1595 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1596 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1597 /* Don't warn about extern decl followed by definition. */
1598 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1599 /* Don't warn about friends, let add_friend take care of it. */
1600 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
1602 warning ("redundant redeclaration of %qD in same scope", newdecl);
1603 cp_warning_at ("previous declaration of %qD", olddecl);
1607 /* Deal with C++: must preserve virtual function table size. */
1608 if (TREE_CODE (olddecl) == TYPE_DECL)
1610 tree newtype = TREE_TYPE (newdecl);
1611 tree oldtype = TREE_TYPE (olddecl);
1613 if (newtype != error_mark_node && oldtype != error_mark_node
1614 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1615 CLASSTYPE_FRIEND_CLASSES (newtype)
1616 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1618 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1621 /* Copy all the DECL_... slots specified in the new decl
1622 except for any that we copy here from the old type. */
1623 DECL_ATTRIBUTES (newdecl)
1624 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1626 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1628 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
1629 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1630 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1631 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1633 /* If the new declaration is a definition, update the file and
1634 line information on the declaration. */
1635 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1636 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
1638 DECL_SOURCE_LOCATION (olddecl)
1639 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1640 = DECL_SOURCE_LOCATION (newdecl);
1641 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1642 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl))
1643 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl));
1646 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1648 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1649 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1650 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1651 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1654 return olddecl;
1657 if (types_match)
1659 /* Automatically handles default parameters. */
1660 tree oldtype = TREE_TYPE (olddecl);
1661 tree newtype;
1663 /* Merge the data types specified in the two decls. */
1664 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1666 /* If merge_types produces a non-typedef type, just use the old type. */
1667 if (TREE_CODE (newdecl) == TYPE_DECL
1668 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1669 newtype = oldtype;
1671 if (TREE_CODE (newdecl) == VAR_DECL)
1673 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1674 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1675 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1676 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1679 /* Do this after calling `merge_types' so that default
1680 parameters don't confuse us. */
1681 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1682 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1683 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1685 TREE_TYPE (newdecl) = build_exception_variant (newtype,
1686 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
1687 TREE_TYPE (olddecl) = build_exception_variant (newtype,
1688 TYPE_RAISES_EXCEPTIONS (oldtype));
1690 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
1691 && ! DECL_IS_BUILTIN (olddecl)
1692 && flag_exceptions
1693 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1694 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
1696 error ("declaration of %qF throws different exceptions",
1697 newdecl);
1698 cp_error_at ("than previous declaration %qF", olddecl);
1701 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1703 /* Lay the type out, unless already done. */
1704 if (! same_type_p (newtype, oldtype)
1705 && TREE_TYPE (newdecl) != error_mark_node
1706 && !(processing_template_decl && uses_template_parms (newdecl)))
1707 layout_type (TREE_TYPE (newdecl));
1709 if ((TREE_CODE (newdecl) == VAR_DECL
1710 || TREE_CODE (newdecl) == PARM_DECL
1711 || TREE_CODE (newdecl) == RESULT_DECL
1712 || TREE_CODE (newdecl) == FIELD_DECL
1713 || TREE_CODE (newdecl) == TYPE_DECL)
1714 && !(processing_template_decl && uses_template_parms (newdecl)))
1715 layout_decl (newdecl, 0);
1717 /* Merge the type qualifiers. */
1718 if (TREE_READONLY (newdecl))
1719 TREE_READONLY (olddecl) = 1;
1720 if (TREE_THIS_VOLATILE (newdecl))
1721 TREE_THIS_VOLATILE (olddecl) = 1;
1722 if (TREE_NOTHROW (newdecl))
1723 TREE_NOTHROW (olddecl) = 1;
1725 /* Merge deprecatedness. */
1726 if (TREE_DEPRECATED (newdecl))
1727 TREE_DEPRECATED (olddecl) = 1;
1729 /* Merge the initialization information. */
1730 if (DECL_INITIAL (newdecl) == NULL_TREE
1731 && DECL_INITIAL (olddecl) != NULL_TREE)
1733 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1734 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1735 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1736 && DECL_LANG_SPECIFIC (newdecl)
1737 && DECL_LANG_SPECIFIC (olddecl))
1739 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1740 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1744 /* Merge the section attribute.
1745 We want to issue an error if the sections conflict but that must be
1746 done later in decl_attributes since we are called before attributes
1747 are assigned. */
1748 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1749 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1751 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1753 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1754 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1755 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1756 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1757 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1758 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1759 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1760 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1761 /* Keep the old RTL. */
1762 COPY_DECL_RTL (olddecl, newdecl);
1764 else if (TREE_CODE (newdecl) == VAR_DECL
1765 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1767 /* Keep the old RTL. We cannot keep the old RTL if the old
1768 declaration was for an incomplete object and the new
1769 declaration is not since many attributes of the RTL will
1770 change. */
1771 COPY_DECL_RTL (olddecl, newdecl);
1774 /* If cannot merge, then use the new type and qualifiers,
1775 and don't preserve the old rtl. */
1776 else
1778 /* Clean out any memory we had of the old declaration. */
1779 tree oldstatic = value_member (olddecl, static_aggregates);
1780 if (oldstatic)
1781 TREE_VALUE (oldstatic) = error_mark_node;
1783 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1784 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1785 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1786 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1789 /* Merge the storage class information. */
1790 merge_weak (newdecl, olddecl);
1792 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1793 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1794 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1795 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1796 if (! DECL_EXTERNAL (olddecl))
1797 DECL_EXTERNAL (newdecl) = 0;
1799 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1801 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1802 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1803 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1804 DECL_TEMPLATE_INSTANTIATED (newdecl)
1805 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1806 /* Don't really know how much of the language-specific
1807 values we should copy from old to new. */
1808 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1809 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1810 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1811 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1812 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1813 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1814 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1815 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1816 olddecl_friend = DECL_FRIEND_P (olddecl);
1818 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1819 if (TREE_CODE (newdecl) == FUNCTION_DECL
1820 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1822 DECL_BEFRIENDING_CLASSES (newdecl)
1823 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1824 DECL_BEFRIENDING_CLASSES (olddecl));
1825 /* DECL_THUNKS is only valid for virtual functions,
1826 otherwise it is a DECL_FRIEND_CONTEXT. */
1827 if (DECL_VIRTUAL_P (newdecl))
1828 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1832 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1834 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1835 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1837 /* If newdecl is not a specialization, then it is not a
1838 template-related function at all. And that means that we
1839 should have exited above, returning 0. */
1840 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
1842 if (TREE_USED (olddecl))
1843 /* From [temp.expl.spec]:
1845 If a template, a member template or the member of a class
1846 template is explicitly specialized then that
1847 specialization shall be declared before the first use of
1848 that specialization that would cause an implicit
1849 instantiation to take place, in every translation unit in
1850 which such a use occurs. */
1851 error ("explicit specialization of %D after first use",
1852 olddecl);
1854 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1856 /* [temp.expl.spec/14] We don't inline explicit specialization
1857 just because the primary template says so. */
1859 else
1861 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1862 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1864 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1866 /* If either decl says `inline', this fn is inline, unless
1867 its definition was passed already. */
1868 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1869 DECL_INLINE (olddecl) = 1;
1870 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1872 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1873 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1876 /* Preserve abstractness on cloned [cd]tors. */
1877 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1879 if (! types_match)
1881 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1882 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1883 COPY_DECL_RTL (newdecl, olddecl);
1885 if (! types_match || new_defines_function)
1887 /* These need to be copied so that the names are available.
1888 Note that if the types do match, we'll preserve inline
1889 info and other bits, but if not, we won't. */
1890 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1891 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1893 if (new_defines_function)
1894 /* If defining a function declared with other language
1895 linkage, use the previously declared language linkage. */
1896 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1897 else if (types_match)
1899 /* If redeclaring a builtin function, and not a definition,
1900 it stays built in. */
1901 if (DECL_BUILT_IN (olddecl))
1903 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1904 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1905 /* If we're keeping the built-in definition, keep the rtl,
1906 regardless of declaration matches. */
1907 COPY_DECL_RTL (olddecl, newdecl);
1910 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1911 /* Don't clear out the arguments if we're redefining a function. */
1912 if (DECL_ARGUMENTS (olddecl))
1913 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1916 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1917 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1919 /* Now preserve various other info from the definition. */
1920 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1921 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1922 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1923 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1925 /* Warn about conflicting visibility specifications. */
1926 if (DECL_VISIBILITY_SPECIFIED (olddecl)
1927 && DECL_VISIBILITY_SPECIFIED (newdecl)
1928 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1930 warning ("%J%qD: visibility attribute ignored because it",
1931 newdecl, newdecl);
1932 warning ("%Jconflicts with previous declaration here", olddecl);
1934 /* Choose the declaration which specified visibility. */
1935 if (DECL_VISIBILITY_SPECIFIED (olddecl))
1937 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1938 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1941 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1943 int function_size;
1945 function_size = sizeof (struct tree_decl);
1947 memcpy ((char *) olddecl + sizeof (struct tree_common),
1948 (char *) newdecl + sizeof (struct tree_common),
1949 function_size - sizeof (struct tree_common));
1951 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
1952 /* If newdecl is a template instantiation, it is possible that
1953 the following sequence of events has occurred:
1955 o A friend function was declared in a class template. The
1956 class template was instantiated.
1958 o The instantiation of the friend declaration was
1959 recorded on the instantiation list, and is newdecl.
1961 o Later, however, instantiate_class_template called pushdecl
1962 on the newdecl to perform name injection. But, pushdecl in
1963 turn called duplicate_decls when it discovered that another
1964 declaration of a global function with the same name already
1965 existed.
1967 o Here, in duplicate_decls, we decided to clobber newdecl.
1969 If we're going to do that, we'd better make sure that
1970 olddecl, and not newdecl, is on the list of
1971 instantiations so that if we try to do the instantiation
1972 again we won't get the clobbered declaration. */
1973 reregister_specialization (newdecl,
1974 DECL_TI_TEMPLATE (newdecl),
1975 olddecl);
1977 else
1979 memcpy ((char *) olddecl + sizeof (struct tree_common),
1980 (char *) newdecl + sizeof (struct tree_common),
1981 sizeof (struct tree_decl) - sizeof (struct tree_common)
1982 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1985 DECL_UID (olddecl) = olddecl_uid;
1986 if (olddecl_friend)
1987 DECL_FRIEND_P (olddecl) = 1;
1989 /* NEWDECL contains the merged attribute lists.
1990 Update OLDDECL to be the same. */
1991 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1993 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1994 so that encode_section_info has a chance to look at the new decl
1995 flags and attributes. */
1996 if (DECL_RTL_SET_P (olddecl)
1997 && (TREE_CODE (olddecl) == FUNCTION_DECL
1998 || (TREE_CODE (olddecl) == VAR_DECL
1999 && TREE_STATIC (olddecl))))
2000 make_decl_rtl (olddecl);
2002 return olddecl;
2005 /* Return zero if the declaration NEWDECL is valid
2006 when the declaration OLDDECL (assumed to be for the same name)
2007 has already been seen.
2008 Otherwise return an error message format string with a %s
2009 where the identifier should go. */
2011 static const char *
2012 redeclaration_error_message (tree newdecl, tree olddecl)
2014 if (TREE_CODE (newdecl) == TYPE_DECL)
2016 /* Because C++ can put things into name space for free,
2017 constructs like "typedef struct foo { ... } foo"
2018 would look like an erroneous redeclaration. */
2019 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2020 return 0;
2021 else
2022 return "redefinition of %q#D";
2024 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2026 /* If this is a pure function, its olddecl will actually be
2027 the original initialization to `0' (which we force to call
2028 abort()). Don't complain about redefinition in this case. */
2029 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
2030 return 0;
2032 /* If both functions come from different namespaces, this is not
2033 a redeclaration - this is a conflict with a used function. */
2034 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2035 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
2036 return "%qD conflicts with used function";
2038 /* We'll complain about linkage mismatches in
2039 warn_extern_redeclared_static. */
2041 /* Defining the same name twice is no good. */
2042 if (DECL_INITIAL (olddecl) != NULL_TREE
2043 && DECL_INITIAL (newdecl) != NULL_TREE)
2045 if (DECL_NAME (olddecl) == NULL_TREE)
2046 return "%q#D not declared in class";
2047 else
2048 return "redefinition of %q#D";
2050 return 0;
2052 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2054 tree nt, ot;
2056 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2058 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2059 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2060 return "redefinition of %q#D";
2061 return NULL;
2064 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2065 || (DECL_TEMPLATE_RESULT (newdecl)
2066 == DECL_TEMPLATE_RESULT (olddecl)))
2067 return NULL;
2069 nt = DECL_TEMPLATE_RESULT (newdecl);
2070 if (DECL_TEMPLATE_INFO (nt))
2071 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2072 ot = DECL_TEMPLATE_RESULT (olddecl);
2073 if (DECL_TEMPLATE_INFO (ot))
2074 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2075 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2076 return "redefinition of %q#D";
2078 return NULL;
2080 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2082 /* Objects declared at top level: */
2083 /* If at least one is a reference, it's ok. */
2084 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2085 return 0;
2086 /* Reject two definitions. */
2087 return "redefinition of %q#D";
2089 else
2091 /* Objects declared with block scope: */
2092 /* Reject two definitions, and reject a definition
2093 together with an external reference. */
2094 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2095 return "redeclaration of %q#D";
2096 return 0;
2100 /* Create a new label, named ID. */
2102 static tree
2103 make_label_decl (tree id, int local_p)
2105 tree decl;
2107 decl = build_decl (LABEL_DECL, id, void_type_node);
2109 DECL_CONTEXT (decl) = current_function_decl;
2110 DECL_MODE (decl) = VOIDmode;
2111 C_DECLARED_LABEL_FLAG (decl) = local_p;
2113 /* Say where one reference is to the label, for the sake of the
2114 error if it is not defined. */
2115 DECL_SOURCE_LOCATION (decl) = input_location;
2117 /* Record the fact that this identifier is bound to this label. */
2118 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2120 return decl;
2123 /* Record this label on the list of used labels so that we can check
2124 at the end of the function to see whether or not the label was
2125 actually defined, and so we can check when the label is defined whether
2126 this use is valid. */
2128 static void
2129 use_label (tree decl)
2131 if (named_label_uses == NULL
2132 || named_label_uses->names_in_scope != current_binding_level->names
2133 || named_label_uses->label_decl != decl)
2135 struct named_label_use_list *new_ent;
2136 new_ent = GGC_NEW (struct named_label_use_list);
2137 new_ent->label_decl = decl;
2138 new_ent->names_in_scope = current_binding_level->names;
2139 new_ent->binding_level = current_binding_level;
2140 new_ent->o_goto_locus = input_location;
2141 new_ent->next = named_label_uses;
2142 named_label_uses = new_ent;
2146 /* Look for a label named ID in the current function. If one cannot
2147 be found, create one. (We keep track of used, but undefined,
2148 labels, and complain about them at the end of a function.) */
2150 tree
2151 lookup_label (tree id)
2153 tree decl;
2154 struct named_label_list *ent;
2156 timevar_push (TV_NAME_LOOKUP);
2157 /* You can't use labels at global scope. */
2158 if (current_function_decl == NULL_TREE)
2160 error ("label %qE referenced outside of any function", id);
2161 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2164 /* See if we've already got this label. */
2165 decl = IDENTIFIER_LABEL_VALUE (id);
2166 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2167 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2169 /* Record this label on the list of labels used in this function.
2170 We do this before calling make_label_decl so that we get the
2171 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2172 ent = GGC_CNEW (struct named_label_list);
2173 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2174 ent->next = named_labels;
2175 named_labels = ent;
2177 /* We need a new label. */
2178 decl = make_label_decl (id, /*local_p=*/0);
2180 /* Now fill in the information we didn't have before. */
2181 ent->label_decl = decl;
2183 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2186 /* Declare a local label named ID. */
2188 tree
2189 declare_local_label (tree id)
2191 tree decl;
2193 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2194 this scope we can restore the old value of
2195 IDENTIFIER_TYPE_VALUE. */
2196 current_binding_level->shadowed_labels
2197 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2198 current_binding_level->shadowed_labels);
2199 /* Look for the label. */
2200 decl = make_label_decl (id, /*local_p=*/1);
2201 /* Now fill in the information we didn't have before. */
2202 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
2204 return decl;
2207 /* Returns nonzero if it is ill-formed to jump past the declaration of
2208 DECL. Returns 2 if it's also a real problem. */
2210 static int
2211 decl_jump_unsafe (tree decl)
2213 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
2214 return 0;
2216 if (DECL_INITIAL (decl) == NULL_TREE
2217 && pod_type_p (TREE_TYPE (decl)))
2218 return 0;
2220 /* This is really only important if we're crossing an initialization.
2221 The POD stuff is just pedantry; why should it matter if the class
2222 contains a field of pointer to member type? */
2223 if (DECL_INITIAL (decl)
2224 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
2225 return 2;
2226 return 1;
2229 /* Check that a single previously seen jump to a newly defined label
2230 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2231 the jump context; NAMES are the names in scope in LEVEL at the jump
2232 context; FILE and LINE are the source position of the jump or 0. */
2234 static void
2235 check_previous_goto_1 (tree decl,
2236 struct cp_binding_level* level,
2237 tree names, const location_t *locus)
2239 int identified = 0;
2240 int saw_eh = 0;
2241 struct cp_binding_level *b = current_binding_level;
2242 for (; b; b = b->level_chain)
2244 tree new_decls = b->names;
2245 tree old_decls = (b == level ? names : NULL_TREE);
2246 for (; new_decls != old_decls;
2247 new_decls = TREE_CHAIN (new_decls))
2249 int problem = decl_jump_unsafe (new_decls);
2250 if (! problem)
2251 continue;
2253 if (! identified)
2255 if (decl)
2256 pedwarn ("jump to label %qD", decl);
2257 else
2258 pedwarn ("jump to case label");
2260 if (locus)
2261 pedwarn ("%H from here", locus);
2262 identified = 1;
2265 if (problem > 1)
2266 cp_error_at (" crosses initialization of %q#D",
2267 new_decls);
2268 else
2269 cp_pedwarn_at (" enters scope of non-POD %q#D",
2270 new_decls);
2273 if (b == level)
2274 break;
2275 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
2277 if (! identified)
2279 if (decl)
2280 pedwarn ("jump to label %qD", decl);
2281 else
2282 pedwarn ("jump to case label");
2284 if (locus)
2285 pedwarn ("%H from here", locus);
2286 identified = 1;
2288 if (b->kind == sk_try)
2289 error (" enters try block");
2290 else
2291 error (" enters catch block");
2292 saw_eh = 1;
2297 static void
2298 check_previous_goto (struct named_label_use_list* use)
2300 check_previous_goto_1 (use->label_decl, use->binding_level,
2301 use->names_in_scope, &use->o_goto_locus);
2304 static void
2305 check_switch_goto (struct cp_binding_level* level)
2307 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
2310 /* Check that any previously seen jumps to a newly defined label DECL
2311 are OK. Called by define_label. */
2313 static void
2314 check_previous_gotos (tree decl)
2316 struct named_label_use_list **usep;
2318 if (! TREE_USED (decl))
2319 return;
2321 for (usep = &named_label_uses; *usep; )
2323 struct named_label_use_list *use = *usep;
2324 if (use->label_decl == decl)
2326 check_previous_goto (use);
2327 *usep = use->next;
2329 else
2330 usep = &(use->next);
2334 /* Check that a new jump to a label DECL is OK. Called by
2335 finish_goto_stmt. */
2337 void
2338 check_goto (tree decl)
2340 int identified = 0;
2341 tree bad;
2342 struct named_label_list *lab;
2344 /* We can't know where a computed goto is jumping. So we assume
2345 that it's OK. */
2346 if (! DECL_P (decl))
2347 return;
2349 /* If the label hasn't been defined yet, defer checking. */
2350 if (! DECL_INITIAL (decl))
2352 use_label (decl);
2353 return;
2356 for (lab = named_labels; lab; lab = lab->next)
2357 if (decl == lab->label_decl)
2358 break;
2360 /* If the label is not on named_labels it's a gcc local label, so
2361 it must be in an outer scope, so jumping to it is always OK. */
2362 if (lab == 0)
2363 return;
2365 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2366 && !identified)
2368 cp_pedwarn_at ("jump to label %qD", decl);
2369 pedwarn (" from here");
2370 identified = 1;
2373 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2375 tree b = TREE_VALUE (bad);
2376 int u = decl_jump_unsafe (b);
2378 if (u > 1 && DECL_ARTIFICIAL (b))
2379 /* Can't skip init of __exception_info. */
2380 error ("%J enters catch block", b);
2381 else if (u > 1)
2382 cp_error_at (" skips initialization of %q#D", b);
2383 else
2384 cp_pedwarn_at (" enters scope of non-POD %q#D", b);
2387 if (lab->in_try_scope)
2388 error (" enters try block");
2389 else if (lab->in_catch_scope)
2390 error (" enters catch block");
2393 /* Define a label, specifying the location in the source file.
2394 Return the LABEL_DECL node for the label. */
2396 tree
2397 define_label (location_t location, tree name)
2399 tree decl = lookup_label (name);
2400 struct named_label_list *ent;
2401 struct cp_binding_level *p;
2403 timevar_push (TV_NAME_LOOKUP);
2404 for (ent = named_labels; ent; ent = ent->next)
2405 if (ent->label_decl == decl)
2406 break;
2408 /* After labels, make any new cleanups in the function go into their
2409 own new (temporary) binding contour. */
2410 for (p = current_binding_level;
2411 p->kind != sk_function_parms;
2412 p = p->level_chain)
2413 p->more_cleanups_ok = 0;
2415 if (name == get_identifier ("wchar_t"))
2416 pedwarn ("label named wchar_t");
2418 if (DECL_INITIAL (decl) != NULL_TREE)
2419 error ("duplicate label `%D'", decl);
2420 else
2422 /* Mark label as having been defined. */
2423 DECL_INITIAL (decl) = error_mark_node;
2424 /* Say where in the source. */
2425 DECL_SOURCE_LOCATION (decl) = location;
2426 if (ent)
2428 ent->names_in_scope = current_binding_level->names;
2429 ent->binding_level = current_binding_level;
2431 check_previous_gotos (decl);
2434 timevar_pop (TV_NAME_LOOKUP);
2435 return decl;
2438 struct cp_switch
2440 struct cp_binding_level *level;
2441 struct cp_switch *next;
2442 /* The SWITCH_STMT being built. */
2443 tree switch_stmt;
2444 /* A splay-tree mapping the low element of a case range to the high
2445 element, or NULL_TREE if there is no high element. Used to
2446 determine whether or not a new case label duplicates an old case
2447 label. We need a tree, rather than simply a hash table, because
2448 of the GNU case range extension. */
2449 splay_tree cases;
2452 /* A stack of the currently active switch statements. The innermost
2453 switch statement is on the top of the stack. There is no need to
2454 mark the stack for garbage collection because it is only active
2455 during the processing of the body of a function, and we never
2456 collect at that point. */
2458 static struct cp_switch *switch_stack;
2460 /* Called right after a switch-statement condition is parsed.
2461 SWITCH_STMT is the switch statement being parsed. */
2463 void
2464 push_switch (tree switch_stmt)
2466 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
2467 p->level = current_binding_level;
2468 p->next = switch_stack;
2469 p->switch_stmt = switch_stmt;
2470 p->cases = splay_tree_new (case_compare, NULL, NULL);
2471 switch_stack = p;
2474 void
2475 pop_switch (void)
2477 struct cp_switch *cs = switch_stack;
2479 /* Emit warnings as needed. */
2480 c_do_switch_warnings (cs->cases, cs->switch_stmt);
2482 splay_tree_delete (cs->cases);
2483 switch_stack = switch_stack->next;
2484 free (cs);
2487 /* Note that we've seen a definition of a case label, and complain if this
2488 is a bad place for one. */
2490 tree
2491 finish_case_label (tree low_value, tree high_value)
2493 tree cond, r;
2494 struct cp_binding_level *p;
2496 if (processing_template_decl)
2498 tree label;
2500 /* For templates, just add the case label; we'll do semantic
2501 analysis at instantiation-time. */
2502 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2503 return add_stmt (build_case_label (low_value, high_value, label));
2506 /* Find the condition on which this switch statement depends. */
2507 cond = SWITCH_COND (switch_stack->switch_stmt);
2508 if (cond && TREE_CODE (cond) == TREE_LIST)
2509 cond = TREE_VALUE (cond);
2511 r = c_add_case_label (switch_stack->cases, cond, TREE_TYPE (cond),
2512 low_value, high_value);
2514 check_switch_goto (switch_stack->level);
2516 /* After labels, make any new cleanups in the function go into their
2517 own new (temporary) binding contour. */
2518 for (p = current_binding_level;
2519 p->kind != sk_function_parms;
2520 p = p->level_chain)
2521 p->more_cleanups_ok = 0;
2523 return r;
2526 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2528 static hashval_t
2529 typename_hash (const void* k)
2531 hashval_t hash;
2532 tree t = (tree) k;
2534 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2535 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2537 return hash;
2540 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2542 static int
2543 typename_compare (const void * k1, const void * k2)
2545 tree t1;
2546 tree t2;
2547 tree d1;
2548 tree d2;
2550 t1 = (tree) k1;
2551 t2 = (tree) k2;
2552 d1 = TYPE_NAME (t1);
2553 d2 = TYPE_NAME (t2);
2555 return (DECL_NAME (d1) == DECL_NAME (d2)
2556 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
2557 && ((TREE_TYPE (t1) != NULL_TREE)
2558 == (TREE_TYPE (t2) != NULL_TREE))
2559 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2560 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
2563 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2564 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
2565 is non-NULL, this type is being created by the implicit typename
2566 extension, and BASE_TYPE is a type named `t' in some base class of
2567 `T' which depends on template parameters.
2569 Returns the new TYPENAME_TYPE. */
2571 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2573 static tree
2574 build_typename_type (tree context, tree name, tree fullname)
2576 tree t;
2577 tree d;
2578 void **e;
2580 if (typename_htab == NULL)
2582 typename_htab = htab_create_ggc (61, &typename_hash,
2583 &typename_compare, NULL);
2586 /* Build the TYPENAME_TYPE. */
2587 t = make_aggr_type (TYPENAME_TYPE);
2588 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2589 TYPENAME_TYPE_FULLNAME (t) = fullname;
2591 /* Build the corresponding TYPE_DECL. */
2592 d = build_decl (TYPE_DECL, name, t);
2593 TYPE_NAME (TREE_TYPE (d)) = d;
2594 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2595 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2596 DECL_ARTIFICIAL (d) = 1;
2598 /* See if we already have this type. */
2599 e = htab_find_slot (typename_htab, t, INSERT);
2600 if (*e)
2601 t = (tree) *e;
2602 else
2603 *e = t;
2605 return t;
2608 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
2609 unless an error occurs, in which case error_mark_node is returned.
2610 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
2611 set, we return that, rather than the _TYPE it corresponds to, in
2612 other cases we look through the type decl. If TF_ERROR is set,
2613 complain about errors, otherwise be quiet. */
2615 tree
2616 make_typename_type (tree context, tree name, tsubst_flags_t complain)
2618 tree fullname;
2620 if (name == error_mark_node
2621 || context == NULL_TREE
2622 || context == error_mark_node)
2623 return error_mark_node;
2625 if (TYPE_P (name))
2627 if (!(TYPE_LANG_SPECIFIC (name)
2628 && (CLASSTYPE_IS_TEMPLATE (name)
2629 || CLASSTYPE_USE_TEMPLATE (name))))
2630 name = TYPE_IDENTIFIER (name);
2631 else
2632 /* Create a TEMPLATE_ID_EXPR for the type. */
2633 name = build_nt (TEMPLATE_ID_EXPR,
2634 CLASSTYPE_TI_TEMPLATE (name),
2635 CLASSTYPE_TI_ARGS (name));
2637 else if (TREE_CODE (name) == TYPE_DECL)
2638 name = DECL_NAME (name);
2640 fullname = name;
2642 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2644 name = TREE_OPERAND (name, 0);
2645 if (TREE_CODE (name) == TEMPLATE_DECL)
2646 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2648 if (TREE_CODE (name) == TEMPLATE_DECL)
2650 error ("%qD used without template parameters", name);
2651 return error_mark_node;
2653 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2655 if (TREE_CODE (context) == NAMESPACE_DECL)
2657 /* We can get here from typename_sub0 in the explicit_template_type
2658 expansion. Just fail. */
2659 if (complain & tf_error)
2660 error ("no class template named %q#T in %q#T", name, context);
2661 return error_mark_node;
2664 if (!dependent_type_p (context)
2665 || currently_open_class (context))
2667 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2669 tree tmpl = NULL_TREE;
2670 if (IS_AGGR_TYPE (context))
2671 tmpl = lookup_field (context, name, 0, false);
2672 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2674 if (complain & tf_error)
2675 error ("no class template named %q#T in %q#T",
2676 name, context);
2677 return error_mark_node;
2680 if (complain & tf_error)
2681 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2683 return lookup_template_class (tmpl,
2684 TREE_OPERAND (fullname, 1),
2685 NULL_TREE, context,
2686 /*entering_scope=*/0,
2687 tf_error | tf_warning | tf_user);
2689 else
2691 tree t;
2693 if (!IS_AGGR_TYPE (context))
2695 if (complain & tf_error)
2696 error ("no type named %q#T in %q#T", name, context);
2697 return error_mark_node;
2700 t = lookup_field (context, name, 0, true);
2701 if (t)
2703 if (TREE_CODE (t) != TYPE_DECL)
2705 if (complain & tf_error)
2706 error ("no type named %q#T in %q#T", name, context);
2707 return error_mark_node;
2710 if (complain & tf_error)
2711 perform_or_defer_access_check (TYPE_BINFO (context), t);
2713 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2714 t = TREE_TYPE (t);
2716 return t;
2721 /* If the CONTEXT is not a template type, then either the field is
2722 there now or its never going to be. */
2723 if (!dependent_type_p (context))
2725 if (complain & tf_error)
2726 error ("no type named %q#T in %q#T", name, context);
2727 return error_mark_node;
2730 return build_typename_type (context, name, fullname);
2733 /* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
2734 unless an error occurs, in which case error_mark_node is returned.
2735 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
2736 corresponds to. If COMPLAIN zero, don't complain about any errors
2737 that occur. */
2739 tree
2740 make_unbound_class_template (tree context, tree name, tsubst_flags_t complain)
2742 tree t;
2743 tree d;
2745 if (TYPE_P (name))
2746 name = TYPE_IDENTIFIER (name);
2747 else if (DECL_P (name))
2748 name = DECL_NAME (name);
2749 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
2751 if (!dependent_type_p (context)
2752 || currently_open_class (context))
2754 tree tmpl = NULL_TREE;
2756 if (IS_AGGR_TYPE (context))
2757 tmpl = lookup_field (context, name, 0, false);
2759 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2761 if (complain & tf_error)
2762 error ("no class template named %q#T in %q#T", name, context);
2763 return error_mark_node;
2766 if (complain & tf_error)
2767 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2769 return tmpl;
2772 /* Build the UNBOUND_CLASS_TEMPLATE. */
2773 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2774 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2775 TREE_TYPE (t) = NULL_TREE;
2777 /* Build the corresponding TEMPLATE_DECL. */
2778 d = build_decl (TEMPLATE_DECL, name, t);
2779 TYPE_NAME (TREE_TYPE (d)) = d;
2780 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2781 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2782 DECL_ARTIFICIAL (d) = 1;
2784 return t;
2789 /* Push the declarations of builtin types into the namespace.
2790 RID_INDEX is the index of the builtin type in the array
2791 RID_POINTERS. NAME is the name used when looking up the builtin
2792 type. TYPE is the _TYPE node for the builtin type. */
2794 void
2795 record_builtin_type (enum rid rid_index,
2796 const char* name,
2797 tree type)
2799 tree rname = NULL_TREE, tname = NULL_TREE;
2800 tree tdecl = NULL_TREE;
2802 if ((int) rid_index < (int) RID_MAX)
2803 rname = ridpointers[(int) rid_index];
2804 if (name)
2805 tname = get_identifier (name);
2807 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2808 eliminated. Built-in types should not be looked up name; their
2809 names are keywords that the parser can recognize. However, there
2810 is code in c-common.c that uses identifier_global_value to look
2811 up built-in types by name. */
2812 if (tname)
2814 tdecl = build_decl (TYPE_DECL, tname, type);
2815 DECL_ARTIFICIAL (tdecl) = 1;
2816 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2818 if (rname)
2820 if (!tdecl)
2822 tdecl = build_decl (TYPE_DECL, rname, type);
2823 DECL_ARTIFICIAL (tdecl) = 1;
2825 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2828 if (!TYPE_NAME (type))
2829 TYPE_NAME (type) = tdecl;
2831 if (tdecl)
2832 debug_hooks->type_decl (tdecl, 0);
2835 /* Record one of the standard Java types.
2836 * Declare it as having the given NAME.
2837 * If SIZE > 0, it is the size of one of the integral types;
2838 * otherwise it is the negative of the size of one of the other types. */
2840 static tree
2841 record_builtin_java_type (const char* name, int size)
2843 tree type, decl;
2844 if (size > 0)
2845 type = make_signed_type (size);
2846 else if (size > -32)
2847 { /* "__java_char" or ""__java_boolean". */
2848 type = make_unsigned_type (-size);
2849 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2851 else
2852 { /* "__java_float" or ""__java_double". */
2853 type = make_node (REAL_TYPE);
2854 TYPE_PRECISION (type) = - size;
2855 layout_type (type);
2857 record_builtin_type (RID_MAX, name, type);
2858 decl = TYPE_NAME (type);
2860 /* Suppress generate debug symbol entries for these types,
2861 since for normal C++ they are just clutter.
2862 However, push_lang_context undoes this if extern "Java" is seen. */
2863 DECL_IGNORED_P (decl) = 1;
2865 TYPE_FOR_JAVA (type) = 1;
2866 return type;
2869 /* Push a type into the namespace so that the back-ends ignore it. */
2871 static void
2872 record_unknown_type (tree type, const char* name)
2874 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2875 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2876 DECL_IGNORED_P (decl) = 1;
2877 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2878 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2879 TYPE_ALIGN (type) = 1;
2880 TYPE_USER_ALIGN (type) = 0;
2881 TYPE_MODE (type) = TYPE_MODE (void_type_node);
2884 /* An string for which we should create an IDENTIFIER_NODE at
2885 startup. */
2887 typedef struct predefined_identifier
2889 /* The name of the identifier. */
2890 const char *const name;
2891 /* The place where the IDENTIFIER_NODE should be stored. */
2892 tree *const node;
2893 /* Nonzero if this is the name of a constructor or destructor. */
2894 const int ctor_or_dtor_p;
2895 } predefined_identifier;
2897 /* Create all the predefined identifiers. */
2899 static void
2900 initialize_predefined_identifiers (void)
2902 const predefined_identifier *pid;
2904 /* A table of identifiers to create at startup. */
2905 static const predefined_identifier predefined_identifiers[] = {
2906 { "C++", &lang_name_cplusplus, 0 },
2907 { "C", &lang_name_c, 0 },
2908 { "Java", &lang_name_java, 0 },
2909 { CTOR_NAME, &ctor_identifier, 1 },
2910 { "__base_ctor", &base_ctor_identifier, 1 },
2911 { "__comp_ctor", &complete_ctor_identifier, 1 },
2912 { DTOR_NAME, &dtor_identifier, 1 },
2913 { "__comp_dtor", &complete_dtor_identifier, 1 },
2914 { "__base_dtor", &base_dtor_identifier, 1 },
2915 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
2916 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
2917 { "nelts", &nelts_identifier, 0 },
2918 { THIS_NAME, &this_identifier, 0 },
2919 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
2920 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
2921 { "_vptr", &vptr_identifier, 0 },
2922 { "__vtt_parm", &vtt_parm_identifier, 0 },
2923 { "::", &global_scope_name, 0 },
2924 { "std", &std_identifier, 0 },
2925 { NULL, NULL, 0 }
2928 for (pid = predefined_identifiers; pid->name; ++pid)
2930 *pid->node = get_identifier (pid->name);
2931 if (pid->ctor_or_dtor_p)
2932 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2936 /* Create the predefined scalar types of C,
2937 and some nodes representing standard constants (0, 1, (void *)0).
2938 Initialize the global binding level.
2939 Make definitions for built-in primitive functions. */
2941 void
2942 cxx_init_decl_processing (void)
2944 tree void_ftype;
2945 tree void_ftype_ptr;
2947 build_common_tree_nodes (flag_signed_char, false);
2949 /* Create all the identifiers we need. */
2950 initialize_predefined_identifiers ();
2952 /* Create the global variables. */
2953 push_to_top_level ();
2955 current_function_decl = NULL_TREE;
2956 current_binding_level = NULL;
2957 /* Enter the global namespace. */
2958 gcc_assert (global_namespace == NULL_TREE);
2959 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2960 void_type_node);
2961 begin_scope (sk_namespace, global_namespace);
2963 current_lang_name = NULL_TREE;
2965 /* Adjust various flags based on command-line settings. */
2966 if (!flag_permissive)
2967 flag_pedantic_errors = 1;
2968 if (!flag_no_inline)
2970 flag_inline_trees = 1;
2971 flag_no_inline = 1;
2973 if (flag_inline_functions)
2975 flag_inline_trees = 2;
2976 flag_inline_functions = 0;
2979 /* Force minimum function alignment if using the least significant
2980 bit of function pointers to store the virtual bit. */
2981 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
2982 && force_align_functions_log < 1)
2983 force_align_functions_log = 1;
2985 /* Initially, C. */
2986 current_lang_name = lang_name_c;
2988 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
2989 TREE_TYPE (error_mark_list) = error_mark_node;
2991 /* Create the `std' namespace. */
2992 push_namespace (std_identifier);
2993 std_node = current_namespace;
2994 pop_namespace ();
2996 c_common_nodes_and_builtins ();
2998 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
2999 java_short_type_node = record_builtin_java_type ("__java_short", 16);
3000 java_int_type_node = record_builtin_java_type ("__java_int", 32);
3001 java_long_type_node = record_builtin_java_type ("__java_long", 64);
3002 java_float_type_node = record_builtin_java_type ("__java_float", -32);
3003 java_double_type_node = record_builtin_java_type ("__java_double", -64);
3004 java_char_type_node = record_builtin_java_type ("__java_char", -16);
3005 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3007 integer_two_node = build_int_cst (NULL_TREE, 2);
3008 integer_three_node = build_int_cst (NULL_TREE, 3);
3010 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3011 truthvalue_type_node = boolean_type_node;
3012 truthvalue_false_node = boolean_false_node;
3013 truthvalue_true_node = boolean_true_node;
3015 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3017 #if 0
3018 record_builtin_type (RID_MAX, NULL, string_type_node);
3019 #endif
3021 delta_type_node = ptrdiff_type_node;
3022 vtable_index_type = ptrdiff_type_node;
3024 vtt_parm_type = build_pointer_type (const_ptr_type_node);
3025 void_ftype = build_function_type (void_type_node, void_list_node);
3026 void_ftype_ptr = build_function_type (void_type_node,
3027 tree_cons (NULL_TREE,
3028 ptr_type_node,
3029 void_list_node));
3030 void_ftype_ptr
3031 = build_exception_variant (void_ftype_ptr, empty_except_spec);
3033 /* C++ extensions */
3035 unknown_type_node = make_node (UNKNOWN_TYPE);
3036 record_unknown_type (unknown_type_node, "unknown type");
3038 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
3039 TREE_TYPE (unknown_type_node) = unknown_type_node;
3041 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3042 result. */
3043 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3044 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3047 /* Make sure we get a unique function type, so we can give
3048 its pointer type a name. (This wins for gdb.) */
3049 tree vfunc_type = make_node (FUNCTION_TYPE);
3050 TREE_TYPE (vfunc_type) = integer_type_node;
3051 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3052 layout_type (vfunc_type);
3054 vtable_entry_type = build_pointer_type (vfunc_type);
3056 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3058 vtbl_type_node
3059 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3060 layout_type (vtbl_type_node);
3061 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3062 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3063 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3064 layout_type (vtbl_ptr_type_node);
3065 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3067 push_namespace (get_identifier ("__cxxabiv1"));
3068 abi_node = current_namespace;
3069 pop_namespace ();
3071 global_type_node = make_node (LANG_TYPE);
3072 record_unknown_type (global_type_node, "global type");
3074 /* Now, C++. */
3075 current_lang_name = lang_name_cplusplus;
3078 tree bad_alloc_id;
3079 tree bad_alloc_type_node;
3080 tree bad_alloc_decl;
3081 tree newtype, deltype;
3082 tree ptr_ftype_sizetype;
3084 push_namespace (std_identifier);
3085 bad_alloc_id = get_identifier ("bad_alloc");
3086 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3087 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3088 bad_alloc_decl
3089 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3090 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3091 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3092 pop_namespace ();
3094 ptr_ftype_sizetype
3095 = build_function_type (ptr_type_node,
3096 tree_cons (NULL_TREE,
3097 size_type_node,
3098 void_list_node));
3099 newtype = build_exception_variant
3100 (ptr_ftype_sizetype, add_exception_specifier
3101 (NULL_TREE, bad_alloc_type_node, -1));
3102 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3103 push_cp_library_fn (NEW_EXPR, newtype);
3104 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3105 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3106 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3109 abort_fndecl
3110 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3112 /* Perform other language dependent initializations. */
3113 init_class_processing ();
3114 init_rtti_processing ();
3116 if (flag_exceptions)
3117 init_exception_processing ();
3119 if (! supports_one_only ())
3120 flag_weak = 0;
3122 make_fname_decl = cp_make_fname_decl;
3123 start_fname_decls ();
3125 /* Show we use EH for cleanups. */
3126 if (flag_exceptions)
3127 using_eh_for_cleanups ();
3130 /* Generate an initializer for a function naming variable from
3131 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3132 filled in with the type of the init. */
3134 tree
3135 cp_fname_init (const char* name, tree *type_p)
3137 tree domain = NULL_TREE;
3138 tree type;
3139 tree init = NULL_TREE;
3140 size_t length = 0;
3142 if (name)
3144 length = strlen (name);
3145 domain = build_index_type (size_int (length));
3146 init = build_string (length + 1, name);
3149 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3150 type = build_cplus_array_type (type, domain);
3152 *type_p = type;
3154 if (init)
3155 TREE_TYPE (init) = type;
3156 else
3157 init = error_mark_node;
3159 return init;
3162 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3163 decl, NAME is the initialization string and TYPE_DEP indicates whether
3164 NAME depended on the type of the function. We make use of that to detect
3165 __PRETTY_FUNCTION__ inside a template fn. This is being done
3166 lazily at the point of first use, so we mustn't push the decl now. */
3168 static tree
3169 cp_make_fname_decl (tree id, int type_dep)
3171 const char *const name = (type_dep && processing_template_decl
3172 ? NULL : fname_as_string (type_dep));
3173 tree type;
3174 tree init = cp_fname_init (name, &type);
3175 tree decl = build_decl (VAR_DECL, id, type);
3177 if (name)
3178 free ((char *) name);
3180 /* As we're using pushdecl_with_scope, we must set the context. */
3181 DECL_CONTEXT (decl) = current_function_decl;
3182 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3184 TREE_STATIC (decl) = 1;
3185 TREE_READONLY (decl) = 1;
3186 DECL_ARTIFICIAL (decl) = 1;
3187 DECL_INITIAL (decl) = init;
3189 TREE_USED (decl) = 1;
3191 if (current_function_decl)
3193 struct cp_binding_level *b = current_binding_level;
3194 while (b->level_chain->kind != sk_function_parms)
3195 b = b->level_chain;
3196 pushdecl_with_scope (decl, b);
3197 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
3199 else
3200 pushdecl_top_level_and_finish (decl, init);
3202 return decl;
3205 /* Make a definition for a builtin function named NAME in the current
3206 namespace, whose data type is TYPE and whose context is CONTEXT.
3207 TYPE should be a function type with argument types.
3209 CLASS and CODE tell later passes how to compile calls to this function.
3210 See tree.h for possible values.
3212 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3213 the name to be called if we can't opencode the function.
3214 If ATTRS is nonzero, use that for the function's attribute
3215 list. */
3217 static tree
3218 builtin_function_1 (const char* name,
3219 tree type,
3220 tree context,
3221 enum built_in_function code,
3222 enum built_in_class class,
3223 const char* libname,
3224 tree attrs)
3226 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3227 DECL_BUILT_IN_CLASS (decl) = class;
3228 DECL_FUNCTION_CODE (decl) = code;
3229 DECL_CONTEXT (decl) = context;
3231 pushdecl (decl);
3233 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3234 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3235 function in the namespace. */
3236 if (libname)
3237 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3239 /* Warn if a function in the namespace for users
3240 is used without an occasion to consider it declared. */
3241 if (name[0] != '_' || name[1] != '_')
3242 DECL_ANTICIPATED (decl) = 1;
3244 /* Possibly apply some default attributes to this built-in function. */
3245 if (attrs)
3246 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3247 else
3248 decl_attributes (&decl, NULL_TREE, 0);
3250 return decl;
3253 /* Entry point for the benefit of c_common_nodes_and_builtins.
3255 Make a definition for a builtin function named NAME and whose data type
3256 is TYPE. TYPE should be a function type with argument types. This
3257 function places the anticipated declaration in the global namespace
3258 and additionally in the std namespace if appropriate.
3260 CLASS and CODE tell later passes how to compile calls to this function.
3261 See tree.h for possible values.
3263 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3264 the name to be called if we can't opencode the function.
3266 If ATTRS is nonzero, use that for the function's attribute
3267 list. */
3269 tree
3270 builtin_function (const char* name,
3271 tree type,
3272 int code,
3273 enum built_in_class cl,
3274 const char* libname,
3275 tree attrs)
3277 /* All builtins that don't begin with an '_' should additionally
3278 go in the 'std' namespace. */
3279 if (name[0] != '_')
3281 push_namespace (std_identifier);
3282 builtin_function_1 (name, type, std_node, code, cl, libname, attrs);
3283 pop_namespace ();
3286 return builtin_function_1 (name, type, NULL_TREE, code,
3287 cl, libname, attrs);
3290 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3291 function. Not called directly. */
3293 static tree
3294 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3296 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3297 DECL_EXTERNAL (fn) = 1;
3298 TREE_PUBLIC (fn) = 1;
3299 DECL_ARTIFICIAL (fn) = 1;
3300 TREE_NOTHROW (fn) = 1;
3301 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3302 SET_DECL_LANGUAGE (fn, lang_c);
3303 /* Runtime library routines are, by definition, available in an
3304 external shared object. */
3305 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3306 DECL_VISIBILITY_SPECIFIED (fn) = 1;
3307 return fn;
3310 /* Returns the _DECL for a library function with C linkage.
3311 We assume that such functions never throw; if this is incorrect,
3312 callers should unset TREE_NOTHROW. */
3314 tree
3315 build_library_fn (tree name, tree type)
3317 return build_library_fn_1 (name, ERROR_MARK, type);
3320 /* Returns the _DECL for a library function with C++ linkage. */
3322 static tree
3323 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3325 tree fn = build_library_fn_1 (name, operator_code, type);
3326 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3327 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3328 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3329 return fn;
3332 /* Like build_library_fn, but takes a C string instead of an
3333 IDENTIFIER_NODE. */
3335 tree
3336 build_library_fn_ptr (const char* name, tree type)
3338 return build_library_fn (get_identifier (name), type);
3341 /* Like build_cp_library_fn, but takes a C string instead of an
3342 IDENTIFIER_NODE. */
3344 tree
3345 build_cp_library_fn_ptr (const char* name, tree type)
3347 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3350 /* Like build_library_fn, but also pushes the function so that we will
3351 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3353 tree
3354 push_library_fn (tree name, tree type)
3356 tree fn = build_library_fn (name, type);
3357 pushdecl_top_level (fn);
3358 return fn;
3361 /* Like build_cp_library_fn, but also pushes the function so that it
3362 will be found by normal lookup. */
3364 static tree
3365 push_cp_library_fn (enum tree_code operator_code, tree type)
3367 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3368 operator_code,
3369 type);
3370 pushdecl (fn);
3371 return fn;
3374 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3375 a FUNCTION_TYPE. */
3377 tree
3378 push_void_library_fn (tree name, tree parmtypes)
3380 tree type = build_function_type (void_type_node, parmtypes);
3381 return push_library_fn (name, type);
3384 /* Like push_library_fn, but also note that this function throws
3385 and does not return. Used for __throw_foo and the like. */
3387 tree
3388 push_throw_library_fn (tree name, tree type)
3390 tree fn = push_library_fn (name, type);
3391 TREE_THIS_VOLATILE (fn) = 1;
3392 TREE_NOTHROW (fn) = 0;
3393 return fn;
3396 /* When we call finish_struct for an anonymous union, we create
3397 default copy constructors and such. But, an anonymous union
3398 shouldn't have such things; this function undoes the damage to the
3399 anonymous union type T.
3401 (The reason that we create the synthesized methods is that we don't
3402 distinguish `union { int i; }' from `typedef union { int i; } U'.
3403 The first is an anonymous union; the second is just an ordinary
3404 union type.) */
3406 void
3407 fixup_anonymous_aggr (tree t)
3409 tree *q;
3411 /* Wipe out memory of synthesized methods. */
3412 TYPE_HAS_CONSTRUCTOR (t) = 0;
3413 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3414 TYPE_HAS_INIT_REF (t) = 0;
3415 TYPE_HAS_CONST_INIT_REF (t) = 0;
3416 TYPE_HAS_ASSIGN_REF (t) = 0;
3417 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3419 /* Splice the implicitly generated functions out of the TYPE_METHODS
3420 list. */
3421 q = &TYPE_METHODS (t);
3422 while (*q)
3424 if (DECL_ARTIFICIAL (*q))
3425 *q = TREE_CHAIN (*q);
3426 else
3427 q = &TREE_CHAIN (*q);
3430 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3431 if (TYPE_METHODS (t))
3432 error ("%Jan anonymous union cannot have function members",
3433 TYPE_MAIN_DECL (t));
3435 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3436 assignment operators (because they cannot have these methods themselves).
3437 For anonymous unions this is already checked because they are not allowed
3438 in any union, otherwise we have to check it. */
3439 if (TREE_CODE (t) != UNION_TYPE)
3441 tree field, type;
3443 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3444 if (TREE_CODE (field) == FIELD_DECL)
3446 type = TREE_TYPE (field);
3447 if (CLASS_TYPE_P (type))
3449 if (TYPE_NEEDS_CONSTRUCTING (type))
3450 cp_error_at ("member %q#D with constructor not allowed "
3451 "in anonymous aggregate",
3452 field);
3453 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3454 cp_error_at ("member %q#D with destructor not allowed "
3455 "in anonymous aggregate",
3456 field);
3457 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3458 cp_error_at ("member %q#D with copy assignment operator "
3459 "not allowed in anonymous aggregate",
3460 field);
3466 /* Make sure that a declaration with no declarator is well-formed, i.e.
3467 just declares a tagged type or anonymous union.
3469 Returns the type declared; or NULL_TREE if none. */
3471 tree
3472 check_tag_decl (cp_decl_specifier_seq *declspecs)
3474 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3475 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3476 /* If a class, struct, or enum type is declared by the DECLSPECS
3477 (i.e, if a class-specifier, enum-specifier, or non-typename
3478 elaborated-type-specifier appears in the DECLSPECS),
3479 DECLARED_TYPE is set to the corresponding type. */
3480 tree declared_type = NULL_TREE;
3481 bool error_p = false;
3483 if (declspecs->multiple_types_p)
3484 error ("multiple types in one declaration");
3485 else if (declspecs->redefined_builtin_type)
3487 if (!in_system_header)
3488 pedwarn ("redeclaration of C++ built-in type %qT",
3489 declspecs->redefined_builtin_type);
3490 return NULL_TREE;
3493 if (TYPE_P (declspecs->type)
3494 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3495 && IS_AGGR_TYPE (declspecs->type))
3496 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3497 declared_type = declspecs->type;
3498 else if (declspecs->type == error_mark_node)
3499 error_p = true;
3500 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3501 pedwarn ("declaration does not declare anything");
3502 /* Check for an anonymous union. */
3503 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3504 && TYPE_ANONYMOUS_P (declared_type))
3506 /* 7/3 In a simple-declaration, the optional init-declarator-list
3507 can be omitted only when declaring a class (clause 9) or
3508 enumeration (7.2), that is, when the decl-specifier-seq contains
3509 either a class-specifier, an elaborated-type-specifier with
3510 a class-key (9.1), or an enum-specifier. In these cases and
3511 whenever a class-specifier or enum-specifier is present in the
3512 decl-specifier-seq, the identifiers in these specifiers are among
3513 the names being declared by the declaration (as class-name,
3514 enum-names, or enumerators, depending on the syntax). In such
3515 cases, and except for the declaration of an unnamed bit-field (9.6),
3516 the decl-specifier-seq shall introduce one or more names into the
3517 program, or shall redeclare a name introduced by a previous
3518 declaration. [Example:
3519 enum { }; // ill-formed
3520 typedef class { }; // ill-formed
3521 --end example] */
3522 if (saw_typedef)
3524 error ("missing type-name in typedef-declaration");
3525 return NULL_TREE;
3527 /* Anonymous unions are objects, so they can have specifiers. */;
3528 SET_ANON_AGGR_TYPE_P (declared_type);
3530 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3531 && !in_system_header)
3532 pedwarn ("ISO C++ prohibits anonymous structs");
3535 else
3537 if (declspecs->specs[(int)ds_inline]
3538 || declspecs->specs[(int)ds_virtual])
3539 error ("%qs can only be specified for functions",
3540 declspecs->specs[(int)ds_inline]
3541 ? "inline" : "virtual");
3542 else if (saw_friend
3543 && (!current_class_type
3544 || current_scope () != current_class_type))
3545 error ("%<friend%> can only be specified inside a class");
3546 else if (declspecs->specs[(int)ds_explicit])
3547 error ("%<explicit%> can only be specified for constructors");
3548 else if (declspecs->storage_class)
3549 error ("a storage class can only be specified for objects "
3550 "and functions");
3551 else if (declspecs->specs[(int)ds_const]
3552 || declspecs->specs[(int)ds_volatile]
3553 || declspecs->specs[(int)ds_restrict]
3554 || declspecs->specs[(int)ds_thread])
3555 error ("qualifiers can only be specified for objects "
3556 "and functions");
3559 return declared_type;
3562 /* Called when a declaration is seen that contains no names to declare.
3563 If its type is a reference to a structure, union or enum inherited
3564 from a containing scope, shadow that tag name for the current scope
3565 with a forward reference.
3566 If its type defines a new named structure or union
3567 or defines an enum, it is valid but we need not do anything here.
3568 Otherwise, it is an error.
3570 C++: may have to grok the declspecs to learn about static,
3571 complain for anonymous unions.
3573 Returns the TYPE declared -- or NULL_TREE if none. */
3575 tree
3576 shadow_tag (cp_decl_specifier_seq *declspecs)
3578 tree t = check_tag_decl (declspecs);
3580 if (!t)
3581 return NULL_TREE;
3583 maybe_process_partial_specialization (t);
3585 /* This is where the variables in an anonymous union are
3586 declared. An anonymous union declaration looks like:
3587 union { ... } ;
3588 because there is no declarator after the union, the parser
3589 sends that declaration here. */
3590 if (ANON_AGGR_TYPE_P (t))
3592 fixup_anonymous_aggr (t);
3594 if (TYPE_FIELDS (t))
3596 tree decl = grokdeclarator (/*declarator=*/NULL,
3597 declspecs, NORMAL, 0, NULL);
3598 finish_anon_union (decl);
3602 return t;
3605 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3607 tree
3608 groktypename (cp_decl_specifier_seq *type_specifiers,
3609 const cp_declarator *declarator)
3611 tree attrs;
3612 tree type;
3613 attrs = type_specifiers->attributes;
3614 type_specifiers->attributes = NULL_TREE;
3615 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3616 if (attrs)
3617 cplus_decl_attributes (&type, attrs, 0);
3618 return type;
3621 /* Decode a declarator in an ordinary declaration or data definition.
3622 This is called as soon as the type information and variable name
3623 have been parsed, before parsing the initializer if any.
3624 Here we create the ..._DECL node, fill in its type,
3625 and put it on the list of decls for the current context.
3626 The ..._DECL node is returned as the value.
3628 Exception: for arrays where the length is not specified,
3629 the type is left null, to be filled in by `cp_finish_decl'.
3631 Function definitions do not come here; they go to start_function
3632 instead. However, external and forward declarations of functions
3633 do go through here. Structure field declarations are done by
3634 grokfield and not through here. */
3636 tree
3637 start_decl (const cp_declarator *declarator,
3638 cp_decl_specifier_seq *declspecs,
3639 int initialized,
3640 tree attributes,
3641 tree prefix_attributes,
3642 bool *pop_scope_p)
3644 tree decl;
3645 tree type, tem;
3646 tree context;
3648 /* This should only be done once on the top most decl. */
3649 if (have_extern_spec)
3651 declspecs->storage_class = sc_extern;
3652 have_extern_spec = false;
3655 /* An object declared as __attribute__((deprecated)) suppresses
3656 warnings of uses of other deprecated items. */
3657 if (lookup_attribute ("deprecated", attributes))
3658 deprecated_state = DEPRECATED_SUPPRESS;
3660 attributes = chainon (attributes, prefix_attributes);
3662 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3663 &attributes);
3665 deprecated_state = DEPRECATED_NORMAL;
3667 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
3668 return NULL_TREE;
3670 type = TREE_TYPE (decl);
3672 if (type == error_mark_node)
3673 return NULL_TREE;
3675 context = DECL_CONTEXT (decl);
3677 if (context)
3678 *pop_scope_p = push_scope (context);
3679 else
3680 *pop_scope_p = false;
3682 /* We are only interested in class contexts, later. */
3683 if (context && TREE_CODE (context) == NAMESPACE_DECL)
3684 context = NULL_TREE;
3686 if (initialized)
3687 /* Is it valid for this decl to have an initializer at all?
3688 If not, set INITIALIZED to zero, which will indirectly
3689 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3690 switch (TREE_CODE (decl))
3692 case TYPE_DECL:
3693 error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3694 initialized = 0;
3695 break;
3697 case FUNCTION_DECL:
3698 error ("function %q#D is initialized like a variable", decl);
3699 initialized = 0;
3700 break;
3702 default:
3703 break;
3706 if (initialized)
3708 if (! toplevel_bindings_p ()
3709 && DECL_EXTERNAL (decl))
3710 warning ("declaration of %q#D has %<extern%> and is initialized",
3711 decl);
3712 DECL_EXTERNAL (decl) = 0;
3713 if (toplevel_bindings_p ())
3714 TREE_STATIC (decl) = 1;
3716 /* Tell `pushdecl' this is an initialized decl
3717 even though we don't yet have the initializer expression.
3718 Also tell `cp_finish_decl' it may store the real initializer. */
3719 DECL_INITIAL (decl) = error_mark_node;
3722 /* Set attributes here so if duplicate decl, will have proper attributes. */
3723 cplus_decl_attributes (&decl, attributes, 0);
3725 /* If #pragma weak was used, mark the decl weak now. */
3726 if (global_scope_p (current_binding_level))
3727 maybe_apply_pragma_weak (decl);
3729 if (TREE_CODE (decl) == FUNCTION_DECL
3730 && DECL_DECLARED_INLINE_P (decl)
3731 && DECL_UNINLINABLE (decl)
3732 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3733 warning ("%Jinline function %qD given attribute noinline", decl, decl);
3735 if (context && COMPLETE_TYPE_P (complete_type (context)))
3737 if (TREE_CODE (decl) == VAR_DECL)
3739 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3740 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3741 error ("%q#D is not a static member of %q#T", decl, context);
3742 else
3744 if (DECL_CONTEXT (field) != context)
3746 if (!same_type_p (DECL_CONTEXT (field), context))
3747 pedwarn ("ISO C++ does not permit %<%T::%D%> "
3748 "to be defined as %<%T::%D%>",
3749 DECL_CONTEXT (field), DECL_NAME (decl),
3750 context, DECL_NAME (decl));
3751 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3753 /* Static data member are tricky; an in-class initialization
3754 still doesn't provide a definition, so the in-class
3755 declaration will have DECL_EXTERNAL set, but will have an
3756 initialization. Thus, duplicate_decls won't warn
3757 about this situation, and so we check here. */
3758 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
3759 error ("duplicate initialization of %D", decl);
3760 if (duplicate_decls (decl, field))
3761 decl = field;
3764 else
3766 tree field = check_classfn (context, decl,
3767 (processing_template_decl
3768 > template_class_depth (context))
3769 ? current_template_parms
3770 : NULL_TREE);
3771 if (field && duplicate_decls (decl, field))
3772 decl = field;
3775 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3776 DECL_IN_AGGR_P (decl) = 0;
3777 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3778 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
3780 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3781 /* [temp.expl.spec] An explicit specialization of a static data
3782 member of a template is a definition if the declaration
3783 includes an initializer; otherwise, it is a declaration.
3785 We check for processing_specialization so this only applies
3786 to the new specialization syntax. */
3787 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
3788 DECL_EXTERNAL (decl) = 1;
3791 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3792 pedwarn ("declaration of %q#D outside of class is not definition",
3793 decl);
3796 /* Enter this declaration into the symbol table. */
3797 tem = maybe_push_decl (decl);
3799 if (processing_template_decl)
3800 tem = push_template_decl (tem);
3801 if (tem == error_mark_node)
3802 return error_mark_node;
3804 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3805 /* Tell the back-end to use or not use .common as appropriate. If we say
3806 -fconserve-space, we want this to save .data space, at the expense of
3807 wrong semantics. If we say -fno-conserve-space, we want this to
3808 produce errors about redefs; to do this we force variables into the
3809 data segment. */
3810 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3811 || !DECL_THREAD_LOCAL (tem))
3812 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3813 #endif
3815 if (! processing_template_decl)
3816 start_decl_1 (tem);
3818 return tem;
3821 void
3822 start_decl_1 (tree decl)
3824 tree type = TREE_TYPE (decl);
3825 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3827 if (type == error_mark_node)
3828 return;
3830 if (initialized)
3831 /* Is it valid for this decl to have an initializer at all?
3832 If not, set INITIALIZED to zero, which will indirectly
3833 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3835 /* Don't allow initializations for incomplete types except for
3836 arrays which might be completed by the initialization. */
3837 if (COMPLETE_TYPE_P (complete_type (type)))
3838 ; /* A complete type is ok. */
3839 else if (TREE_CODE (type) != ARRAY_TYPE)
3841 error ("variable %q#D has initializer but incomplete type", decl);
3842 initialized = 0;
3843 type = TREE_TYPE (decl) = error_mark_node;
3845 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3847 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3848 error ("elements of array %q#D have incomplete type", decl);
3849 /* else we already gave an error in start_decl. */
3850 initialized = 0;
3854 if (!initialized
3855 && TREE_CODE (decl) != TYPE_DECL
3856 && TREE_CODE (decl) != TEMPLATE_DECL
3857 && type != error_mark_node
3858 && IS_AGGR_TYPE (type)
3859 && ! DECL_EXTERNAL (decl))
3861 if ((! processing_template_decl || ! uses_template_parms (type))
3862 && !COMPLETE_TYPE_P (complete_type (type)))
3864 error ("aggregate %q#D has incomplete type and cannot be defined",
3865 decl);
3866 /* Change the type so that assemble_variable will give
3867 DECL an rtl we can live with: (mem (const_int 0)). */
3868 type = TREE_TYPE (decl) = error_mark_node;
3870 else
3872 /* If any base type in the hierarchy of TYPE needs a constructor,
3873 then we set initialized to 1. This way any nodes which are
3874 created for the purposes of initializing this aggregate
3875 will live as long as it does. This is necessary for global
3876 aggregates which do not have their initializers processed until
3877 the end of the file. */
3878 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3882 if (! initialized)
3883 DECL_INITIAL (decl) = NULL_TREE;
3885 /* Create a new scope to hold this declaration if necessary.
3886 Whether or not a new scope is necessary cannot be determined
3887 until after the type has been completed; if the type is a
3888 specialization of a class template it is not until after
3889 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3890 will be set correctly. */
3891 maybe_push_cleanup_level (type);
3894 /* Handle initialization of references. DECL, TYPE, and INIT have the
3895 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3896 but will be set to a new CLEANUP_STMT if a temporary is created
3897 that must be destroyed subsequently.
3899 Returns an initializer expression to use to initialize DECL, or
3900 NULL if the initialization can be performed statically.
3902 Quotes on semantics can be found in ARM 8.4.3. */
3904 static tree
3905 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3907 tree tmp;
3909 if (init == NULL_TREE)
3911 if ((DECL_LANG_SPECIFIC (decl) == 0
3912 || DECL_IN_AGGR_P (decl) == 0)
3913 && ! DECL_THIS_EXTERN (decl))
3914 error ("`%D' declared as reference but not initialized", decl);
3915 return NULL_TREE;
3918 if (TREE_CODE (init) == CONSTRUCTOR)
3920 error ("ISO C++ forbids use of initializer list to "
3921 "initialize reference %qD", decl);
3922 return NULL_TREE;
3925 if (TREE_CODE (init) == TREE_LIST)
3926 init = build_x_compound_expr_from_list (init, "initializer");
3928 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
3929 init = convert_from_reference (init);
3931 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3932 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3933 /* Note: default conversion is only called in very special cases. */
3934 init = decay_conversion (init);
3936 /* Convert INIT to the reference type TYPE. This may involve the
3937 creation of a temporary, whose lifetime must be the same as that
3938 of the reference. If so, a DECL_EXPR for the temporary will be
3939 added just after the DECL_EXPR for DECL. That's why we don't set
3940 DECL_INITIAL for local references (instead assigning to them
3941 explicitly); we need to allow the temporary to be initialized
3942 first. */
3943 tmp = initialize_reference (type, init, decl, cleanup);
3945 if (tmp == error_mark_node)
3946 return NULL_TREE;
3947 else if (tmp == NULL_TREE)
3949 error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
3950 return NULL_TREE;
3953 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3954 return tmp;
3956 DECL_INITIAL (decl) = tmp;
3958 return NULL_TREE;
3961 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3962 array until we finish parsing the initializer. If that's the
3963 situation we're in, update DECL accordingly. */
3965 static void
3966 maybe_deduce_size_from_array_init (tree decl, tree init)
3968 tree type = TREE_TYPE (decl);
3970 if (TREE_CODE (type) == ARRAY_TYPE
3971 && TYPE_DOMAIN (type) == NULL_TREE
3972 && TREE_CODE (decl) != TYPE_DECL)
3974 /* do_default is really a C-ism to deal with tentative definitions.
3975 But let's leave it here to ease the eventual merge. */
3976 int do_default = !DECL_EXTERNAL (decl);
3977 tree initializer = init ? init : DECL_INITIAL (decl);
3978 int failure = complete_array_type (type, initializer, do_default);
3980 if (failure == 1)
3981 error ("initializer fails to determine size of %qD", decl);
3983 if (failure == 2)
3985 if (do_default)
3986 error ("array size missing in `%D'", decl);
3987 /* If a `static' var's size isn't known, make it extern as
3988 well as static, so it does not get allocated. If it's not
3989 `static', then don't mark it extern; finish_incomplete_decl
3990 will give it a default size and it will get allocated. */
3991 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3992 DECL_EXTERNAL (decl) = 1;
3995 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
3996 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
3997 integer_zero_node))
3998 error ("zero-size array %qD", decl);
4000 layout_decl (decl, 0);
4004 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4005 any appropriate error messages regarding the layout. */
4007 static void
4008 layout_var_decl (tree decl)
4010 tree type = TREE_TYPE (decl);
4011 #if 0
4012 tree ttype = target_type (type);
4013 #endif
4015 /* If we haven't already layed out this declaration, do so now.
4016 Note that we must not call complete type for an external object
4017 because it's type might involve templates that we are not
4018 supposed to instantiate yet. (And it's perfectly valid to say
4019 `extern X x' for some incomplete type `X'.) */
4020 if (!DECL_EXTERNAL (decl))
4021 complete_type (type);
4022 if (!DECL_SIZE (decl)
4023 && TREE_TYPE (decl) != error_mark_node
4024 && (COMPLETE_TYPE_P (type)
4025 || (TREE_CODE (type) == ARRAY_TYPE
4026 && !TYPE_DOMAIN (type)
4027 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4028 layout_decl (decl, 0);
4030 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4032 /* An automatic variable with an incomplete type: that is an error.
4033 Don't talk about array types here, since we took care of that
4034 message in grokdeclarator. */
4035 error ("storage size of %qD isn't known", decl);
4036 TREE_TYPE (decl) = error_mark_node;
4038 #if 0
4039 /* Keep this code around in case we later want to control debug info
4040 based on whether a type is "used". (jason 1999-11-11) */
4042 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
4043 /* Let debugger know it should output info for this type. */
4044 note_debug_info_needed (ttype);
4046 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4047 note_debug_info_needed (DECL_CONTEXT (decl));
4048 #endif
4050 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4051 && DECL_SIZE (decl) != NULL_TREE
4052 && ! TREE_CONSTANT (DECL_SIZE (decl)))
4054 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4055 constant_expression_warning (DECL_SIZE (decl));
4056 else
4057 error ("storage size of %qD isn't constant", decl);
4060 if (TREE_STATIC (decl)
4061 && !DECL_ARTIFICIAL (decl)
4062 && current_function_decl
4063 && DECL_CONTEXT (decl) == current_function_decl)
4064 push_local_name (decl);
4067 /* If a local static variable is declared in an inline function, or if
4068 we have a weak definition, we must endeavor to create only one
4069 instance of the variable at link-time. */
4071 static void
4072 maybe_commonize_var (tree decl)
4074 /* Static data in a function with comdat linkage also has comdat
4075 linkage. */
4076 if (TREE_STATIC (decl)
4077 /* Don't mess with __FUNCTION__. */
4078 && ! DECL_ARTIFICIAL (decl)
4079 && DECL_FUNCTION_SCOPE_P (decl)
4080 /* Unfortunately, import_export_decl has not always been called
4081 before the function is processed, so we cannot simply check
4082 DECL_COMDAT. */
4083 && (DECL_COMDAT (DECL_CONTEXT (decl))
4084 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4085 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4086 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4088 if (flag_weak)
4090 /* With weak symbols, we simply make the variable COMDAT;
4091 that will cause copies in multiple translations units to
4092 be merged. */
4093 comdat_linkage (decl);
4095 else
4097 if (DECL_INITIAL (decl) == NULL_TREE
4098 || DECL_INITIAL (decl) == error_mark_node)
4100 /* Without weak symbols, we can use COMMON to merge
4101 uninitialized variables. */
4102 TREE_PUBLIC (decl) = 1;
4103 DECL_COMMON (decl) = 1;
4105 else
4107 /* While for initialized variables, we must use internal
4108 linkage -- which means that multiple copies will not
4109 be merged. */
4110 TREE_PUBLIC (decl) = 0;
4111 DECL_COMMON (decl) = 0;
4112 cp_warning_at ("sorry: semantics of inline function static "
4113 "data %q#D are wrong (you'll wind up "
4114 "with multiple copies)", decl);
4115 warning ("%J you can work around this by removing "
4116 "the initializer",
4117 decl);
4121 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4122 /* Set it up again; we might have set DECL_INITIAL since the last
4123 time. */
4124 comdat_linkage (decl);
4127 /* Issue an error message if DECL is an uninitialized const variable. */
4129 static void
4130 check_for_uninitialized_const_var (tree decl)
4132 tree type = TREE_TYPE (decl);
4134 /* ``Unless explicitly declared extern, a const object does not have
4135 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4136 7.1.6 */
4137 if (TREE_CODE (decl) == VAR_DECL
4138 && TREE_CODE (type) != REFERENCE_TYPE
4139 && CP_TYPE_CONST_P (type)
4140 && !TYPE_NEEDS_CONSTRUCTING (type)
4141 && !DECL_INITIAL (decl))
4142 error ("uninitialized const %qD", decl);
4145 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4146 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4147 initialized. If there are no more such fields, the return value
4148 will be NULL. */
4150 static tree
4151 next_initializable_field (tree field)
4153 while (field
4154 && (TREE_CODE (field) != FIELD_DECL
4155 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4156 || DECL_ARTIFICIAL (field)))
4157 field = TREE_CHAIN (field);
4159 return field;
4162 /* Subroutine of reshape_init. Reshape the constructor for an array. INITP
4163 is the pointer to the old constructor list (to the CONSTRUCTOR_ELTS of
4164 the CONSTRUCTOR we are processing), while NEW_INIT is the CONSTRUCTOR we
4165 are building.
4166 ELT_TYPE is the element type of the array. MAX_INDEX is an INTEGER_CST
4167 representing the size of the array minus one (the maximum index), or
4168 NULL_TREE if the array was declared without specifying the size. */
4170 static bool
4171 reshape_init_array (tree elt_type, tree max_index,
4172 tree *initp, tree new_init)
4174 bool sized_array_p = (max_index != NULL_TREE);
4175 HOST_WIDE_INT max_index_cst = 0;
4176 HOST_WIDE_INT index;
4178 if (sized_array_p)
4179 /* HWI is either 32bit or 64bit, so it must be enough to represent the
4180 array size. */
4181 max_index_cst = tree_low_cst (max_index, 1);
4183 /* Loop until there are no more initializers. */
4184 for (index = 0;
4185 *initp && (!sized_array_p || index <= max_index_cst);
4186 ++index)
4188 tree element_init;
4189 tree designated_index;
4191 element_init = reshape_init (elt_type, initp);
4192 if (element_init == error_mark_node)
4193 return false;
4194 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4195 CONSTRUCTOR_ELTS (new_init) = element_init;
4196 designated_index = TREE_PURPOSE (element_init);
4197 if (designated_index)
4199 /* Handle array designated initializers (GNU extension). */
4200 if (TREE_CODE (designated_index) == IDENTIFIER_NODE)
4202 error ("name %qD used in a GNU-style designated "
4203 "initializer for an array", designated_index);
4204 TREE_PURPOSE (element_init) = NULL_TREE;
4206 else
4208 gcc_assert (TREE_CODE (designated_index) == INTEGER_CST);
4209 if (sized_array_p
4210 && tree_int_cst_lt (max_index, designated_index))
4212 error ("Designated initializer %qE larger than array "
4213 "size", designated_index);
4214 TREE_PURPOSE (element_init) = NULL_TREE;
4216 else
4217 index = tree_low_cst (designated_index, 1);
4222 return true;
4225 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4226 brace-enclosed aggregate initializer.
4228 *INITP is one of a list of initializers describing a brace-enclosed
4229 initializer for an entity of the indicated aggregate TYPE. It may
4230 not presently match the shape of the TYPE; for example:
4232 struct S { int a; int b; };
4233 struct S a[] = { 1, 2, 3, 4 };
4235 Here *INITP will point to TREE_LIST of four elements, rather than a
4236 list of two elements, each itself a list of two elements. This
4237 routine transforms INIT from the former form into the latter. The
4238 revised initializer is returned. */
4240 static tree
4241 reshape_init (tree type, tree *initp)
4243 tree inits;
4244 tree old_init;
4245 tree old_init_value;
4246 tree new_init;
4247 bool brace_enclosed_p;
4249 old_init = *initp;
4250 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4251 ? TREE_VALUE (*initp) : old_init);
4253 gcc_assert (old_init_value);
4255 /* If the initializer is brace-enclosed, pull initializers from the
4256 enclosed elements. Advance past the brace-enclosed initializer
4257 now. */
4258 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4259 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value))
4261 *initp = TREE_CHAIN (old_init);
4262 TREE_CHAIN (old_init) = NULL_TREE;
4263 inits = CONSTRUCTOR_ELTS (old_init_value);
4264 initp = &inits;
4265 brace_enclosed_p = true;
4267 else
4269 inits = NULL_TREE;
4270 brace_enclosed_p = false;
4273 /* A non-aggregate type is always initialized with a single
4274 initializer. */
4275 if (!CP_AGGREGATE_TYPE_P (type))
4277 *initp = TREE_CHAIN (old_init);
4278 TREE_CHAIN (old_init) = NULL_TREE;
4279 /* It is invalid to initialize a non-aggregate type with a
4280 brace-enclosed initializer. */
4281 if (brace_enclosed_p)
4283 error ("brace-enclosed initializer used to initialize %qT",
4284 type);
4285 if (TREE_CODE (old_init) == TREE_LIST)
4286 TREE_VALUE (old_init) = error_mark_node;
4287 else
4288 old_init = error_mark_node;
4291 return old_init;
4294 /* [dcl.init.aggr]
4296 All implicit type conversions (clause _conv_) are considered when
4297 initializing the aggregate member with an initializer from an
4298 initializer-list. If the initializer can initialize a member,
4299 the member is initialized. Otherwise, if the member is itself a
4300 non-empty subaggregate, brace elision is assumed and the
4301 initializer is considered for the initialization of the first
4302 member of the subaggregate. */
4303 if (!brace_enclosed_p
4304 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4306 *initp = TREE_CHAIN (old_init);
4307 TREE_CHAIN (old_init) = NULL_TREE;
4308 return old_init;
4311 if (TREE_CODE (old_init_value) == STRING_CST
4312 && TREE_CODE (type) == ARRAY_TYPE
4313 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4315 /* [dcl.init.string]
4317 A char array (whether plain char, signed char, or unsigned char)
4318 can be initialized by a string-literal (optionally enclosed in
4319 braces); a wchar_t array can be initialized by a wide
4320 string-literal (optionally enclosed in braces). */
4321 new_init = old_init;
4322 /* Move past the initializer. */
4323 *initp = TREE_CHAIN (old_init);
4324 TREE_CHAIN (old_init) = NULL_TREE;
4326 else
4328 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4329 new_init = build_constructor (NULL_TREE, NULL_TREE);
4331 if (CLASS_TYPE_P (type))
4333 tree field;
4335 field = next_initializable_field (TYPE_FIELDS (type));
4337 if (!field)
4339 /* [dcl.init.aggr]
4341 An initializer for an aggregate member that is an
4342 empty class shall have the form of an empty
4343 initializer-list {}. */
4344 if (!brace_enclosed_p)
4346 error ("initializer for %qT must be brace-enclosed", type);
4347 return error_mark_node;
4350 else
4352 /* Loop through the initializable fields, gathering
4353 initializers. */
4354 while (*initp)
4356 tree field_init;
4358 /* Handle designated initializers, as an extension. */
4359 if (TREE_PURPOSE (*initp))
4361 if (pedantic)
4362 pedwarn ("ISO C++ does not allow designated initializers");
4363 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4364 /*want_type=*/false);
4365 if (!field || TREE_CODE (field) != FIELD_DECL)
4366 error ("%qT has no non-static data member named %qD",
4367 type, TREE_PURPOSE (*initp));
4369 if (!field)
4370 break;
4372 field_init = reshape_init (TREE_TYPE (field), initp);
4373 if (field_init == error_mark_node)
4374 return error_mark_node;
4375 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4376 CONSTRUCTOR_ELTS (new_init) = field_init;
4377 /* [dcl.init.aggr]
4379 When a union is initialized with a brace-enclosed
4380 initializer, the braces shall only contain an
4381 initializer for the first member of the union. */
4382 if (TREE_CODE (type) == UNION_TYPE)
4383 break;
4384 field = next_initializable_field (TREE_CHAIN (field));
4388 else if (TREE_CODE (type) == ARRAY_TYPE
4389 || TREE_CODE (type) == VECTOR_TYPE)
4391 /* If the bound of the array is known, take no more initializers
4392 than are allowed. */
4393 tree max_index = NULL_TREE;
4394 if (TREE_CODE (type) == ARRAY_TYPE)
4396 if (TYPE_DOMAIN (type))
4397 max_index = array_type_nelts (type);
4399 else
4401 /* For a vector, the representation type is a struct
4402 containing a single member which is an array of the
4403 appropriate size. */
4404 tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4405 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4406 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS
4407 (rtype)));
4410 if (!reshape_init_array (TREE_TYPE (type), max_index,
4411 initp, new_init))
4412 return error_mark_node;
4414 else
4415 gcc_unreachable ();
4417 /* The initializers were placed in reverse order in the
4418 CONSTRUCTOR. */
4419 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4421 if (TREE_CODE (old_init) == TREE_LIST)
4422 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4425 /* If this was a brace-enclosed initializer and all of the
4426 initializers were not used up, there is a problem. */
4427 if (brace_enclosed_p && *initp)
4428 error ("too many initializers for %qT", type);
4430 return new_init;
4433 /* Verify INIT (the initializer for DECL), and record the
4434 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4435 grok_reference_init.
4437 If the return value is non-NULL, it is an expression that must be
4438 evaluated dynamically to initialize DECL. */
4440 static tree
4441 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4443 tree type = TREE_TYPE (decl);
4444 tree init_code = NULL;
4446 /* If `start_decl' didn't like having an initialization, ignore it now. */
4447 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4448 init = NULL_TREE;
4450 /* If an initializer is present, DECL_INITIAL has been
4451 error_mark_node, to indicate that an as-of-yet unevaluated
4452 initialization will occur. From now on, DECL_INITIAL reflects
4453 the static initialization -- if any -- of DECL. */
4454 DECL_INITIAL (decl) = NULL_TREE;
4456 /* Things that are going to be initialized need to have complete
4457 type. */
4458 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4460 if (type == error_mark_node)
4461 /* We will have already complained. */
4462 init = NULL_TREE;
4463 else if (init && COMPLETE_TYPE_P (type)
4464 && !TREE_CONSTANT (TYPE_SIZE (type)))
4466 error ("variable-sized object %qD may not be initialized", decl);
4467 init = NULL_TREE;
4469 else if (TREE_CODE (type) == ARRAY_TYPE
4470 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4472 error ("elements of array %q#D have incomplete type", decl);
4473 init = NULL_TREE;
4475 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4477 error ("%qD has incomplete type", decl);
4478 TREE_TYPE (decl) = error_mark_node;
4479 init = NULL_TREE;
4482 if (TREE_CODE (decl) == CONST_DECL)
4484 gcc_assert (TREE_CODE (decl) != REFERENCE_TYPE);
4486 DECL_INITIAL (decl) = init;
4488 gcc_assert (init != NULL_TREE);
4489 init = NULL_TREE;
4491 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4492 init = grok_reference_init (decl, type, init, cleanup);
4493 else if (init)
4495 if (TREE_CODE (init) == CONSTRUCTOR
4496 && BRACE_ENCLOSED_INITIALIZER_P (init))
4498 /* [dcl.init] paragraph 13,
4499 If T is a scalar type, then a declaration of the form
4500 T x = { a };
4501 is equivalent to
4502 T x = a;
4504 reshape_init will complain about the extra braces,
4505 and doesn't do anything useful in the case where TYPE is
4506 scalar, so just don't call it. */
4507 if (CP_AGGREGATE_TYPE_P (type))
4508 init = reshape_init (type, &init);
4510 if ((*targetm.vector_opaque_p) (type))
4512 error ("opaque vector types cannot be initialized");
4513 init = error_mark_node;
4517 /* If DECL has an array type without a specific bound, deduce the
4518 array size from the initializer. */
4519 maybe_deduce_size_from_array_init (decl, init);
4520 type = TREE_TYPE (decl);
4522 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4524 if (TREE_CODE (type) == ARRAY_TYPE)
4525 goto initialize_aggr;
4526 else if (TREE_CODE (init) == CONSTRUCTOR
4527 && BRACE_ENCLOSED_INITIALIZER_P (init))
4529 if (TYPE_NON_AGGREGATE_CLASS (type))
4531 error ("%qD must be initialized by constructor, "
4532 "not by %<{...}%>",
4533 decl);
4534 init = error_mark_node;
4536 else
4537 goto dont_use_constructor;
4539 else
4541 int saved_stmts_are_full_exprs_p;
4543 initialize_aggr:
4544 saved_stmts_are_full_exprs_p = 0;
4545 if (building_stmt_tree ())
4547 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4548 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4550 init = build_aggr_init (decl, init, flags);
4551 if (building_stmt_tree ())
4552 current_stmt_tree ()->stmts_are_full_exprs_p =
4553 saved_stmts_are_full_exprs_p;
4554 return init;
4557 else
4559 dont_use_constructor:
4560 if (TREE_CODE (init) != TREE_VEC)
4562 init_code = store_init_value (decl, init);
4563 init = NULL;
4567 else if (DECL_EXTERNAL (decl))
4569 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4570 goto initialize_aggr;
4571 else if (IS_AGGR_TYPE (type))
4573 tree core_type = strip_array_types (type);
4575 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4576 error ("structure %qD with uninitialized const members", decl);
4577 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4578 error ("structure %qD with uninitialized reference members", decl);
4580 check_for_uninitialized_const_var (decl);
4582 else
4583 check_for_uninitialized_const_var (decl);
4585 if (init && init != error_mark_node)
4586 init_code = build2 (INIT_EXPR, type, decl, init);
4588 return init_code;
4591 /* If DECL is not a local variable, give it RTL. */
4593 static void
4594 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4596 int toplev = toplevel_bindings_p ();
4597 int defer_p;
4599 /* Set the DECL_ASSEMBLER_NAME for the object. */
4600 if (asmspec)
4602 /* The `register' keyword, when used together with an
4603 asm-specification, indicates that the variable should be
4604 placed in a particular register. */
4605 if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
4607 change_decl_assembler_name (decl, get_identifier (asmspec));
4608 DECL_HARD_REGISTER (decl) = 1;
4610 else
4611 set_user_assembler_name (decl, asmspec);
4614 /* Handle non-variables up front. */
4615 if (TREE_CODE (decl) != VAR_DECL)
4617 rest_of_decl_compilation (decl, toplev, at_eof);
4618 return;
4621 /* If we see a class member here, it should be a static data
4622 member. */
4623 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4625 gcc_assert (TREE_STATIC (decl));
4626 /* An in-class declaration of a static data member should be
4627 external; it is only a declaration, and not a definition. */
4628 if (init == NULL_TREE)
4629 gcc_assert (DECL_EXTERNAL (decl));
4632 /* We don't create any RTL for local variables. */
4633 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4634 return;
4636 /* We defer emission of local statics until the corresponding
4637 DECL_EXPR is expanded. */
4638 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4640 /* We try to defer namespace-scope static constants so that they are
4641 not emitted into the object file unnecessarily. */
4642 if (!DECL_VIRTUAL_P (decl)
4643 && TREE_READONLY (decl)
4644 && DECL_INITIAL (decl) != NULL_TREE
4645 && DECL_INITIAL (decl) != error_mark_node
4646 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4647 && toplev
4648 && !TREE_PUBLIC (decl))
4650 /* Fool with the linkage of static consts according to #pragma
4651 interface. */
4652 struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
4653 if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
4655 TREE_PUBLIC (decl) = 1;
4656 DECL_EXTERNAL (decl) = finfo->interface_only;
4659 defer_p = 1;
4661 /* Likewise for template instantiations. */
4662 else if (DECL_LANG_SPECIFIC (decl)
4663 && DECL_IMPLICIT_INSTANTIATION (decl))
4664 defer_p = 1;
4666 /* If we're not deferring, go ahead and assemble the variable. */
4667 if (!defer_p)
4668 rest_of_decl_compilation (decl, toplev, at_eof);
4671 /* Generate code to initialize DECL (a local variable). */
4673 static void
4674 initialize_local_var (tree decl, tree init)
4676 tree type = TREE_TYPE (decl);
4677 tree cleanup;
4679 gcc_assert (TREE_CODE (decl) == VAR_DECL
4680 || TREE_CODE (decl) == RESULT_DECL);
4681 gcc_assert (!TREE_STATIC (decl));
4683 if (DECL_SIZE (decl) == NULL_TREE)
4685 /* If we used it already as memory, it must stay in memory. */
4686 DECL_INITIAL (decl) = NULL_TREE;
4687 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4690 if (DECL_SIZE (decl) && type != error_mark_node)
4692 int already_used;
4694 /* Compute and store the initial value. */
4695 already_used = TREE_USED (decl) || TREE_USED (type);
4697 /* Perform the initialization. */
4698 if (init)
4700 int saved_stmts_are_full_exprs_p;
4702 gcc_assert (building_stmt_tree ());
4703 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4704 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4705 finish_expr_stmt (init);
4706 current_stmt_tree ()->stmts_are_full_exprs_p =
4707 saved_stmts_are_full_exprs_p;
4710 /* Set this to 0 so we can tell whether an aggregate which was
4711 initialized was ever used. Don't do this if it has a
4712 destructor, so we don't complain about the 'resource
4713 allocation is initialization' idiom. Now set
4714 attribute((unused)) on types so decls of that type will be
4715 marked used. (see TREE_USED, above.) */
4716 if (TYPE_NEEDS_CONSTRUCTING (type)
4717 && ! already_used
4718 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4719 && DECL_NAME (decl))
4720 TREE_USED (decl) = 0;
4721 else if (already_used)
4722 TREE_USED (decl) = 1;
4725 /* Generate a cleanup, if necessary. */
4726 cleanup = cxx_maybe_build_cleanup (decl);
4727 if (DECL_SIZE (decl) && cleanup)
4728 finish_decl_cleanup (decl, cleanup);
4731 /* DECL is a VAR_DECL for a compiler-generated variable with static
4732 storage duration (like a virtual table) whose initializer is a
4733 compile-time constant. Initialize the variable and provide it to
4734 the back end. */
4736 void
4737 initialize_artificial_var (tree decl, tree init)
4739 DECL_INITIAL (decl) = build_constructor (NULL_TREE, init);
4740 DECL_INITIALIZED_P (decl) = 1;
4741 determine_visibility (decl);
4742 layout_var_decl (decl);
4743 maybe_commonize_var (decl);
4744 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
4747 /* Finish processing of a declaration;
4748 install its line number and initial value.
4749 If the length of an array type is not known before,
4750 it must be determined now, from the initial value, or it is an error.
4752 INIT holds the value of an initializer that should be allowed to escape
4753 the normal rules.
4755 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4756 if the (init) syntax was used. */
4758 void
4759 cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
4761 tree type;
4762 tree ttype = NULL_TREE;
4763 tree cleanup;
4764 const char *asmspec = NULL;
4765 int was_readonly = 0;
4767 if (decl == error_mark_node)
4768 return;
4769 else if (! decl)
4771 if (init)
4772 error ("assignment (not initialization) in declaration");
4773 return;
4776 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
4778 /* Assume no cleanup is required. */
4779 cleanup = NULL_TREE;
4781 /* If a name was specified, get the string. */
4782 if (global_scope_p (current_binding_level))
4783 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4784 if (asmspec_tree)
4785 asmspec = TREE_STRING_POINTER (asmspec_tree);
4787 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4789 error ("cannot initialize %qD to namespace %qD", decl, init);
4790 init = NULL_TREE;
4793 if (current_class_type
4794 && CP_DECL_CONTEXT (decl) == current_class_type
4795 && TYPE_BEING_DEFINED (current_class_type)
4796 && (DECL_INITIAL (decl) || init))
4797 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
4799 type = TREE_TYPE (decl);
4801 if (type == error_mark_node)
4802 goto finish_end;
4804 if (TYPE_HAS_MUTABLE_P (type))
4805 TREE_READONLY (decl) = 0;
4807 if (processing_template_decl)
4809 /* Add this declaration to the statement-tree. */
4810 if (at_function_scope_p ())
4811 add_decl_expr (decl);
4813 if (init && DECL_INITIAL (decl))
4814 DECL_INITIAL (decl) = init;
4815 if (TREE_CODE (decl) == VAR_DECL
4816 && !DECL_PRETTY_FUNCTION_P (decl)
4817 && !dependent_type_p (TREE_TYPE (decl)))
4818 maybe_deduce_size_from_array_init (decl, init);
4819 goto finish_end;
4822 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4823 gcc_assert (TREE_CODE (decl) != PARM_DECL);
4825 /* Take care of TYPE_DECLs up front. */
4826 if (TREE_CODE (decl) == TYPE_DECL)
4828 if (type != error_mark_node
4829 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
4831 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
4832 warning ("shadowing previous type declaration of %q#D", decl);
4833 set_identifier_type_value (DECL_NAME (decl), decl);
4836 /* If we have installed this as the canonical typedef for this
4837 type, and that type has not been defined yet, delay emitting
4838 the debug information for it, as we will emit it later. */
4839 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4840 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
4841 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4843 rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
4844 at_eof);
4845 goto finish_end;
4848 if (TREE_CODE (decl) != FUNCTION_DECL)
4849 ttype = target_type (type);
4852 /* Currently, GNU C++ puts constants in text space, making them
4853 impossible to initialize. In the future, one would hope for
4854 an operating system which understood the difference between
4855 initialization and the running of a program. */
4856 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl))
4858 was_readonly = 1;
4859 if (TYPE_NEEDS_CONSTRUCTING (type)
4860 || TREE_CODE (type) == REFERENCE_TYPE)
4861 TREE_READONLY (decl) = 0;
4864 if (TREE_CODE (decl) == VAR_DECL)
4866 /* Only PODs can have thread-local storage. Other types may require
4867 various kinds of non-trivial initialization. */
4868 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4869 error ("%qD cannot be thread-local because it has non-POD type %qT",
4870 decl, TREE_TYPE (decl));
4871 /* Convert the initializer to the type of DECL, if we have not
4872 already initialized DECL. */
4873 if (!DECL_INITIALIZED_P (decl)
4874 /* If !DECL_EXTERNAL then DECL is being defined. In the
4875 case of a static data member initialized inside the
4876 class-specifier, there can be an initializer even if DECL
4877 is *not* defined. */
4878 && (!DECL_EXTERNAL (decl) || init))
4880 init = check_initializer (decl, init, flags, &cleanup);
4881 /* Thread-local storage cannot be dynamically initialized. */
4882 if (DECL_THREAD_LOCAL (decl) && init)
4884 error ("%qD is thread-local and so cannot be dynamically "
4885 "initialized", decl);
4886 init = NULL_TREE;
4888 /* Handle:
4890 [dcl.init]
4892 The memory occupied by any object of static storage
4893 duration is zero-initialized at program startup before
4894 any other initialization takes place.
4896 We cannot create an appropriate initializer until after
4897 the type of DECL is finalized. If DECL_INITIAL is set,
4898 then the DECL is statically initialized, and any
4899 necessary zero-initialization has already been performed. */
4900 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4901 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
4902 /*nelts=*/NULL_TREE,
4903 /*static_storage_p=*/true);
4904 /* Remember that the initialization for this variable has
4905 taken place. */
4906 DECL_INITIALIZED_P (decl) = 1;
4907 /* The variable is being defined, so determine its
4908 visibility. */
4909 determine_visibility (decl);
4911 /* If the variable has an array type, lay out the type, even if
4912 there is no initializer. It is valid to index through the
4913 array, and we must get TYPE_ALIGN set correctly on the array
4914 type. */
4915 else if (TREE_CODE (type) == ARRAY_TYPE)
4916 layout_type (type);
4919 /* Add this declaration to the statement-tree. This needs to happen
4920 after the call to check_initializer so that the DECL_EXPR for a
4921 reference temp is added before the DECL_EXPR for the reference itself. */
4922 if (at_function_scope_p ())
4923 add_decl_expr (decl);
4925 if (TREE_CODE (decl) == VAR_DECL)
4926 layout_var_decl (decl);
4928 /* Output the assembler code and/or RTL code for variables and functions,
4929 unless the type is an undefined structure or union.
4930 If not, it will get done when the type is completed. */
4931 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4933 if (TREE_CODE (decl) == VAR_DECL)
4934 maybe_commonize_var (decl);
4936 make_rtl_for_nonlocal_decl (decl, init, asmspec);
4938 /* Check for abstractness of the type. Notice that there is no
4939 need to strip array types here since the check for those types
4940 is already done within create_array_type_for_decl. */
4941 if (TREE_CODE (type) == FUNCTION_TYPE
4942 || TREE_CODE (type) == METHOD_TYPE)
4943 abstract_virtuals_error (decl, TREE_TYPE (type));
4944 else
4945 abstract_virtuals_error (decl, type);
4947 if (TREE_CODE (decl) == FUNCTION_DECL
4948 || TREE_TYPE (decl) == error_mark_node)
4949 /* No initialization required. */
4951 else if (DECL_EXTERNAL (decl)
4952 && ! (DECL_LANG_SPECIFIC (decl)
4953 && DECL_NOT_REALLY_EXTERN (decl)))
4955 if (init)
4956 DECL_INITIAL (decl) = init;
4958 else
4960 /* A variable definition. */
4961 if (DECL_FUNCTION_SCOPE_P (decl))
4963 /* Initialize the local variable. */
4964 if (processing_template_decl)
4966 if (init || DECL_INITIAL (decl) == error_mark_node)
4967 DECL_INITIAL (decl) = init;
4969 else if (!TREE_STATIC (decl))
4970 initialize_local_var (decl, init);
4973 if (TREE_STATIC (decl))
4974 expand_static_init (decl, init);
4978 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4979 reference, insert it in the statement-tree now. */
4980 if (cleanup)
4981 push_cleanup (decl, cleanup, false);
4983 finish_end:
4985 if (was_readonly)
4986 TREE_READONLY (decl) = 1;
4988 /* If this was marked 'used', be sure it will be output. */
4989 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4990 mark_decl_referenced (decl);
4993 /* This is here for a midend callback from c-common.c. */
4995 void
4996 finish_decl (tree decl, tree init, tree asmspec_tree)
4998 cp_finish_decl (decl, init, asmspec_tree, 0);
5001 /* Returns a declaration for a VAR_DECL as if:
5003 extern "C" TYPE NAME;
5005 had been seen. Used to create compiler-generated global
5006 variables. */
5008 tree
5009 declare_global_var (tree name, tree type)
5011 tree decl;
5013 push_to_top_level ();
5014 decl = build_decl (VAR_DECL, name, type);
5015 TREE_PUBLIC (decl) = 1;
5016 DECL_EXTERNAL (decl) = 1;
5017 DECL_ARTIFICIAL (decl) = 1;
5018 pushdecl (decl);
5019 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
5020 pop_from_top_level ();
5022 return decl;
5025 /* Returns a pointer to the `atexit' function. Note that if
5026 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5027 `__cxa_atexit' function specified in the IA64 C++ ABI. */
5029 static tree
5030 get_atexit_node (void)
5032 tree atexit_fndecl;
5033 tree arg_types;
5034 tree fn_type;
5035 tree fn_ptr_type;
5036 const char *name;
5038 if (atexit_node)
5039 return atexit_node;
5041 if (flag_use_cxa_atexit)
5043 /* The declaration for `__cxa_atexit' is:
5045 int __cxa_atexit (void (*)(void *), void *, void *)
5047 We build up the argument types and then then function type
5048 itself. */
5050 /* First, build the pointer-to-function type for the first
5051 argument. */
5052 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5053 fn_type = build_function_type (void_type_node, arg_types);
5054 fn_ptr_type = build_pointer_type (fn_type);
5055 /* Then, build the rest of the argument types. */
5056 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5057 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5058 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5059 /* And the final __cxa_atexit type. */
5060 fn_type = build_function_type (integer_type_node, arg_types);
5061 fn_ptr_type = build_pointer_type (fn_type);
5062 name = "__cxa_atexit";
5064 else
5066 /* The declaration for `atexit' is:
5068 int atexit (void (*)());
5070 We build up the argument types and then then function type
5071 itself. */
5072 fn_type = build_function_type (void_type_node, void_list_node);
5073 fn_ptr_type = build_pointer_type (fn_type);
5074 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5075 /* Build the final atexit type. */
5076 fn_type = build_function_type (integer_type_node, arg_types);
5077 name = "atexit";
5080 /* Now, build the function declaration. */
5081 push_lang_context (lang_name_c);
5082 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5083 mark_used (atexit_fndecl);
5084 pop_lang_context ();
5085 atexit_node = decay_conversion (atexit_fndecl);
5087 return atexit_node;
5090 /* Returns the __dso_handle VAR_DECL. */
5092 static tree
5093 get_dso_handle_node (void)
5095 if (dso_handle_node)
5096 return dso_handle_node;
5098 /* Declare the variable. */
5099 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5100 ptr_type_node);
5102 return dso_handle_node;
5105 /* Begin a new function with internal linkage whose job will be simply
5106 to destroy some particular variable. */
5108 static GTY(()) int start_cleanup_cnt;
5110 static tree
5111 start_cleanup_fn (void)
5113 char name[32];
5114 tree parmtypes;
5115 tree fntype;
5116 tree fndecl;
5118 push_to_top_level ();
5120 /* No need to mangle this. */
5121 push_lang_context (lang_name_c);
5123 /* Build the parameter-types. */
5124 parmtypes = void_list_node;
5125 /* Functions passed to __cxa_atexit take an additional parameter.
5126 We'll just ignore it. After we implement the new calling
5127 convention for destructors, we can eliminate the use of
5128 additional cleanup functions entirely in the -fnew-abi case. */
5129 if (flag_use_cxa_atexit)
5130 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5131 /* Build the function type itself. */
5132 fntype = build_function_type (void_type_node, parmtypes);
5133 /* Build the name of the function. */
5134 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5135 /* Build the function declaration. */
5136 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5137 /* It's a function with internal linkage, generated by the
5138 compiler. */
5139 TREE_PUBLIC (fndecl) = 0;
5140 DECL_ARTIFICIAL (fndecl) = 1;
5141 /* Make the function `inline' so that it is only emitted if it is
5142 actually needed. It is unlikely that it will be inlined, since
5143 it is only called via a function pointer, but we avoid unnecessary
5144 emissions this way. */
5145 DECL_INLINE (fndecl) = 1;
5146 DECL_DECLARED_INLINE_P (fndecl) = 1;
5147 DECL_INTERFACE_KNOWN (fndecl) = 1;
5148 /* Build the parameter. */
5149 if (flag_use_cxa_atexit)
5151 tree parmdecl;
5153 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5154 DECL_CONTEXT (parmdecl) = fndecl;
5155 TREE_USED (parmdecl) = 1;
5156 DECL_ARGUMENTS (fndecl) = parmdecl;
5159 pushdecl (fndecl);
5160 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5162 pop_lang_context ();
5164 return current_function_decl;
5167 /* Finish the cleanup function begun by start_cleanup_fn. */
5169 static void
5170 end_cleanup_fn (void)
5172 expand_or_defer_fn (finish_function (0));
5174 pop_from_top_level ();
5177 /* Generate code to handle the destruction of DECL, an object with
5178 static storage duration. */
5180 tree
5181 register_dtor_fn (tree decl)
5183 tree cleanup;
5184 tree compound_stmt;
5185 tree args;
5186 tree fcall;
5188 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5189 return void_zero_node;
5191 /* Call build_cleanup before we enter the anonymous function so that
5192 any access checks will be done relative to the current scope,
5193 rather than the scope of the anonymous function. */
5194 build_cleanup (decl);
5196 /* Now start the function. */
5197 cleanup = start_cleanup_fn ();
5199 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5200 to the original function, rather than the anonymous one. That
5201 will make the back-end think that nested functions are in use,
5202 which causes confusion. */
5204 push_deferring_access_checks (dk_no_check);
5205 fcall = build_cleanup (decl);
5206 pop_deferring_access_checks ();
5208 /* Create the body of the anonymous function. */
5209 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5210 finish_expr_stmt (fcall);
5211 finish_compound_stmt (compound_stmt);
5212 end_cleanup_fn ();
5214 /* Call atexit with the cleanup function. */
5215 cxx_mark_addressable (cleanup);
5216 mark_used (cleanup);
5217 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5218 if (flag_use_cxa_atexit)
5220 args = tree_cons (NULL_TREE,
5221 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5222 NULL_TREE);
5223 args = tree_cons (NULL_TREE, null_pointer_node, args);
5224 args = tree_cons (NULL_TREE, cleanup, args);
5226 else
5227 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5228 return build_function_call (get_atexit_node (), args);
5231 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5232 is its initializer. Generate code to handle the construction
5233 and destruction of DECL. */
5235 static void
5236 expand_static_init (tree decl, tree init)
5238 gcc_assert (TREE_CODE (decl) == VAR_DECL);
5239 gcc_assert (TREE_STATIC (decl));
5241 /* Some variables require no initialization. */
5242 if (!init
5243 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5244 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5245 return;
5247 if (DECL_FUNCTION_SCOPE_P (decl))
5249 /* Emit code to perform this initialization but once. */
5250 tree if_stmt, inner_if_stmt = NULL_TREE;
5251 tree then_clause, inner_then_clause = NULL_TREE;
5252 tree guard, guard_addr, guard_addr_list;
5253 tree acquire_fn, release_fn, abort_fn;
5254 tree flag, begin;
5256 /* Emit code to perform this initialization but once. This code
5257 looks like:
5259 static <type> guard;
5260 if (!guard.first_byte) {
5261 if (__cxa_guard_acquire (&guard)) {
5262 bool flag = false;
5263 try {
5264 // Do initialization.
5265 flag = true; __cxa_guard_release (&guard);
5266 // Register variable for destruction at end of program.
5267 } catch {
5268 if (!flag) __cxa_guard_abort (&guard);
5272 Note that the `flag' variable is only set to 1 *after* the
5273 initialization is complete. This ensures that an exception,
5274 thrown during the construction, will cause the variable to
5275 reinitialized when we pass through this code again, as per:
5277 [stmt.dcl]
5279 If the initialization exits by throwing an exception, the
5280 initialization is not complete, so it will be tried again
5281 the next time control enters the declaration.
5283 This process should be thread-safe, too; multiple threads
5284 should not be able to initialize the variable more than
5285 once. */
5287 /* Create the guard variable. */
5288 guard = get_guard (decl);
5290 /* Begin the conditional initialization. */
5291 if_stmt = begin_if_stmt ();
5292 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5293 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5295 if (flag_threadsafe_statics)
5297 guard_addr = build_address (guard);
5298 guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5300 acquire_fn = get_identifier ("__cxa_guard_acquire");
5301 release_fn = get_identifier ("__cxa_guard_release");
5302 abort_fn = get_identifier ("__cxa_guard_abort");
5303 if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5305 tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5306 void_list_node);
5307 tree vfntype = build_function_type (void_type_node, argtypes);
5308 acquire_fn = push_library_fn
5309 (acquire_fn, build_function_type (integer_type_node, argtypes));
5310 release_fn = push_library_fn (release_fn, vfntype);
5311 abort_fn = push_library_fn (abort_fn, vfntype);
5313 else
5315 release_fn = identifier_global_value (release_fn);
5316 abort_fn = identifier_global_value (abort_fn);
5319 inner_if_stmt = begin_if_stmt ();
5320 finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5321 inner_if_stmt);
5323 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5324 begin = get_target_expr (boolean_false_node);
5325 flag = TARGET_EXPR_SLOT (begin);
5327 TARGET_EXPR_CLEANUP (begin)
5328 = build (COND_EXPR, void_type_node, flag,
5329 void_zero_node,
5330 build_call (abort_fn, guard_addr_list));
5331 CLEANUP_EH_ONLY (begin) = 1;
5333 /* Do the initialization itself. */
5334 init = add_stmt_to_compound (begin, init);
5335 init = add_stmt_to_compound
5336 (init, build (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5337 init = add_stmt_to_compound
5338 (init, build_call (release_fn, guard_addr_list));
5340 else
5341 init = add_stmt_to_compound (init, set_guard (guard));
5343 /* Use atexit to register a function for destroying this static
5344 variable. */
5345 init = add_stmt_to_compound (init, register_dtor_fn (decl));
5347 finish_expr_stmt (init);
5349 if (flag_threadsafe_statics)
5351 finish_compound_stmt (inner_then_clause);
5352 finish_then_clause (inner_if_stmt);
5353 finish_if_stmt (inner_if_stmt);
5356 finish_compound_stmt (then_clause);
5357 finish_then_clause (if_stmt);
5358 finish_if_stmt (if_stmt);
5360 else
5361 static_aggregates = tree_cons (init, decl, static_aggregates);
5365 /* Make TYPE a complete type based on INITIAL_VALUE.
5366 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5367 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
5370 complete_array_type (tree type, tree initial_value, int do_default)
5372 tree maxindex = NULL_TREE;
5373 int value = 0;
5375 if (initial_value)
5377 /* An array of character type can be initialized from a
5378 brace-enclosed string constant. */
5379 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
5380 && TREE_CODE (initial_value) == CONSTRUCTOR
5381 && CONSTRUCTOR_ELTS (initial_value)
5382 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5383 == STRING_CST)
5384 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5385 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5387 /* Note MAXINDEX is really the maximum index, one less than the
5388 size. */
5389 if (TREE_CODE (initial_value) == STRING_CST)
5391 int eltsize
5392 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
5393 maxindex = build_int_cst (NULL_TREE,
5394 (TREE_STRING_LENGTH (initial_value)
5395 / eltsize) - 1);
5397 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
5399 tree elts = CONSTRUCTOR_ELTS (initial_value);
5401 maxindex = ssize_int (-1);
5402 for (; elts; elts = TREE_CHAIN (elts))
5404 if (TREE_PURPOSE (elts))
5405 maxindex = TREE_PURPOSE (elts);
5406 else
5407 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
5410 else
5412 /* Make an error message unless that happened already. */
5413 if (initial_value != error_mark_node)
5414 value = 1;
5415 else
5416 initial_value = NULL_TREE;
5418 /* Prevent further error messages. */
5419 maxindex = build_int_cst (NULL_TREE, 0);
5423 if (!maxindex)
5425 if (do_default)
5426 maxindex = build_int_cst (NULL_TREE, 0);
5427 value = 2;
5430 if (maxindex)
5432 tree itype;
5433 tree domain;
5434 tree elt_type;
5436 domain = build_index_type (maxindex);
5437 TYPE_DOMAIN (type) = domain;
5439 if (initial_value)
5440 itype = TREE_TYPE (initial_value);
5441 else
5442 itype = NULL;
5443 if (itype && !TYPE_DOMAIN (itype))
5444 TYPE_DOMAIN (itype) = domain;
5445 /* The type of the main variant should never be used for arrays
5446 of different sizes. It should only ever be completed with the
5447 size of the array. */
5448 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
5449 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
5451 elt_type = TREE_TYPE (type);
5452 TYPE_NEEDS_CONSTRUCTING (type)
5453 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
5454 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5455 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
5458 /* Lay out the type now that we can get the real answer. */
5460 layout_type (type);
5462 return value;
5465 /* Return zero if something is declared to be a member of type
5466 CTYPE when in the context of CUR_TYPE. STRING is the error
5467 message to print in that case. Otherwise, quietly return 1. */
5469 static int
5470 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5472 if (ctype && ctype != cur_type)
5474 if (flags == DTOR_FLAG)
5475 error ("destructor for alien class %qT cannot be a member", ctype);
5476 else
5477 error ("constructor for alien class %qT cannot be a member", ctype);
5478 return 0;
5480 return 1;
5483 /* Subroutine of `grokdeclarator'. */
5485 /* Generate errors possibly applicable for a given set of specifiers.
5486 This is for ARM $7.1.2. */
5488 static void
5489 bad_specifiers (tree object,
5490 const char* type,
5491 int virtualp,
5492 int quals,
5493 int inlinep,
5494 int friendp,
5495 int raises)
5497 if (virtualp)
5498 error ("%qD declared as a %<virtual%> %s", object, type);
5499 if (inlinep)
5500 error ("%qD declared as an %<inline%> %s", object, type);
5501 if (quals)
5502 error ("%<const%> and %<volatile%> function specifiers on "
5503 "q%D invalid in %s declaration",
5504 object, type);
5505 if (friendp)
5506 cp_error_at ("%qD declared as a friend", object);
5507 if (raises
5508 && (TREE_CODE (object) == TYPE_DECL
5509 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5510 && !TYPE_REFFN_P (TREE_TYPE (object))
5511 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5512 cp_error_at ("%qD declared with an exception specification", object);
5515 /* CTYPE is class type, or null if non-class.
5516 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5517 or METHOD_TYPE.
5518 DECLARATOR is the function's name.
5519 PARMS is a chain of PARM_DECLs for the function.
5520 VIRTUALP is truthvalue of whether the function is virtual or not.
5521 FLAGS are to be passed through to `grokclassfn'.
5522 QUALS are qualifiers indicating whether the function is `const'
5523 or `volatile'.
5524 RAISES is a list of exceptions that this function can raise.
5525 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5526 not look, and -1 if we should not call `grokclassfn' at all.
5528 Returns `NULL_TREE' if something goes wrong, after issuing
5529 applicable error messages. */
5531 static tree
5532 grokfndecl (tree ctype,
5533 tree type,
5534 tree declarator,
5535 tree parms,
5536 tree orig_declarator,
5537 int virtualp,
5538 enum overload_flags flags,
5539 cp_cv_quals quals,
5540 tree raises,
5541 int check,
5542 int friendp,
5543 int publicp,
5544 int inlinep,
5545 int funcdef_flag,
5546 int template_count,
5547 tree in_namespace,
5548 tree* attrlist)
5550 tree decl;
5551 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5552 int has_default_arg = 0;
5553 tree t;
5555 if (raises)
5556 type = build_exception_variant (type, raises);
5558 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5559 DECL_ARGUMENTS (decl) = parms;
5560 /* Propagate volatile out from type to decl. */
5561 if (TYPE_VOLATILE (type))
5562 TREE_THIS_VOLATILE (decl) = 1;
5564 /* If this decl has namespace scope, set that up. */
5565 if (in_namespace)
5566 set_decl_namespace (decl, in_namespace, friendp);
5567 else if (!ctype)
5568 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5570 /* `main' and builtins have implicit 'C' linkage. */
5571 if ((MAIN_NAME_P (declarator)
5572 || (IDENTIFIER_LENGTH (declarator) > 10
5573 && IDENTIFIER_POINTER (declarator)[0] == '_'
5574 && IDENTIFIER_POINTER (declarator)[1] == '_'
5575 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5576 && current_lang_name == lang_name_cplusplus
5577 && ctype == NULL_TREE
5578 /* NULL_TREE means global namespace. */
5579 && DECL_CONTEXT (decl) == NULL_TREE)
5580 SET_DECL_LANGUAGE (decl, lang_c);
5582 /* Should probably propagate const out from type to decl I bet (mrs). */
5583 if (staticp)
5585 DECL_STATIC_FUNCTION_P (decl) = 1;
5586 DECL_CONTEXT (decl) = ctype;
5589 if (ctype)
5590 DECL_CONTEXT (decl) = ctype;
5592 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5594 if (processing_template_decl)
5595 error ("cannot declare %<::main%> to be a template");
5596 if (inlinep)
5597 error ("cannot declare %<::main%> to be inline");
5598 if (!publicp)
5599 error ("cannot declare %<::main%> to be static");
5600 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5601 integer_type_node))
5603 error ("%<::main%> must return %<int%>");
5604 TREE_TYPE (TREE_TYPE (decl)) = integer_type_node;
5606 inlinep = 0;
5607 publicp = 1;
5610 /* Members of anonymous types and local classes have no linkage; make
5611 them internal. If a typedef is made later, this will be changed. */
5612 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5613 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5614 publicp = 0;
5616 if (publicp)
5618 /* [basic.link]: A name with no linkage (notably, the name of a class
5619 or enumeration declared in a local scope) shall not be used to
5620 declare an entity with linkage.
5622 Only check this for public decls for now. See core 319, 389. */
5623 t = no_linkage_check (TREE_TYPE (decl),
5624 /*relaxed_p=*/false);
5625 if (t)
5627 if (TYPE_ANONYMOUS_P (t))
5629 if (DECL_EXTERN_C_P (decl))
5630 /* Allow this; it's pretty common in C. */;
5631 else
5633 pedwarn ("non-local function %q#D uses anonymous type",
5634 decl);
5635 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5636 cp_pedwarn_at ("%q#D does not refer to the unqualified "
5637 "type, so it is not used for linkage",
5638 TYPE_NAME (t));
5641 else
5642 pedwarn ("non-local function %q#D uses local type %qT", decl, t);
5646 TREE_PUBLIC (decl) = publicp;
5647 if (! publicp)
5649 DECL_INTERFACE_KNOWN (decl) = 1;
5650 DECL_NOT_REALLY_EXTERN (decl) = 1;
5653 /* If the declaration was declared inline, mark it as such. */
5654 if (inlinep)
5655 DECL_DECLARED_INLINE_P (decl) = 1;
5656 /* We inline functions that are explicitly declared inline, or, when
5657 the user explicitly asks us to, all functions. */
5658 if (DECL_DECLARED_INLINE_P (decl)
5659 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5660 DECL_INLINE (decl) = 1;
5662 DECL_EXTERNAL (decl) = 1;
5663 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
5665 error ("%smember function %qD cannot have cv-qualifier",
5666 (ctype ? "static " : "non-"), decl);
5667 quals = TYPE_UNQUALIFIED;
5670 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5671 grok_op_properties (decl, friendp, /*complain=*/true);
5673 if (ctype && decl_function_context (decl))
5674 DECL_NO_STATIC_CHAIN (decl) = 1;
5676 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5677 if (TREE_PURPOSE (t)
5678 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5680 has_default_arg = 1;
5681 break;
5684 if (friendp
5685 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5687 if (funcdef_flag)
5688 error
5689 ("defining explicit specialization %qD in friend declaration",
5690 orig_declarator);
5691 else
5693 tree fns = TREE_OPERAND (orig_declarator, 0);
5694 tree args = TREE_OPERAND (orig_declarator, 1);
5696 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5698 /* Something like `template <class T> friend void f<T>()'. */
5699 error ("invalid use of template-id %qD in declaration "
5700 "of primary template",
5701 orig_declarator);
5702 return NULL_TREE;
5706 /* A friend declaration of the form friend void f<>(). Record
5707 the information in the TEMPLATE_ID_EXPR. */
5708 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5710 if (TREE_CODE (fns) == COMPONENT_REF)
5712 /* Due to bison parser ickiness, we will have already looked
5713 up an operator_name or PFUNCNAME within the current class
5714 (see template_id in parse.y). If the current class contains
5715 such a name, we'll get a COMPONENT_REF here. Undo that. */
5717 gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5718 == current_class_type);
5719 fns = TREE_OPERAND (fns, 1);
5721 gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5722 || TREE_CODE (fns) == OVERLOAD);
5723 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5725 if (has_default_arg)
5727 error ("default arguments are not allowed in declaration "
5728 "of friend template specialization %qD",
5729 decl);
5730 return NULL_TREE;
5733 if (inlinep)
5735 error ("%<inline%> is not allowed in declaration of friend "
5736 "template specialization %qD",
5737 decl);
5738 return NULL_TREE;
5743 if (funcdef_flag)
5744 /* Make the init_value nonzero so pushdecl knows this is not
5745 tentative. error_mark_node is replaced later with the BLOCK. */
5746 DECL_INITIAL (decl) = error_mark_node;
5748 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5749 TREE_NOTHROW (decl) = 1;
5751 /* Caller will do the rest of this. */
5752 if (check < 0)
5753 return decl;
5755 if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
5756 DECL_CONSTRUCTOR_P (decl) = 1;
5758 /* Function gets the ugly name, field gets the nice one. This call
5759 may change the type of the function (because of default
5760 parameters)! */
5761 if (ctype != NULL_TREE)
5762 grokclassfn (ctype, decl, flags, quals);
5764 decl = check_explicit_specialization (orig_declarator, decl,
5765 template_count,
5766 2 * (funcdef_flag != 0) +
5767 4 * (friendp != 0));
5768 if (decl == error_mark_node)
5769 return NULL_TREE;
5771 if (attrlist)
5773 cplus_decl_attributes (&decl, *attrlist, 0);
5774 *attrlist = NULL_TREE;
5777 if (ctype != NULL_TREE
5778 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5779 && check)
5781 tree old_decl;
5783 old_decl = check_classfn (ctype, decl,
5784 (processing_template_decl
5785 > template_class_depth (ctype))
5786 ? current_template_parms
5787 : NULL_TREE);
5789 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5790 /* Because grokfndecl is always supposed to return a
5791 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5792 here. We depend on our callers to figure out that its
5793 really a template that's being returned. */
5794 old_decl = DECL_TEMPLATE_RESULT (old_decl);
5796 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5797 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5798 /* Remove the `this' parm added by grokclassfn.
5799 XXX Isn't this done in start_function, too? */
5800 revert_static_member_fn (decl);
5801 if (old_decl && DECL_ARTIFICIAL (old_decl))
5802 error ("definition of implicitly-declared %qD", old_decl);
5804 if (old_decl)
5806 tree ok;
5807 bool pop_p;
5809 /* Since we've smashed OLD_DECL to its
5810 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5811 if (TREE_CODE (decl) == TEMPLATE_DECL)
5812 decl = DECL_TEMPLATE_RESULT (decl);
5814 /* Attempt to merge the declarations. This can fail, in
5815 the case of some invalid specialization declarations. */
5816 pop_p = push_scope (ctype);
5817 ok = duplicate_decls (decl, old_decl);
5818 if (pop_p)
5819 pop_scope (ctype);
5820 if (!ok)
5822 error ("no %q#D member function declared in class %qT",
5823 decl, ctype);
5824 return NULL_TREE;
5826 return old_decl;
5830 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5831 return NULL_TREE;
5833 if (ctype == NULL_TREE || check)
5834 return decl;
5836 if (virtualp)
5837 DECL_VIRTUAL_P (decl) = 1;
5839 return decl;
5842 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
5843 the linkage that DECL will receive in the object file. */
5845 static void
5846 set_linkage_for_static_data_member (tree decl)
5848 /* A static data member always has static storage duration and
5849 external linkage. Note that static data members are forbidden in
5850 local classes -- the only situation in which a class has
5851 non-external linkage. */
5852 TREE_PUBLIC (decl) = 1;
5853 TREE_STATIC (decl) = 1;
5854 /* For non-template classes, static data members are always put
5855 out in exactly those files where they are defined, just as
5856 with ordinary namespace-scope variables. */
5857 if (!processing_template_decl)
5858 DECL_INTERFACE_KNOWN (decl) = 1;
5861 /* Create a VAR_DECL named NAME with the indicated TYPE.
5863 If SCOPE is non-NULL, it is the class type or namespace containing
5864 the variable. If SCOPE is NULL, the variable should is created in
5865 the innermost enclosings scope. */
5867 static tree
5868 grokvardecl (tree type,
5869 tree name,
5870 const cp_decl_specifier_seq *declspecs,
5871 int initialized,
5872 int constp,
5873 tree scope)
5875 tree decl;
5877 gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
5879 /* Compute the scope in which to place the variable. */
5880 if (!scope)
5882 /* An explicit "extern" specifier indicates a namespace-scope
5883 variable. */
5884 if (declspecs->storage_class == sc_extern)
5885 scope = current_namespace;
5886 else if (!at_function_scope_p ())
5888 scope = current_scope ();
5889 if (!scope)
5890 scope = current_namespace;
5894 if (scope
5895 && (/* If the variable is a namespace-scope variable declared in a
5896 template, we need DECL_LANG_SPECIFIC. */
5897 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5898 /* Similarly for namespace-scope variables with language linkage
5899 other than C++. */
5900 || (TREE_CODE (scope) == NAMESPACE_DECL
5901 && current_lang_name != lang_name_cplusplus)
5902 /* Similarly for static data members. */
5903 || TYPE_P (scope)))
5904 decl = build_lang_decl (VAR_DECL, name, type);
5905 else
5906 decl = build_decl (VAR_DECL, name, type);
5908 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
5909 set_decl_namespace (decl, scope, 0);
5910 else
5911 DECL_CONTEXT (decl) = scope;
5913 if (declspecs->storage_class == sc_extern)
5915 DECL_THIS_EXTERN (decl) = 1;
5916 DECL_EXTERNAL (decl) = !initialized;
5919 if (DECL_CLASS_SCOPE_P (decl))
5921 set_linkage_for_static_data_member (decl);
5922 /* This function is only called with out-of-class definitions. */
5923 DECL_EXTERNAL (decl) = 0;
5925 /* At top level, either `static' or no s.c. makes a definition
5926 (perhaps tentative), and absence of `static' makes it public. */
5927 else if (toplevel_bindings_p ())
5929 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
5930 && (DECL_THIS_EXTERN (decl) || ! constp));
5931 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5933 /* Not at top level, only `static' makes a static definition. */
5934 else
5936 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
5937 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5940 if (declspecs->specs[(int)ds_thread])
5942 if (targetm.have_tls)
5943 DECL_THREAD_LOCAL (decl) = 1;
5944 else
5945 /* A mere warning is sure to result in improper semantics
5946 at runtime. Don't bother to allow this to compile. */
5947 error ("thread-local storage not supported for this target");
5950 if (TREE_PUBLIC (decl))
5952 /* [basic.link]: A name with no linkage (notably, the name of a class
5953 or enumeration declared in a local scope) shall not be used to
5954 declare an entity with linkage.
5956 Only check this for public decls for now. */
5957 tree t1 = TREE_TYPE (decl);
5958 tree t = no_linkage_check (t1, /*relaxed_p=*/false);
5959 if (t)
5961 if (TYPE_ANONYMOUS_P (t))
5963 if (DECL_EXTERN_C_P (decl))
5964 /* Allow this; it's pretty common in C. */
5966 else if (same_type_ignoring_top_level_qualifiers_p(t1, t))
5967 /* This is something like "enum { a = 3 } x;", which is
5968 well formed. The enum doesn't have "a name with no
5969 linkage", because it has no name. See closed CWG issue
5970 132.
5972 Note that while this construct is well formed in C++03
5973 it is likely to become ill formed in C++0x. See open
5974 CWG issue 389 and related issues. */
5976 else
5978 /* It's a typedef referring to an anonymous type. */
5979 pedwarn ("non-local variable %q#D uses anonymous type",
5980 decl);
5981 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5982 cp_pedwarn_at ("%q#D does not refer to the unqualified "
5983 "type, so it is not used for linkage",
5984 TYPE_NAME (t));
5987 else
5988 pedwarn ("non-local variable %q#D uses local type %qT", decl, t);
5992 return decl;
5995 /* Create and return a canonical pointer to member function type, for
5996 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5998 tree
5999 build_ptrmemfunc_type (tree type)
6001 tree field, fields;
6002 tree t;
6003 tree unqualified_variant = NULL_TREE;
6005 if (type == error_mark_node)
6006 return type;
6008 /* If a canonical type already exists for this type, use it. We use
6009 this method instead of type_hash_canon, because it only does a
6010 simple equality check on the list of field members. */
6012 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6013 return t;
6015 /* Make sure that we always have the unqualified pointer-to-member
6016 type first. */
6017 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6018 unqualified_variant
6019 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6021 t = make_aggr_type (RECORD_TYPE);
6022 xref_basetypes (t, NULL_TREE);
6024 /* Let the front-end know this is a pointer to member function... */
6025 TYPE_PTRMEMFUNC_FLAG (t) = 1;
6026 /* ... and not really an aggregate. */
6027 SET_IS_AGGR_TYPE (t, 0);
6029 field = build_decl (FIELD_DECL, pfn_identifier, type);
6030 fields = field;
6032 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6033 TREE_CHAIN (field) = fields;
6034 fields = field;
6036 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6038 /* Zap out the name so that the back-end will give us the debugging
6039 information for this anonymous RECORD_TYPE. */
6040 TYPE_NAME (t) = NULL_TREE;
6042 /* If this is not the unqualified form of this pointer-to-member
6043 type, set the TYPE_MAIN_VARIANT for this type to be the
6044 unqualified type. Since they are actually RECORD_TYPEs that are
6045 not variants of each other, we must do this manually. */
6046 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6048 t = build_qualified_type (t, cp_type_quals (type));
6049 TYPE_MAIN_VARIANT (t) = unqualified_variant;
6050 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6051 TYPE_NEXT_VARIANT (unqualified_variant) = t;
6054 /* Cache this pointer-to-member type so that we can find it again
6055 later. */
6056 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6058 return t;
6061 /* Create and return a pointer to data member type. */
6063 tree
6064 build_ptrmem_type (tree class_type, tree member_type)
6066 if (TREE_CODE (member_type) == METHOD_TYPE)
6068 tree arg_types;
6070 arg_types = TYPE_ARG_TYPES (member_type);
6071 class_type = (cp_build_qualified_type
6072 (class_type,
6073 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6074 member_type
6075 = build_method_type_directly (class_type,
6076 TREE_TYPE (member_type),
6077 TREE_CHAIN (arg_types));
6078 return build_ptrmemfunc_type (build_pointer_type (member_type));
6080 else
6082 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6083 return build_offset_type (class_type, member_type);
6087 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6088 Check to see that the definition is valid. Issue appropriate error
6089 messages. Return 1 if the definition is particularly bad, or 0
6090 otherwise. */
6093 check_static_variable_definition (tree decl, tree type)
6095 /* Motion 10 at San Diego: If a static const integral data member is
6096 initialized with an integral constant expression, the initializer
6097 may appear either in the declaration (within the class), or in
6098 the definition, but not both. If it appears in the class, the
6099 member is a member constant. The file-scope definition is always
6100 required. */
6101 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6103 error ("invalid in-class initialization of static data member "
6104 "of non-integral type %qT",
6105 type);
6106 /* If we just return the declaration, crashes will sometimes
6107 occur. We therefore return void_type_node, as if this were a
6108 friend declaration, to cause callers to completely ignore
6109 this declaration. */
6110 return 1;
6112 else if (!CP_TYPE_CONST_P (type))
6113 error ("ISO C++ forbids in-class initialization of non-const "
6114 "static member %qD",
6115 decl);
6116 else if (pedantic && !INTEGRAL_TYPE_P (type))
6117 pedwarn ("ISO C++ forbids initialization of member constant "
6118 "%qD of non-integral type %qT", decl, type);
6120 return 0;
6123 /* Given the SIZE (i.e., number of elements) in an array, compute an
6124 appropriate index type for the array. If non-NULL, NAME is the
6125 name of the thing being declared. */
6127 tree
6128 compute_array_index_type (tree name, tree size)
6130 tree type = TREE_TYPE (size);
6131 tree itype;
6133 /* The array bound must be an integer type. */
6134 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6136 if (name)
6137 error ("size of array %qD has non-integral type %qT", name, type);
6138 else
6139 error ("size of array has non-integral type %qT", type);
6140 size = integer_one_node;
6141 type = TREE_TYPE (size);
6144 if (abi_version_at_least (2)
6145 /* We should only handle value dependent expressions specially. */
6146 ? value_dependent_expression_p (size)
6147 /* But for abi-1, we handled all instances in templates. This
6148 effects the manglings produced. */
6149 : processing_template_decl)
6150 return build_index_type (build_min (MINUS_EXPR, sizetype,
6151 size, integer_one_node));
6153 /* The size might be the result of a cast. */
6154 STRIP_TYPE_NOPS (size);
6156 /* It might be a const variable or enumeration constant. */
6157 size = decl_constant_value (size);
6159 /* Normally, the array-bound will be a constant. */
6160 if (TREE_CODE (size) == INTEGER_CST)
6162 /* Check to see if the array bound overflowed. Make that an
6163 error, no matter how generous we're being. */
6164 int old_flag_pedantic_errors = flag_pedantic_errors;
6165 int old_pedantic = pedantic;
6166 pedantic = flag_pedantic_errors = 1;
6167 constant_expression_warning (size);
6168 pedantic = old_pedantic;
6169 flag_pedantic_errors = old_flag_pedantic_errors;
6171 /* An array must have a positive number of elements. */
6172 if (INT_CST_LT (size, integer_zero_node))
6174 if (name)
6175 error ("size of array %qD is negative", name);
6176 else
6177 error ("size of array is negative");
6178 size = integer_one_node;
6180 /* As an extension we allow zero-sized arrays. We always allow
6181 them in system headers because glibc uses them. */
6182 else if (integer_zerop (size) && pedantic && !in_system_header)
6184 if (name)
6185 pedwarn ("ISO C++ forbids zero-size array %qD", name);
6186 else
6187 pedwarn ("ISO C++ forbids zero-size array");
6190 else if (TREE_CONSTANT (size))
6192 /* `(int) &fn' is not a valid array bound. */
6193 if (name)
6194 error ("size of array %qD is not an integral constant-expression",
6195 name);
6196 else
6197 error ("size of array is not an integral constant-expression");
6199 else if (pedantic)
6201 if (name)
6202 pedwarn ("ISO C++ forbids variable-size array %qD", name);
6203 else
6204 pedwarn ("ISO C++ forbids variable-size array");
6207 if (processing_template_decl && !TREE_CONSTANT (size))
6208 /* A variable sized array. */
6209 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6210 else
6212 HOST_WIDE_INT saved_processing_template_decl;
6214 /* Compute the index of the largest element in the array. It is
6215 one less than the number of elements in the array. We save
6216 and restore PROCESSING_TEMPLATE_DECL so that computations in
6217 cp_build_binary_op will be appropriately folded. */
6218 saved_processing_template_decl = processing_template_decl;
6219 processing_template_decl = 0;
6220 itype = cp_build_binary_op (MINUS_EXPR,
6221 cp_convert (ssizetype, size),
6222 cp_convert (ssizetype, integer_one_node));
6223 itype = fold (itype);
6224 processing_template_decl = saved_processing_template_decl;
6226 if (!TREE_CONSTANT (itype))
6227 /* A variable sized array. */
6228 itype = variable_size (itype);
6229 /* Make sure that there was no overflow when creating to a signed
6230 index type. (For example, on a 32-bit machine, an array with
6231 size 2^32 - 1 is too big.) */
6232 else if (TREE_OVERFLOW (itype))
6234 error ("overflow in array dimension");
6235 TREE_OVERFLOW (itype) = 0;
6239 /* Create and return the appropriate index type. */
6240 return build_index_type (itype);
6243 /* Returns the scope (if any) in which the entity declared by
6244 DECLARATOR will be located. If the entity was declared with an
6245 unqualified name, NULL_TREE is returned. */
6247 tree
6248 get_scope_of_declarator (const cp_declarator *declarator)
6250 while (declarator && declarator->kind != cdk_id)
6251 declarator = declarator->declarator;
6253 /* If the declarator-id is a SCOPE_REF, the scope in which the
6254 declaration occurs is the first operand. */
6255 if (declarator
6256 && declarator->u.id.name
6257 && TREE_CODE (declarator->u.id.name) == SCOPE_REF)
6258 return TREE_OPERAND (declarator->u.id.name, 0);
6260 /* Otherwise, the declarator is not a qualified name; the entity will
6261 be declared in the current scope. */
6262 return NULL_TREE;
6265 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6266 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6267 with this type. */
6269 static tree
6270 create_array_type_for_decl (tree name, tree type, tree size)
6272 tree itype = NULL_TREE;
6273 const char* error_msg;
6275 /* If things have already gone awry, bail now. */
6276 if (type == error_mark_node || size == error_mark_node)
6277 return error_mark_node;
6279 /* Assume that everything will go OK. */
6280 error_msg = NULL;
6282 /* There are some types which cannot be array elements. */
6283 switch (TREE_CODE (type))
6285 case VOID_TYPE:
6286 error_msg = "array of void";
6287 break;
6289 case FUNCTION_TYPE:
6290 error_msg = "array of functions";
6291 break;
6293 case REFERENCE_TYPE:
6294 error_msg = "array of references";
6295 break;
6297 case METHOD_TYPE:
6298 error_msg = "array of function members";
6299 break;
6301 default:
6302 break;
6305 /* If something went wrong, issue an error-message and return. */
6306 if (error_msg)
6308 if (name)
6309 error ("declaration of %qD as %s", name, error_msg);
6310 else
6311 error ("creating %s", error_msg);
6313 return error_mark_node;
6316 /* [dcl.array]
6318 The constant expressions that specify the bounds of the arrays
6319 can be omitted only for the first member of the sequence. */
6320 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6322 if (name)
6323 error ("declaration of %qD as multidimensional array must "
6324 "have bounds for all dimensions except the first",
6325 name);
6326 else
6327 error ("multidimensional array must have bounds for all "
6328 "dimensions except the first");
6330 return error_mark_node;
6333 /* Figure out the index type for the array. */
6334 if (size)
6335 itype = compute_array_index_type (name, size);
6337 /* [dcl.array]
6338 T is called the array element type; this type shall not be [...] an
6339 abstract class type. */
6340 abstract_virtuals_error (name, type);
6342 return build_cplus_array_type (type, itype);
6345 /* Check that it's OK to declare a function with the indicated TYPE.
6346 SFK indicates the kind of special function (if any) that this
6347 function is. OPTYPE is the type given in a conversion operator
6348 declaration, or the class type for a constructor/destructor.
6349 Returns the actual return type of the function; that
6350 may be different than TYPE if an error occurs, or for certain
6351 special functions. */
6353 static tree
6354 check_special_function_return_type (special_function_kind sfk,
6355 tree type,
6356 tree optype)
6358 switch (sfk)
6360 case sfk_constructor:
6361 if (type)
6362 error ("return type specification for constructor invalid");
6364 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6365 type = build_pointer_type (optype);
6366 else
6367 type = void_type_node;
6368 break;
6370 case sfk_destructor:
6371 if (type)
6372 error ("return type specification for destructor invalid");
6373 /* We can't use the proper return type here because we run into
6374 problems with ambiguous bases and covariant returns.
6375 Java classes are left unchanged because (void *) isn't a valid
6376 Java type, and we don't want to change the Java ABI. */
6377 if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6378 type = build_pointer_type (void_type_node);
6379 else
6380 type = void_type_node;
6381 break;
6383 case sfk_conversion:
6384 if (type && !same_type_p (type, optype))
6385 error ("operator %qT declared to return %qT", optype, type);
6386 else if (type)
6387 pedwarn ("return type specified for %<operator %T%>", optype);
6388 type = optype;
6389 break;
6391 default:
6392 gcc_unreachable ();
6395 return type;
6398 /* Given declspecs and a declarator (abstract or otherwise), determine
6399 the name and type of the object declared and construct a DECL node
6400 for it.
6402 DECLSPECS is a chain of tree_list nodes whose value fields
6403 are the storage classes and type specifiers.
6405 DECL_CONTEXT says which syntactic context this declaration is in:
6406 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6407 FUNCDEF for a function definition. Like NORMAL but a few different
6408 error messages in each case. Return value may be zero meaning
6409 this definition is too screwy to try to parse.
6410 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6411 handle member functions (which have FIELD context).
6412 Return value may be zero meaning this definition is too screwy to
6413 try to parse.
6414 PARM for a parameter declaration (either within a function prototype
6415 or before a function body). Make a PARM_DECL, or return void_type_node.
6416 CATCHPARM for a parameter declaration before a catch clause.
6417 TYPENAME if for a typename (in a cast or sizeof).
6418 Don't make a DECL node; just return the ..._TYPE node.
6419 FIELD for a struct or union field; make a FIELD_DECL.
6420 BITFIELD for a field with specified width.
6421 INITIALIZED is 1 if the decl has an initializer.
6423 ATTRLIST is a pointer to the list of attributes, which may be NULL
6424 if there are none; *ATTRLIST may be modified if attributes from inside
6425 the declarator should be applied to the declaration.
6427 When this function is called, scoping variables (such as
6428 CURRENT_CLASS_TYPE) should reflect the scope in which the
6429 declaration occurs, not the scope in which the new declaration will
6430 be placed. For example, on:
6432 void S::f() { ... }
6434 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6435 should not be `S'. */
6437 tree
6438 grokdeclarator (const cp_declarator *declarator,
6439 const cp_decl_specifier_seq *declspecs,
6440 enum decl_context decl_context,
6441 int initialized,
6442 tree* attrlist)
6444 tree type = NULL_TREE;
6445 int longlong = 0;
6446 int type_quals;
6447 int virtualp, explicitp, friendp, inlinep, staticp;
6448 int explicit_int = 0;
6449 int explicit_char = 0;
6450 int defaulted_int = 0;
6451 tree dependant_name = NULL_TREE;
6453 tree typedef_decl = NULL_TREE;
6454 const char *name = NULL;
6455 tree typedef_type = NULL_TREE;
6456 int funcdef_flag = 0;
6457 cp_declarator_kind innermost_code = cdk_error;
6458 int bitfield = 0;
6459 #if 0
6460 /* See the code below that used this. */
6461 tree decl_attr = NULL_TREE;
6462 #endif
6464 /* Keep track of what sort of function is being processed
6465 so that we can warn about default return values, or explicit
6466 return values which do not match prescribed defaults. */
6467 special_function_kind sfk = sfk_none;
6469 tree dname = NULL_TREE;
6470 tree ctor_return_type = NULL_TREE;
6471 enum overload_flags flags = NO_SPECIAL;
6472 cp_cv_quals quals = TYPE_UNQUALIFIED;
6473 tree raises = NULL_TREE;
6474 int template_count = 0;
6475 tree returned_attrs = NULL_TREE;
6476 tree parms = NULL_TREE;
6477 const cp_declarator *id_declarator;
6478 /* The unqualified name of the declarator; either an
6479 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6480 tree unqualified_id;
6481 /* The class type, if any, in which this entity is located,
6482 or NULL_TREE if none. Note that this value may be different from
6483 the current class type; for example if an attempt is made to declare
6484 "A::f" inside "B", this value will be "A". */
6485 tree ctype = current_class_type;
6486 /* The NAMESPACE_DECL for the namespace in which this entity is
6487 located. If an unqualified name is used to declare the entity,
6488 this value will be NULL_TREE, even if the entity is located at
6489 namespace scope. */
6490 tree in_namespace = NULL_TREE;
6491 cp_decl_spec ds;
6492 cp_storage_class storage_class;
6493 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6494 bool type_was_error_mark_node = false;
6496 signed_p = declspecs->specs[(int)ds_signed];
6497 unsigned_p = declspecs->specs[(int)ds_unsigned];
6498 short_p = declspecs->specs[(int)ds_short];
6499 long_p = declspecs->specs[(int)ds_long];
6500 thread_p = declspecs->specs[(int)ds_thread];
6502 if (decl_context == FUNCDEF)
6503 funcdef_flag = 1, decl_context = NORMAL;
6504 else if (decl_context == MEMFUNCDEF)
6505 funcdef_flag = -1, decl_context = FIELD;
6506 else if (decl_context == BITFIELD)
6507 bitfield = 1, decl_context = FIELD;
6509 /* Look inside a declarator for the name being declared
6510 and get it as a string, for an error message. */
6511 for (id_declarator = declarator;
6512 id_declarator;
6513 id_declarator = id_declarator->declarator)
6515 if (id_declarator->kind != cdk_id)
6516 innermost_code = id_declarator->kind;
6518 switch (id_declarator->kind)
6520 case cdk_function:
6521 if (id_declarator->declarator
6522 && id_declarator->declarator->kind == cdk_id)
6524 sfk = id_declarator->declarator->u.id.sfk;
6525 if (sfk == sfk_destructor)
6526 flags = DTOR_FLAG;
6528 break;
6530 case cdk_id:
6532 tree decl = id_declarator->u.id.name;
6533 if (!decl)
6534 break;
6535 if (TREE_CODE (decl) == SCOPE_REF)
6537 tree qualifying_scope = TREE_OPERAND (decl, 0);
6539 /* It is valid to write:
6541 class C { void f(); };
6542 typedef C D;
6543 void D::f();
6545 The standard is not clear about whether `typedef const C D' is
6546 legal; as of 2002-09-15 the committee is considering
6547 that question. EDG 3.0 allows that syntax.
6548 Therefore, we do as well. */
6549 if (qualifying_scope && TYPE_P (qualifying_scope))
6551 ctype = TYPE_MAIN_VARIANT (qualifying_scope);
6552 if (innermost_code != cdk_function
6553 && current_class_type
6554 && !UNIQUELY_DERIVED_FROM_P (ctype,
6555 current_class_type))
6557 error ("type %qT is not derived from type %qT",
6558 ctype, current_class_type);
6559 ctype = NULL_TREE;
6561 TREE_OPERAND (decl, 0) = ctype;
6563 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6564 in_namespace = qualifying_scope;
6565 decl = TREE_OPERAND (decl, 1);
6567 if (TREE_CODE (decl) == BASELINK)
6568 decl = BASELINK_FUNCTIONS (decl);
6569 if (decl == error_mark_node)
6570 return error_mark_node;
6571 switch (TREE_CODE (decl))
6573 case BIT_NOT_EXPR:
6575 tree type = TREE_OPERAND (decl, 0);
6576 type = constructor_name (type);
6577 name = IDENTIFIER_POINTER (type);
6579 break;
6581 case TEMPLATE_ID_EXPR:
6583 tree fns = TREE_OPERAND (decl, 0);
6585 dname = fns;
6586 if (TREE_CODE (dname) == COMPONENT_REF)
6587 dname = TREE_OPERAND (dname, 1);
6588 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6590 gcc_assert (is_overloaded_fn (dname));
6591 dname = DECL_NAME (get_first_fn (dname));
6594 /* Fall through. */
6596 case IDENTIFIER_NODE:
6597 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6598 dname = decl;
6600 if (C_IS_RESERVED_WORD (dname))
6602 error ("declarator-id missing; using reserved word %qD",
6603 dname);
6604 name = IDENTIFIER_POINTER (dname);
6606 else if (!IDENTIFIER_TYPENAME_P (dname))
6607 name = IDENTIFIER_POINTER (dname);
6608 else
6610 gcc_assert (flags == NO_SPECIAL);
6611 flags = TYPENAME_FLAG;
6612 ctor_return_type = TREE_TYPE (dname);
6613 sfk = sfk_conversion;
6614 if (is_typename_at_global_scope (dname))
6615 name = IDENTIFIER_POINTER (dname);
6616 else
6617 name = "<invalid operator>";
6619 break;
6621 case TYPE_DECL:
6622 dname = constructor_name (TREE_TYPE (decl));
6623 name = IDENTIFIER_POINTER (dname);
6624 break;
6626 default:
6627 gcc_unreachable ();
6629 break;
6631 case cdk_array:
6632 case cdk_pointer:
6633 case cdk_reference:
6634 case cdk_ptrmem:
6635 break;
6637 case cdk_error:
6638 break;
6640 default:
6641 gcc_unreachable ();
6644 if (id_declarator->kind == cdk_id)
6645 break;
6648 /* A function definition's declarator must have the form of
6649 a function declarator. */
6651 if (funcdef_flag && innermost_code != cdk_function)
6652 return 0;
6654 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6655 && innermost_code != cdk_function
6656 && ! (ctype && !declspecs->any_specifiers_p))
6658 error ("declaration of %qD as non-function", dname);
6659 return void_type_node;
6662 /* Anything declared one level down from the top level
6663 must be one of the parameters of a function
6664 (because the body is at least two levels down). */
6666 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6667 by not allowing C++ class definitions to specify their parameters
6668 with xdecls (must be spec.d in the parmlist).
6670 Since we now wait to push a class scope until we are sure that
6671 we are in a legitimate method context, we must set oldcname
6672 explicitly (since current_class_name is not yet alive).
6674 We also want to avoid calling this a PARM if it is in a namespace. */
6676 if (decl_context == NORMAL && !toplevel_bindings_p ())
6678 struct cp_binding_level *b = current_binding_level;
6679 current_binding_level = b->level_chain;
6680 if (current_binding_level != 0 && toplevel_bindings_p ())
6681 decl_context = PARM;
6682 current_binding_level = b;
6685 if (name == NULL)
6686 name = decl_context == PARM ? "parameter" : "type name";
6688 /* If there were multiple types specified in the decl-specifier-seq,
6689 issue an error message. */
6690 if (declspecs->multiple_types_p)
6691 error ("two or more data types in declaration of %qs", name);
6692 /* Extract the basic type from the decl-specifier-seq. */
6693 type = declspecs->type;
6694 if (type == error_mark_node)
6696 type = NULL_TREE;
6697 type_was_error_mark_node = true;
6699 /* If the entire declaration is itself tagged as deprecated then
6700 suppress reports of deprecated items. */
6701 if (type && TREE_DEPRECATED (type)
6702 && deprecated_state != DEPRECATED_SUPPRESS)
6703 warn_deprecated_use (type);
6704 if (type && TREE_CODE (type) == TYPE_DECL)
6706 typedef_decl = type;
6707 type = TREE_TYPE (typedef_decl);
6709 /* No type at all: default to `int', and set DEFAULTED_INT
6710 because it was not a user-defined typedef. */
6711 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
6713 /* These imply 'int'. */
6714 type = integer_type_node;
6715 defaulted_int = 1;
6717 /* Gather flags. */
6718 explicit_int = declspecs->explicit_int_p;
6719 explicit_char = declspecs->explicit_char_p;
6721 /* Check for repeated decl-specifiers. */
6722 for (ds = ds_first; ds != ds_last; ++ds)
6724 unsigned count = declspecs->specs[(int)ds];
6725 if (count < 2)
6726 continue;
6727 /* The "long" specifier is a special case because of
6728 "long long". */
6729 if (ds == ds_long)
6731 if (count > 2)
6732 error ("%<long long long%> is too long for GCC");
6733 else if (pedantic && !in_system_header && warn_long_long)
6734 pedwarn ("ISO C++ does not support %<long long%>");
6735 else
6736 longlong = 1;
6738 else if (declspecs->specs[(int)ds] > 1)
6740 static const char *const decl_spec_names[] = {
6741 "signed",
6742 "unsigned",
6743 "short",
6744 "long",
6745 "const",
6746 "volatile",
6747 "restrict",
6748 "inline",
6749 "virtual",
6750 "explicit",
6751 "friend",
6752 "typedef",
6753 "__complex",
6754 "__thread"
6756 error ("duplicate %qs", decl_spec_names[(int)ds]);
6760 #if 0
6761 /* See the code below that used this. */
6762 if (typedef_decl)
6763 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6764 #endif
6765 typedef_type = type;
6768 if (sfk != sfk_conversion)
6769 ctor_return_type = ctype;
6771 if (sfk != sfk_none)
6772 type = check_special_function_return_type (sfk, type,
6773 ctor_return_type);
6774 else if (type == NULL_TREE)
6776 int is_main;
6778 explicit_int = -1;
6780 /* We handle `main' specially here, because 'main () { }' is so
6781 common. With no options, it is allowed. With -Wreturn-type,
6782 it is a warning. It is only an error with -pedantic-errors. */
6783 is_main = (funcdef_flag
6784 && dname && MAIN_NAME_P (dname)
6785 && ctype == NULL_TREE
6786 && in_namespace == NULL_TREE
6787 && current_namespace == global_namespace);
6789 if (type_was_error_mark_node)
6790 /* We've already issued an error, don't complain more. */;
6791 else if (in_system_header || flag_ms_extensions)
6792 /* Allow it, sigh. */;
6793 else if (pedantic || ! is_main)
6794 pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
6795 else if (warn_return_type)
6796 warning ("ISO C++ forbids declaration of %qs with no type", name);
6798 type = integer_type_node;
6801 ctype = NULL_TREE;
6803 /* Now process the modifiers that were specified
6804 and check for invalid combinations. */
6806 /* Long double is a special combination. */
6807 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
6809 long_p = false;
6810 type = build_qualified_type (long_double_type_node,
6811 cp_type_quals (type));
6814 /* Check all other uses of type modifiers. */
6816 if (unsigned_p || signed_p || long_p || short_p)
6818 int ok = 0;
6820 if (TREE_CODE (type) == REAL_TYPE)
6821 error ("short, signed or unsigned invalid for %qs", name);
6822 else if (TREE_CODE (type) != INTEGER_TYPE)
6823 error ("long, short, signed or unsigned invalid for %qs", name);
6824 else if (long_p && short_p)
6825 error ("long and short specified together for %qs", name);
6826 else if ((long_p || short_p) && explicit_char)
6827 error ("long or short specified with char for %qs", name);
6828 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
6829 error ("long or short specified with floating type for %qs", name);
6830 else if (signed_p && unsigned_p)
6831 error ("signed and unsigned given together for %qs", name);
6832 else
6834 ok = 1;
6835 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6837 pedwarn ("long, short, signed or unsigned used invalidly for %qs",
6838 name);
6839 if (flag_pedantic_errors)
6840 ok = 0;
6844 /* Discard the type modifiers if they are invalid. */
6845 if (! ok)
6847 unsigned_p = false;
6848 signed_p = false;
6849 long_p = false;
6850 short_p = false;
6851 longlong = 0;
6855 /* Decide whether an integer type is signed or not.
6856 Optionally treat bitfields as signed by default. */
6857 if (unsigned_p
6858 /* [class.bit]
6860 It is implementation-defined whether a plain (neither
6861 explicitly signed or unsigned) char, short, int, or long
6862 bit-field is signed or unsigned.
6864 Naturally, we extend this to long long as well. Note that
6865 this does not include wchar_t. */
6866 || (bitfield && !flag_signed_bitfields
6867 && !signed_p
6868 /* A typedef for plain `int' without `signed' can be
6869 controlled just like plain `int', but a typedef for
6870 `signed int' cannot be so controlled. */
6871 && !(typedef_decl
6872 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6873 && (TREE_CODE (type) == INTEGER_TYPE
6874 || TREE_CODE (type) == CHAR_TYPE)
6875 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6877 if (longlong)
6878 type = long_long_unsigned_type_node;
6879 else if (long_p)
6880 type = long_unsigned_type_node;
6881 else if (short_p)
6882 type = short_unsigned_type_node;
6883 else if (type == char_type_node)
6884 type = unsigned_char_type_node;
6885 else if (typedef_decl)
6886 type = c_common_unsigned_type (type);
6887 else
6888 type = unsigned_type_node;
6890 else if (signed_p && type == char_type_node)
6891 type = signed_char_type_node;
6892 else if (longlong)
6893 type = long_long_integer_type_node;
6894 else if (long_p)
6895 type = long_integer_type_node;
6896 else if (short_p)
6897 type = short_integer_type_node;
6899 if (declspecs->specs[(int)ds_complex])
6901 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6902 error ("complex invalid for %qs", name);
6903 /* If we just have "complex", it is equivalent to
6904 "complex double", but if any modifiers at all are specified it is
6905 the complex form of TYPE. E.g, "complex short" is
6906 "complex short int". */
6908 else if (defaulted_int && ! longlong
6909 && ! (long_p || short_p || signed_p || unsigned_p))
6910 type = complex_double_type_node;
6911 else if (type == integer_type_node)
6912 type = complex_integer_type_node;
6913 else if (type == float_type_node)
6914 type = complex_float_type_node;
6915 else if (type == double_type_node)
6916 type = complex_double_type_node;
6917 else if (type == long_double_type_node)
6918 type = complex_long_double_type_node;
6919 else
6920 type = build_complex_type (type);
6923 type_quals = TYPE_UNQUALIFIED;
6924 if (declspecs->specs[(int)ds_const])
6925 type_quals |= TYPE_QUAL_CONST;
6926 if (declspecs->specs[(int)ds_volatile])
6927 type_quals |= TYPE_QUAL_VOLATILE;
6928 if (declspecs->specs[(int)ds_restrict])
6929 type_quals |= TYPE_QUAL_RESTRICT;
6930 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
6931 error ("qualifiers are not allowed on declaration of %<operator %T%>",
6932 ctor_return_type);
6934 type_quals |= cp_type_quals (type);
6935 type = cp_build_qualified_type_real
6936 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
6937 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
6938 /* We might have ignored or rejected some of the qualifiers. */
6939 type_quals = cp_type_quals (type);
6941 staticp = 0;
6942 inlinep = !! declspecs->specs[(int)ds_inline];
6943 virtualp = !! declspecs->specs[(int)ds_virtual];
6944 explicitp = !! declspecs->specs[(int)ds_explicit];
6946 storage_class = declspecs->storage_class;
6947 if (storage_class == sc_static)
6948 staticp = 1 + (decl_context == FIELD);
6950 if (virtualp && staticp == 2)
6952 error ("member %qD cannot be declared both virtual and static", dname);
6953 staticp = 0;
6955 friendp = !! declspecs->specs[(int)ds_friend];
6957 if (dependant_name && !friendp)
6959 error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
6960 return void_type_node;
6963 /* Issue errors about use of storage classes for parameters. */
6964 if (decl_context == PARM)
6966 if (declspecs->specs[(int)ds_typedef])
6967 error ("typedef declaration invalid in parameter declaration");
6968 else if (storage_class == sc_static
6969 || storage_class == sc_extern
6970 || thread_p)
6971 error ("storage class specifiers invalid in parameter declarations");
6974 /* Give error if `virtual' is used outside of class declaration. */
6975 if (virtualp
6976 && (current_class_name == NULL_TREE || decl_context != FIELD))
6978 error ("virtual outside class declaration");
6979 virtualp = 0;
6982 /* Static anonymous unions are dealt with here. */
6983 if (staticp && decl_context == TYPENAME
6984 && declspecs->type
6985 && ANON_AGGR_TYPE_P (declspecs->type))
6986 decl_context = FIELD;
6988 /* Warn about storage classes that are invalid for certain
6989 kinds of declarations (parameters, typenames, etc.). */
6990 if (declspecs->multiple_storage_classes_p)
6991 error ("multiple storage classes in declaration of `%s'", name);
6992 else if (thread_p
6993 && ((storage_class
6994 && storage_class != sc_extern
6995 && storage_class != sc_static)
6996 || declspecs->specs[(int)ds_typedef]))
6998 error ("multiple storage classes in declaration of %qs", name);
6999 thread_p = false;
7001 else if (decl_context != NORMAL
7002 && ((storage_class != sc_none
7003 && storage_class != sc_mutable)
7004 || thread_p))
7006 if ((decl_context == PARM || decl_context == CATCHPARM)
7007 && (storage_class == sc_register
7008 || storage_class == sc_auto))
7010 else if (declspecs->specs[(int)ds_typedef])
7012 else if (decl_context == FIELD
7013 /* C++ allows static class elements. */
7014 && storage_class == sc_static)
7015 /* C++ also allows inlines and signed and unsigned elements,
7016 but in those cases we don't come in here. */
7018 else
7020 if (decl_context == FIELD)
7022 tree tmp = NULL_TREE;
7023 int op = 0;
7025 if (declarator)
7027 /* Avoid trying to get an operand off an identifier node. */
7028 if (declarator->kind != cdk_id)
7029 tmp = declarator->declarator->u.id.name;
7030 else
7031 tmp = declarator->u.id.name;
7032 op = IDENTIFIER_OPNAME_P (tmp);
7033 if (IDENTIFIER_TYPENAME_P (tmp))
7035 if (is_typename_at_global_scope (tmp))
7036 name = IDENTIFIER_POINTER (tmp);
7037 else
7038 name = "<invalid operator>";
7041 error ("storage class specified for %s %qs",
7042 op ? "member operator" : "field",
7043 name);
7045 else
7047 if (decl_context == PARM || decl_context == CATCHPARM)
7048 error ("storage class specified for parameter %qs", name);
7049 else
7050 error ("storage class specified for typename");
7052 if (storage_class == sc_register
7053 || storage_class == sc_auto
7054 || storage_class == sc_extern
7055 || thread_p)
7056 storage_class = sc_none;
7059 else if (storage_class == sc_extern && initialized
7060 && !funcdef_flag)
7062 if (toplevel_bindings_p ())
7064 /* It's common practice (and completely valid) to have a const
7065 be initialized and declared extern. */
7066 if (!(type_quals & TYPE_QUAL_CONST))
7067 warning ("%qs initialized and declared %<extern%>", name);
7069 else
7070 error ("%qs has both %<extern%> and initializer", name);
7072 else if (storage_class == sc_extern && funcdef_flag
7073 && ! toplevel_bindings_p ())
7074 error ("nested function %qs declared %<extern%>", name);
7075 else if (toplevel_bindings_p ())
7077 if (storage_class == sc_auto)
7078 error ("top-level declaration of %qs specifies %<auto%>", name);
7080 else if (thread_p
7081 && storage_class != sc_extern
7082 && storage_class != sc_static)
7084 error ("function-scope %qs implicitly auto and declared %<__thread%>",
7085 name);
7086 thread_p = false;
7089 if (storage_class && friendp)
7090 error ("storage class specifiers invalid in friend function declarations");
7092 if (!id_declarator)
7093 unqualified_id = NULL_TREE;
7094 else
7096 unqualified_id = id_declarator->u.id.name;
7097 if (TREE_CODE (unqualified_id) == SCOPE_REF)
7098 unqualified_id = TREE_OPERAND (unqualified_id, 1);
7099 if (TREE_CODE (unqualified_id) == BASELINK)
7100 unqualified_id = BASELINK_FUNCTIONS (unqualified_id);
7101 switch (TREE_CODE (unqualified_id))
7103 case BIT_NOT_EXPR:
7104 unqualified_id
7105 = constructor_name (TREE_OPERAND (unqualified_id, 0));
7106 break;
7108 case TYPE_DECL:
7109 unqualified_id
7110 = constructor_name (TREE_TYPE (unqualified_id));
7111 break;
7113 case IDENTIFIER_NODE:
7114 case TEMPLATE_ID_EXPR:
7115 break;
7117 default:
7118 gcc_unreachable ();
7122 /* Determine the type of the entity declared by recurring on the
7123 declarator. */
7124 for (;
7125 declarator && declarator->kind != cdk_id;
7126 declarator = declarator->declarator)
7128 const cp_declarator *inner_declarator;
7129 tree attrs;
7131 if (type == error_mark_node)
7132 return error_mark_node;
7134 inner_declarator = declarator->declarator;
7136 attrs = declarator->attributes;
7137 if (attrs)
7139 int attr_flags;
7141 attr_flags = 0;
7142 if (declarator == NULL || declarator->kind == cdk_id)
7143 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7144 if (declarator->kind == cdk_function)
7145 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7146 if (declarator->kind == cdk_array)
7147 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7148 returned_attrs = decl_attributes (&type,
7149 chainon (returned_attrs, attrs),
7150 attr_flags);
7153 switch (declarator->kind)
7155 case cdk_array:
7156 type = create_array_type_for_decl (dname, type,
7157 declarator->u.array.bounds);
7158 if (inner_declarator
7159 && (inner_declarator->kind == cdk_pointer
7160 || inner_declarator->kind == cdk_reference
7161 || inner_declarator->kind == cdk_ptrmem))
7162 /* We can never complete an array type which is the
7163 target of a pointer, so go ahead and lay it out. */
7164 layout_type (type);
7165 break;
7167 case cdk_function:
7169 tree arg_types;
7170 int funcdecl_p;
7172 /* Declaring a function type.
7173 Make sure we have a valid type for the function to return. */
7175 /* We now know that the TYPE_QUALS don't apply to the
7176 decl, but to its return type. */
7177 type_quals = TYPE_UNQUALIFIED;
7179 /* Warn about some types functions can't return. */
7181 if (TREE_CODE (type) == FUNCTION_TYPE)
7183 error ("%qs declared as function returning a function", name);
7184 type = integer_type_node;
7186 if (TREE_CODE (type) == ARRAY_TYPE)
7188 error ("%qs declared as function returning an array", name);
7189 type = integer_type_node;
7192 /* Pick up type qualifiers which should be applied to `this'. */
7193 quals = declarator->u.function.qualifiers;
7195 /* Pick up the exception specifications. */
7196 raises = declarator->u.function.exception_specification;
7198 /* Say it's a definition only for the CALL_EXPR
7199 closest to the identifier. */
7200 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7202 if (ctype == NULL_TREE
7203 && decl_context == FIELD
7204 && funcdecl_p
7205 && (friendp == 0 || dname == current_class_name))
7206 ctype = current_class_type;
7208 if (ctype && sfk == sfk_conversion)
7209 TYPE_HAS_CONVERSION (ctype) = 1;
7210 if (ctype && (sfk == sfk_constructor
7211 || sfk == sfk_destructor))
7213 /* We are within a class's scope. If our declarator name
7214 is the same as the class name, and we are defining
7215 a function, then it is a constructor/destructor, and
7216 therefore returns a void type. */
7218 if (flags == DTOR_FLAG)
7220 /* ISO C++ 12.4/2. A destructor may not be
7221 declared const or volatile. A destructor may
7222 not be static. */
7223 if (staticp == 2)
7224 error ("destructor cannot be static member function");
7225 if (quals)
7227 error ("destructors may not be cv-qualified");
7228 quals = TYPE_UNQUALIFIED;
7230 if (decl_context == FIELD)
7232 if (! member_function_or_else (ctype,
7233 current_class_type,
7234 flags))
7235 return void_type_node;
7238 else /* It's a constructor. */
7240 if (explicitp == 1)
7241 explicitp = 2;
7242 /* ISO C++ 12.1. A constructor may not be
7243 declared const or volatile. A constructor may
7244 not be virtual. A constructor may not be
7245 static. */
7246 if (staticp == 2)
7247 error ("constructor cannot be static member function");
7248 if (virtualp)
7250 pedwarn ("constructors cannot be declared virtual");
7251 virtualp = 0;
7253 if (quals)
7255 error ("constructors may not be cv-qualified");
7256 quals = TYPE_UNQUALIFIED;
7258 if (decl_context == FIELD)
7260 if (! member_function_or_else (ctype,
7261 current_class_type,
7262 flags))
7263 return void_type_node;
7264 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7265 if (sfk != sfk_constructor)
7266 return NULL_TREE;
7269 if (decl_context == FIELD)
7270 staticp = 0;
7272 else if (friendp)
7274 if (initialized)
7275 error ("can't initialize friend function %qs", name);
7276 if (virtualp)
7278 /* Cannot be both friend and virtual. */
7279 error ("virtual functions cannot be friends");
7280 friendp = 0;
7282 if (decl_context == NORMAL)
7283 error ("friend declaration not in class definition");
7284 if (current_function_decl && funcdef_flag)
7285 error ("can't define friend function %qs in a local "
7286 "class definition",
7287 name);
7290 arg_types = grokparms (declarator->u.function.parameters,
7291 &parms);
7293 if (inner_declarator
7294 && inner_declarator->kind == cdk_id
7295 && inner_declarator->u.id.sfk == sfk_destructor
7296 && arg_types != void_list_node)
7298 error ("destructors may not have parameters");
7299 arg_types = void_list_node;
7300 parms = NULL_TREE;
7303 type = build_function_type (type, arg_types);
7305 break;
7307 case cdk_pointer:
7308 case cdk_reference:
7309 case cdk_ptrmem:
7310 /* Filter out pointers-to-references and references-to-references.
7311 We can get these if a TYPE_DECL is used. */
7313 if (TREE_CODE (type) == REFERENCE_TYPE)
7315 error (declarator->kind == cdk_reference
7316 ? "cannot declare reference to %q#T"
7317 : "cannot declare pointer to %q#T", type);
7318 type = TREE_TYPE (type);
7320 else if (VOID_TYPE_P (type))
7322 if (declarator->kind == cdk_reference)
7323 error ("cannot declare reference to %q#T", type);
7324 else if (declarator->kind == cdk_ptrmem)
7325 error ("cannot declare pointer to %q#T member", type);
7328 /* We now know that the TYPE_QUALS don't apply to the decl,
7329 but to the target of the pointer. */
7330 type_quals = TYPE_UNQUALIFIED;
7332 if (declarator->kind == cdk_ptrmem
7333 && (TREE_CODE (type) == FUNCTION_TYPE
7334 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7336 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7337 grok_method_quals (declarator->u.pointer.class_type,
7338 dummy, quals);
7339 type = TREE_TYPE (dummy);
7340 quals = TYPE_UNQUALIFIED;
7343 if (declarator->kind == cdk_reference)
7345 if (!VOID_TYPE_P (type))
7346 type = build_reference_type (type);
7348 else if (TREE_CODE (type) == METHOD_TYPE)
7349 type = build_ptrmemfunc_type (build_pointer_type (type));
7350 else if (declarator->kind == cdk_ptrmem)
7351 type = build_ptrmem_type (declarator->u.pointer.class_type,
7352 type);
7353 else
7354 type = build_pointer_type (type);
7356 /* Process a list of type modifier keywords (such as
7357 const or volatile) that were given inside the `*' or `&'. */
7359 if (declarator->u.pointer.qualifiers)
7361 type
7362 = cp_build_qualified_type (type,
7363 declarator->u.pointer.qualifiers);
7364 type_quals = cp_type_quals (type);
7366 ctype = NULL_TREE;
7367 break;
7369 case cdk_error:
7370 break;
7372 default:
7373 gcc_unreachable ();
7377 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7378 && TREE_CODE (type) != FUNCTION_TYPE
7379 && TREE_CODE (type) != METHOD_TYPE)
7381 error ("template-id %qD used as a declarator",
7382 unqualified_id);
7383 unqualified_id = dname;
7386 /* If DECLARATOR is non-NULL, we know it is a cdk_id declarator;
7387 otherwise, we would not have exited the loop above. */
7388 if (declarator
7389 && TREE_CODE (declarator->u.id.name) == SCOPE_REF
7390 /* If the qualifying scope was invalid, it will have been set to
7391 NULL_TREE above. */
7392 && TREE_OPERAND (declarator->u.id.name, 0)
7393 && TYPE_P (TREE_OPERAND (declarator->u.id.name, 0)))
7395 tree t;
7397 ctype = TREE_OPERAND (declarator->u.id.name, 0);
7398 if (TYPE_P (ctype))
7399 ctype = TYPE_MAIN_VARIANT (ctype);
7400 t = ctype;
7401 while (t != NULL_TREE && CLASS_TYPE_P (t))
7403 /* You're supposed to have one `template <...>' for every
7404 template class, but you don't need one for a full
7405 specialization. For example:
7407 template <class T> struct S{};
7408 template <> struct S<int> { void f(); };
7409 void S<int>::f () {}
7411 is correct; there shouldn't be a `template <>' for the
7412 definition of `S<int>::f'. */
7413 if (CLASSTYPE_TEMPLATE_INFO (t)
7414 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7415 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7416 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7417 template_count += 1;
7419 t = TYPE_MAIN_DECL (t);
7420 t = DECL_CONTEXT (t);
7423 if (ctype == current_class_type)
7425 /* class A {
7426 void A::f ();
7429 Is this ill-formed? */
7431 if (pedantic)
7432 pedwarn ("extra qualification %<%T::%> on member %qs ignored",
7433 ctype, name);
7435 else if (TREE_CODE (type) == FUNCTION_TYPE)
7437 tree sname = TREE_OPERAND (declarator->u.id.name, 1);
7439 if (TREE_CODE (sname) == IDENTIFIER_NODE
7440 && NEW_DELETE_OPNAME_P (sname))
7441 /* Overloaded operator new and operator delete
7442 are always static functions. */
7444 else if (current_class_type == NULL_TREE || friendp)
7445 type
7446 = build_method_type_directly (ctype,
7447 TREE_TYPE (type),
7448 TYPE_ARG_TYPES (type));
7449 else
7451 error ("cannot declare member function %<%T::%s%> within %<%T%>",
7452 ctype, name, current_class_type);
7453 return error_mark_node;
7456 else if (declspecs->specs[(int)ds_typedef]
7457 || COMPLETE_TYPE_P (complete_type (ctype)))
7459 /* Have to move this code elsewhere in this function.
7460 this code is used for i.e., typedef int A::M; M *pm;
7462 It is? How? jason 10/2/94 */
7464 if (current_class_type)
7466 error ("cannot declare member %<%T::%s%> within %qT",
7467 ctype, name, current_class_type);
7468 return void_type_node;
7471 else
7473 cxx_incomplete_type_error (NULL_TREE, ctype);
7474 return error_mark_node;
7478 if (returned_attrs)
7480 if (attrlist)
7481 *attrlist = chainon (returned_attrs, *attrlist);
7482 else
7483 attrlist = &returned_attrs;
7486 /* Now TYPE has the actual type. */
7488 /* Did array size calculations overflow? */
7490 if (TREE_CODE (type) == ARRAY_TYPE
7491 && COMPLETE_TYPE_P (type)
7492 && TREE_OVERFLOW (TYPE_SIZE (type)))
7494 error ("size of array %qs is too large", name);
7495 /* If we proceed with the array type as it is, we'll eventually
7496 crash in tree_low_cst(). */
7497 type = error_mark_node;
7500 if ((decl_context == FIELD || decl_context == PARM)
7501 && !processing_template_decl
7502 && variably_modified_type_p (type, NULL_TREE))
7504 if (decl_context == FIELD)
7505 error ("data member may not have variably modified type %qT", type);
7506 else
7507 error ("parameter may not have variably modified type %qT", type);
7508 type = error_mark_node;
7511 if (explicitp == 1 || (explicitp && friendp))
7513 /* [dcl.fct.spec] The explicit specifier shall only be used in
7514 declarations of constructors within a class definition. */
7515 error ("only declarations of constructors can be %<explicit%>");
7516 explicitp = 0;
7519 if (storage_class == sc_mutable)
7521 if (decl_context != FIELD || friendp)
7523 error ("non-member %qs cannot be declared %<mutable%>", name);
7524 storage_class = sc_none;
7526 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7528 error ("non-object member %qs cannot be declared %<mutable%>", name);
7529 storage_class = sc_none;
7531 else if (TREE_CODE (type) == FUNCTION_TYPE
7532 || TREE_CODE (type) == METHOD_TYPE)
7534 error ("function %qs cannot be declared %<mutable%>", name);
7535 storage_class = sc_none;
7537 else if (staticp)
7539 error ("static %qs cannot be declared %<mutable%>", name);
7540 storage_class = sc_none;
7542 else if (type_quals & TYPE_QUAL_CONST)
7544 error ("const %qs cannot be declared %<mutable%>", name);
7545 storage_class = sc_none;
7549 /* If this is declaring a typedef name, return a TYPE_DECL. */
7550 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7552 tree decl;
7554 /* Note that the grammar rejects storage classes
7555 in typenames, fields or parameters. */
7556 if (current_lang_name == lang_name_java)
7557 TYPE_FOR_JAVA (type) = 1;
7559 if (decl_context == FIELD)
7561 if (constructor_name_p (unqualified_id, current_class_type))
7562 pedwarn ("ISO C++ forbids nested type %qD with same name "
7563 "as enclosing class",
7564 unqualified_id);
7565 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7567 else
7569 decl = build_decl (TYPE_DECL, unqualified_id, type);
7570 if (in_namespace || ctype)
7571 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7572 if (!current_function_decl)
7573 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7576 /* If the user declares "typedef struct {...} foo" then the
7577 struct will have an anonymous name. Fill that name in now.
7578 Nothing can refer to it, so nothing needs know about the name
7579 change. */
7580 if (type != error_mark_node
7581 && unqualified_id
7582 && TYPE_NAME (type)
7583 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7584 && TYPE_ANONYMOUS_P (type)
7585 /* Don't do this if there are attributes. */
7586 && (!attrlist || !*attrlist)
7587 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7589 tree oldname = TYPE_NAME (type);
7590 tree t;
7592 /* Replace the anonymous name with the real name everywhere. */
7593 lookup_tag_reverse (type, unqualified_id);
7594 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7595 if (TYPE_NAME (t) == oldname)
7596 TYPE_NAME (t) = decl;
7598 if (TYPE_LANG_SPECIFIC (type))
7599 TYPE_WAS_ANONYMOUS (type) = 1;
7601 /* If this is a typedef within a template class, the nested
7602 type is a (non-primary) template. The name for the
7603 template needs updating as well. */
7604 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7605 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7606 = TYPE_IDENTIFIER (type);
7608 /* FIXME remangle member functions; member functions of a
7609 type with external linkage have external linkage. */
7612 if (quals)
7614 if (ctype == NULL_TREE)
7616 if (TREE_CODE (type) != METHOD_TYPE)
7617 error ("%Jinvalid type qualifier for non-member function type",
7618 decl);
7619 else
7620 ctype = TYPE_METHOD_BASETYPE (type);
7622 if (ctype != NULL_TREE)
7623 grok_method_quals (ctype, decl, quals);
7626 if (signed_p
7627 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7628 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7630 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7631 inlinep, friendp, raises != NULL_TREE);
7633 return decl;
7636 /* Detect the case of an array type of unspecified size
7637 which came, as such, direct from a typedef name.
7638 We must copy the type, so that the array's domain can be
7639 individually set by the object's initializer. */
7641 if (type && typedef_type
7642 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7643 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7644 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7646 /* Detect where we're using a typedef of function type to declare a
7647 function. PARMS will not be set, so we must create it now. */
7649 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7651 tree decls = NULL_TREE;
7652 tree args;
7654 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7656 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7658 TREE_CHAIN (decl) = decls;
7659 decls = decl;
7662 parms = nreverse (decls);
7665 /* If this is a type name (such as, in a cast or sizeof),
7666 compute the type and return it now. */
7668 if (decl_context == TYPENAME)
7670 /* Note that the grammar rejects storage classes
7671 in typenames, fields or parameters. */
7672 if (type_quals != TYPE_UNQUALIFIED)
7673 type_quals = TYPE_UNQUALIFIED;
7675 /* Special case: "friend class foo" looks like a TYPENAME context. */
7676 if (friendp)
7678 if (type_quals != TYPE_UNQUALIFIED)
7680 error ("type qualifiers specified for friend class declaration");
7681 type_quals = TYPE_UNQUALIFIED;
7683 if (inlinep)
7685 error ("%<inline%> specified for friend class declaration");
7686 inlinep = 0;
7689 if (!current_aggr)
7691 /* Don't allow friend declaration without a class-key. */
7692 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7693 pedwarn ("template parameters cannot be friends");
7694 else if (TREE_CODE (type) == TYPENAME_TYPE)
7695 pedwarn ("friend declaration requires class-key, "
7696 "i.e. %<friend class %T::%D%>",
7697 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7698 else
7699 pedwarn ("friend declaration requires class-key, "
7700 "i.e. %<friend %#T%>",
7701 type);
7704 /* Only try to do this stuff if we didn't already give up. */
7705 if (type != integer_type_node)
7707 /* A friendly class? */
7708 if (current_class_type)
7709 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7710 /*complain=*/true);
7711 else
7712 error ("trying to make class %qT a friend of global scope",
7713 type);
7715 type = void_type_node;
7718 else if (quals)
7720 if (ctype == NULL_TREE)
7722 if (TREE_CODE (type) != METHOD_TYPE)
7723 error ("invalid qualifiers on non-member function type");
7724 else
7725 ctype = TYPE_METHOD_BASETYPE (type);
7727 if (ctype)
7729 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
7730 grok_method_quals (ctype, dummy, quals);
7731 type = TREE_TYPE (dummy);
7735 return type;
7737 else if (unqualified_id == NULL_TREE && decl_context != PARM
7738 && decl_context != CATCHPARM
7739 && TREE_CODE (type) != UNION_TYPE
7740 && ! bitfield)
7742 error ("abstract declarator %qT used as declaration", type);
7743 unqualified_id = make_anon_name ();
7746 /* `void' at top level (not within pointer)
7747 is allowed only in typedefs or type names.
7748 We don't complain about parms either, but that is because
7749 a better error message can be made later. */
7751 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
7753 if (! unqualified_id)
7754 error ("unnamed variable or field declared void");
7755 else if (TREE_CODE (unqualified_id) == IDENTIFIER_NODE)
7757 gcc_assert (!IDENTIFIER_OPNAME_P (unqualified_id));
7758 error ("variable or field %qs declared void", name);
7760 else
7761 error ("variable or field declared void");
7762 type = integer_type_node;
7765 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7766 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7768 if (decl_context == PARM || decl_context == CATCHPARM)
7770 if (ctype || in_namespace)
7771 error ("cannot use %<::%> in parameter declaration");
7773 /* A parameter declared as an array of T is really a pointer to T.
7774 One declared as a function is really a pointer to a function.
7775 One declared as a member is really a pointer to member. */
7777 if (TREE_CODE (type) == ARRAY_TYPE)
7779 /* Transfer const-ness of array into that of type pointed to. */
7780 type = build_pointer_type (TREE_TYPE (type));
7781 type_quals = TYPE_UNQUALIFIED;
7783 else if (TREE_CODE (type) == FUNCTION_TYPE)
7784 type = build_pointer_type (type);
7788 tree decl;
7790 if (decl_context == PARM)
7792 decl = cp_build_parm_decl (unqualified_id, type);
7794 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
7795 inlinep, friendp, raises != NULL_TREE);
7797 else if (decl_context == FIELD)
7799 /* The C99 flexible array extension. */
7800 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
7801 && TYPE_DOMAIN (type) == NULL_TREE)
7803 tree itype = compute_array_index_type (dname, integer_zero_node);
7804 type = build_cplus_array_type (TREE_TYPE (type), itype);
7807 if (type == error_mark_node)
7809 /* Happens when declaring arrays of sizes which
7810 are error_mark_node, for example. */
7811 decl = NULL_TREE;
7813 else if (in_namespace && !friendp)
7815 /* Something like struct S { int N::j; }; */
7816 error ("invalid use of %<::%>");
7817 decl = NULL_TREE;
7819 else if (TREE_CODE (type) == FUNCTION_TYPE)
7821 int publicp = 0;
7822 tree function_context;
7824 /* We catch the others as conflicts with the builtin
7825 typedefs. */
7826 if (friendp && unqualified_id == ridpointers[(int) RID_SIGNED])
7828 error ("function %qD cannot be declared friend",
7829 unqualified_id);
7830 friendp = 0;
7833 if (friendp == 0)
7835 if (ctype == NULL_TREE)
7836 ctype = current_class_type;
7838 if (ctype == NULL_TREE)
7840 error ("can't make %qD into a method -- not in a class",
7841 unqualified_id);
7842 return void_type_node;
7845 /* ``A union may [ ... ] not [ have ] virtual functions.''
7846 ARM 9.5 */
7847 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
7849 error ("function %qD declared virtual inside a union",
7850 unqualified_id);
7851 return void_type_node;
7854 if (NEW_DELETE_OPNAME_P (unqualified_id))
7856 if (virtualp)
7858 error ("%qD cannot be declared virtual, since it "
7859 "is always static",
7860 unqualified_id);
7861 virtualp = 0;
7864 else if (staticp < 2)
7865 type = build_method_type_directly (ctype,
7866 TREE_TYPE (type),
7867 TYPE_ARG_TYPES (type));
7870 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
7871 function_context = (ctype != NULL_TREE) ?
7872 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
7873 publicp = (! friendp || ! staticp)
7874 && function_context == NULL_TREE;
7875 decl = grokfndecl (ctype, type,
7876 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7877 ? unqualified_id : dname,
7878 parms,
7879 unqualified_id,
7880 virtualp, flags, quals, raises,
7881 friendp ? -1 : 0, friendp, publicp, inlinep,
7882 funcdef_flag, template_count, in_namespace, attrlist);
7883 if (decl == NULL_TREE)
7884 return decl;
7885 #if 0
7886 /* This clobbers the attrs stored in `decl' from `attrlist'. */
7887 /* The decl and setting of decl_attr is also turned off. */
7888 decl = build_decl_attribute_variant (decl, decl_attr);
7889 #endif
7891 /* [class.conv.ctor]
7893 A constructor declared without the function-specifier
7894 explicit that can be called with a single parameter
7895 specifies a conversion from the type of its first
7896 parameter to the type of its class. Such a constructor
7897 is called a converting constructor. */
7898 if (explicitp == 2)
7899 DECL_NONCONVERTING_P (decl) = 1;
7900 else if (DECL_CONSTRUCTOR_P (decl))
7902 /* The constructor can be called with exactly one
7903 parameter if there is at least one parameter, and
7904 any subsequent parameters have default arguments.
7905 Ignore any compiler-added parms. */
7906 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
7908 if (arg_types == void_list_node
7909 || (arg_types
7910 && TREE_CHAIN (arg_types)
7911 && TREE_CHAIN (arg_types) != void_list_node
7912 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
7913 DECL_NONCONVERTING_P (decl) = 1;
7916 else if (TREE_CODE (type) == METHOD_TYPE)
7918 /* We only get here for friend declarations of
7919 members of other classes. */
7920 /* All method decls are public, so tell grokfndecl to set
7921 TREE_PUBLIC, also. */
7922 decl = grokfndecl (ctype, type,
7923 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7924 ? unqualified_id : dname,
7925 parms,
7926 unqualified_id,
7927 virtualp, flags, quals, raises,
7928 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
7929 template_count, in_namespace, attrlist);
7930 if (decl == NULL_TREE)
7931 return NULL_TREE;
7933 else if (!staticp && !dependent_type_p (type)
7934 && !COMPLETE_TYPE_P (complete_type (type))
7935 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
7937 if (unqualified_id)
7938 error ("field %qD has incomplete type", unqualified_id);
7939 else
7940 error ("name %qT has incomplete type", type);
7942 /* If we're instantiating a template, tell them which
7943 instantiation made the field's type be incomplete. */
7944 if (current_class_type
7945 && TYPE_NAME (current_class_type)
7946 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
7947 && declspecs->type
7948 && declspecs->type == type)
7949 error (" in instantiation of template %qT",
7950 current_class_type);
7952 type = error_mark_node;
7953 decl = NULL_TREE;
7955 else
7957 if (friendp)
7959 error ("%qE is neither function nor member function; "
7960 "cannot be declared friend", unqualified_id);
7961 friendp = 0;
7963 decl = NULL_TREE;
7966 if (friendp)
7968 /* Friends are treated specially. */
7969 if (ctype == current_class_type)
7970 warning ("member functions are implicitly friends of their class");
7971 else if (decl && DECL_NAME (decl))
7973 if (template_class_depth (current_class_type) == 0)
7975 decl = check_explicit_specialization
7976 (unqualified_id, decl, template_count,
7977 2 * (funcdef_flag != 0) + 4);
7978 if (decl == error_mark_node)
7979 return error_mark_node;
7982 decl = do_friend (ctype, unqualified_id, decl,
7983 *attrlist, flags, quals, funcdef_flag);
7984 return decl;
7986 else
7987 return void_type_node;
7990 /* Structure field. It may not be a function, except for C++. */
7992 if (decl == NULL_TREE)
7994 if (initialized)
7996 if (!staticp)
7998 /* An attempt is being made to initialize a non-static
7999 member. But, from [class.mem]:
8001 4 A member-declarator can contain a
8002 constant-initializer only if it declares a static
8003 member (_class.static_) of integral or enumeration
8004 type, see _class.static.data_.
8006 This used to be relatively common practice, but
8007 the rest of the compiler does not correctly
8008 handle the initialization unless the member is
8009 static so we make it static below. */
8010 pedwarn ("ISO C++ forbids initialization of member %qD",
8011 unqualified_id);
8012 pedwarn ("making %qD static", unqualified_id);
8013 staticp = 1;
8016 if (uses_template_parms (type))
8017 /* We'll check at instantiation time. */
8019 else if (check_static_variable_definition (unqualified_id,
8020 type))
8021 /* If we just return the declaration, crashes
8022 will sometimes occur. We therefore return
8023 void_type_node, as if this was a friend
8024 declaration, to cause callers to completely
8025 ignore this declaration. */
8026 return void_type_node;
8029 if (staticp)
8031 /* C++ allows static class members. All other work
8032 for this is done by grokfield. */
8033 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8034 set_linkage_for_static_data_member (decl);
8035 /* Even if there is an in-class initialization, DECL
8036 is considered undefined until an out-of-class
8037 definition is provided. */
8038 DECL_EXTERNAL (decl) = 1;
8040 else
8042 decl = build_decl (FIELD_DECL, unqualified_id, type);
8043 DECL_NONADDRESSABLE_P (decl) = bitfield;
8044 if (storage_class == sc_mutable)
8046 DECL_MUTABLE_P (decl) = 1;
8047 storage_class = sc_none;
8051 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8052 inlinep, friendp, raises != NULL_TREE);
8055 else if (TREE_CODE (type) == FUNCTION_TYPE
8056 || TREE_CODE (type) == METHOD_TYPE)
8058 tree original_name;
8059 int publicp = 0;
8061 if (!unqualified_id)
8062 return NULL_TREE;
8064 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8065 original_name = dname;
8066 else
8067 original_name = unqualified_id;
8069 if (storage_class == sc_auto)
8070 error ("storage class %<auto%> invalid for function %qs", name);
8071 else if (storage_class == sc_register)
8072 error ("storage class %<register%> invalid for function %qs", name);
8073 else if (thread_p)
8074 error ("storage class %<__thread%> invalid for function %qs", name);
8076 /* Function declaration not at top level.
8077 Storage classes other than `extern' are not allowed
8078 and `extern' makes no difference. */
8079 if (! toplevel_bindings_p ()
8080 && (storage_class == sc_static
8081 || declspecs->specs[(int)ds_inline])
8082 && pedantic)
8084 if (storage_class == sc_static)
8085 pedwarn ("%<static%> specified invalid for function %qs "
8086 "declared out of global scope", name);
8087 else
8088 pedwarn ("%<inline%> specifier invalid for function %qs "
8089 "declared out of global scope", name);
8092 if (ctype == NULL_TREE)
8094 if (virtualp)
8096 error ("virtual non-class function %qs", name);
8097 virtualp = 0;
8100 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8101 && !NEW_DELETE_OPNAME_P (original_name))
8102 type = build_method_type_directly (ctype,
8103 TREE_TYPE (type),
8104 TYPE_ARG_TYPES (type));
8106 /* Record presence of `static'. */
8107 publicp = (ctype != NULL_TREE
8108 || storage_class == sc_extern
8109 || storage_class != sc_static);
8111 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8112 virtualp, flags, quals, raises,
8113 1, friendp,
8114 publicp, inlinep, funcdef_flag,
8115 template_count, in_namespace, attrlist);
8116 if (decl == NULL_TREE)
8117 return NULL_TREE;
8119 if (staticp == 1)
8121 int invalid_static = 0;
8123 /* Don't allow a static member function in a class, and forbid
8124 declaring main to be static. */
8125 if (TREE_CODE (type) == METHOD_TYPE)
8127 pedwarn ("cannot declare member function %qD to have "
8128 "static linkage", decl);
8129 invalid_static = 1;
8131 else if (current_function_decl)
8133 /* FIXME need arm citation */
8134 error ("cannot declare static function inside another function");
8135 invalid_static = 1;
8138 if (invalid_static)
8140 staticp = 0;
8141 storage_class = sc_none;
8145 else
8147 /* It's a variable. */
8149 /* An uninitialized decl with `extern' is a reference. */
8150 decl = grokvardecl (type, unqualified_id,
8151 declspecs,
8152 initialized,
8153 (type_quals & TYPE_QUAL_CONST) != 0,
8154 ctype ? ctype : in_namespace);
8155 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8156 inlinep, friendp, raises != NULL_TREE);
8158 if (ctype)
8160 DECL_CONTEXT (decl) = ctype;
8161 if (staticp == 1)
8163 pedwarn ("%<static%> may not be used when defining "
8164 "(as opposed to declaring) a static data member");
8165 staticp = 0;
8166 storage_class = sc_none;
8168 if (storage_class == sc_register && TREE_STATIC (decl))
8170 error ("static member %qD declared %<register%>", decl);
8171 storage_class = sc_none;
8173 if (storage_class == sc_extern && pedantic)
8175 pedwarn ("cannot explicitly declare member %q#D to have "
8176 "extern linkage",
8177 decl);
8178 storage_class = sc_none;
8183 /* Record `register' declaration for warnings on &
8184 and in case doing stupid register allocation. */
8186 if (storage_class == sc_register)
8187 DECL_REGISTER (decl) = 1;
8188 else if (storage_class == sc_extern)
8189 DECL_THIS_EXTERN (decl) = 1;
8190 else if (storage_class == sc_static)
8191 DECL_THIS_STATIC (decl) = 1;
8193 /* Record constancy and volatility. There's no need to do this
8194 when processing a template; we'll do this for the instantiated
8195 declaration based on the type of DECL. */
8196 if (!processing_template_decl)
8197 c_apply_type_quals_to_decl (type_quals, decl);
8199 return decl;
8203 /* Subroutine of start_function. Ensure that each of the parameter
8204 types (as listed in PARMS) is complete, as is required for a
8205 function definition. */
8207 static void
8208 require_complete_types_for_parms (tree parms)
8210 for (; parms; parms = TREE_CHAIN (parms))
8212 if (VOID_TYPE_P (TREE_TYPE (parms)))
8213 /* grokparms will have already issued an error. */
8214 TREE_TYPE (parms) = error_mark_node;
8215 else if (complete_type_or_else (TREE_TYPE (parms), parms))
8217 layout_decl (parms, 0);
8218 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8223 /* Returns nonzero if T is a local variable. */
8226 local_variable_p (tree t)
8228 if ((TREE_CODE (t) == VAR_DECL
8229 /* A VAR_DECL with a context that is a _TYPE is a static data
8230 member. */
8231 && !TYPE_P (CP_DECL_CONTEXT (t))
8232 /* Any other non-local variable must be at namespace scope. */
8233 && !DECL_NAMESPACE_SCOPE_P (t))
8234 || (TREE_CODE (t) == PARM_DECL))
8235 return 1;
8237 return 0;
8240 /* Returns nonzero if T is an automatic local variable or a label.
8241 (These are the declarations that need to be remapped when the code
8242 containing them is duplicated.) */
8245 nonstatic_local_decl_p (tree t)
8247 return ((local_variable_p (t) && !TREE_STATIC (t))
8248 || TREE_CODE (t) == LABEL_DECL
8249 || TREE_CODE (t) == RESULT_DECL);
8252 /* Like local_variable_p, but suitable for use as a tree-walking
8253 function. */
8255 static tree
8256 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8257 void *data ATTRIBUTE_UNUSED)
8259 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8260 return *tp;
8261 else if (TYPE_P (*tp))
8262 *walk_subtrees = 0;
8264 return NULL_TREE;
8268 /* Check that ARG, which is a default-argument expression for a
8269 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8270 something goes wrong. DECL may also be a _TYPE node, rather than a
8271 DECL, if there is no DECL available. */
8273 tree
8274 check_default_argument (tree decl, tree arg)
8276 tree var;
8277 tree decl_type;
8279 if (TREE_CODE (arg) == DEFAULT_ARG)
8280 /* We get a DEFAULT_ARG when looking at an in-class declaration
8281 with a default argument. Ignore the argument for now; we'll
8282 deal with it after the class is complete. */
8283 return arg;
8285 if (processing_template_decl || uses_template_parms (arg))
8286 /* We don't do anything checking until instantiation-time. Note
8287 that there may be uninstantiated arguments even for an
8288 instantiated function, since default arguments are not
8289 instantiated until they are needed. */
8290 return arg;
8292 if (TYPE_P (decl))
8294 decl_type = decl;
8295 decl = NULL_TREE;
8297 else
8298 decl_type = TREE_TYPE (decl);
8300 if (arg == error_mark_node
8301 || decl == error_mark_node
8302 || TREE_TYPE (arg) == error_mark_node
8303 || decl_type == error_mark_node)
8304 /* Something already went wrong. There's no need to check
8305 further. */
8306 return error_mark_node;
8308 /* [dcl.fct.default]
8310 A default argument expression is implicitly converted to the
8311 parameter type. */
8312 if (!TREE_TYPE (arg)
8313 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8315 if (decl)
8316 error ("default argument for %q#D has type %qT",
8317 decl, TREE_TYPE (arg));
8318 else
8319 error ("default argument for parameter of type %qT has type %qT",
8320 decl_type, TREE_TYPE (arg));
8322 return error_mark_node;
8325 /* [dcl.fct.default]
8327 Local variables shall not be used in default argument
8328 expressions.
8330 The keyword `this' shall not be used in a default argument of a
8331 member function. */
8332 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8333 NULL);
8334 if (var)
8336 error ("default argument %qE uses local variable %qD", arg, var);
8337 return error_mark_node;
8340 /* All is well. */
8341 return arg;
8344 /* Decode the list of parameter types for a function type.
8345 Given the list of things declared inside the parens,
8346 return a list of types.
8348 If this parameter does not end with an ellipsis, we append
8349 void_list_node.
8351 *PARMS is set to the chain of PARM_DECLs created. */
8353 static tree
8354 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8356 tree result = NULL_TREE;
8357 tree decls = NULL_TREE;
8358 int ellipsis = !first_parm || first_parm->ellipsis_p;
8359 cp_parameter_declarator *parm;
8360 int any_error = 0;
8362 for (parm = first_parm; parm != NULL; parm = parm->next)
8364 tree type = NULL_TREE;
8365 tree init = parm->default_argument;
8366 tree attrs;
8367 tree decl;
8369 if (parm == no_parameters)
8370 break;
8372 attrs = parm->decl_specifiers.attributes;
8373 parm->decl_specifiers.attributes = NULL_TREE;
8374 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8375 PARM, init != NULL_TREE, &attrs);
8376 if (! decl || TREE_TYPE (decl) == error_mark_node)
8377 continue;
8379 if (attrs)
8380 cplus_decl_attributes (&decl, attrs, 0);
8382 type = TREE_TYPE (decl);
8383 if (VOID_TYPE_P (type))
8385 if (same_type_p (type, void_type_node)
8386 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8387 /* this is a parmlist of `(void)', which is ok. */
8388 break;
8389 cxx_incomplete_type_error (decl, type);
8390 /* It's not a good idea to actually create parameters of
8391 type `void'; other parts of the compiler assume that a
8392 void type terminates the parameter list. */
8393 type = error_mark_node;
8394 TREE_TYPE (decl) = error_mark_node;
8397 if (type != error_mark_node)
8399 /* Top-level qualifiers on the parameters are
8400 ignored for function types. */
8401 type = cp_build_qualified_type (type, 0);
8402 if (TREE_CODE (type) == METHOD_TYPE)
8404 error ("parameter %qD invalidly declared method type", decl);
8405 type = build_pointer_type (type);
8406 TREE_TYPE (decl) = type;
8408 else if (abstract_virtuals_error (decl, type))
8409 any_error = 1; /* Seems like a good idea. */
8410 else if (POINTER_TYPE_P (type))
8412 /* [dcl.fct]/6, parameter types cannot contain pointers
8413 (references) to arrays of unknown bound. */
8414 tree t = TREE_TYPE (type);
8415 int ptr = TYPE_PTR_P (type);
8417 while (1)
8419 if (TYPE_PTR_P (t))
8420 ptr = 1;
8421 else if (TREE_CODE (t) != ARRAY_TYPE)
8422 break;
8423 else if (!TYPE_DOMAIN (t))
8424 break;
8425 t = TREE_TYPE (t);
8427 if (TREE_CODE (t) == ARRAY_TYPE)
8428 error ("parameter %qD includes %s to array of unknown "
8429 "bound %qT",
8430 decl, ptr ? "pointer" : "reference", t);
8433 if (!any_error && init)
8434 init = check_default_argument (decl, init);
8435 else
8436 init = NULL_TREE;
8439 TREE_CHAIN (decl) = decls;
8440 decls = decl;
8441 result = tree_cons (init, type, result);
8443 decls = nreverse (decls);
8444 result = nreverse (result);
8445 if (!ellipsis)
8446 result = chainon (result, void_list_node);
8447 *parms = decls;
8449 return result;
8453 /* D is a constructor or overloaded `operator='.
8455 Let T be the class in which D is declared. Then, this function
8456 returns:
8458 -1 if D's is an ill-formed constructor or copy assignment operator
8459 whose first parameter is of type `T'.
8460 0 if D is not a copy constructor or copy assignment
8461 operator.
8462 1 if D is a copy constructor or copy assignment operator whose
8463 first parameter is a reference to const qualified T.
8464 2 if D is a copy constructor or copy assignment operator whose
8465 first parameter is a reference to non-const qualified T.
8467 This function can be used as a predicate. Positive values indicate
8468 a copy constructor and nonzero values indicate a copy assignment
8469 operator. */
8472 copy_fn_p (tree d)
8474 tree args;
8475 tree arg_type;
8476 int result = 1;
8478 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8480 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
8481 /* Instantiations of template member functions are never copy
8482 functions. Note that member functions of templated classes are
8483 represented as template functions internally, and we must
8484 accept those as copy functions. */
8485 return 0;
8487 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8488 if (!args)
8489 return 0;
8491 arg_type = TREE_VALUE (args);
8493 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8495 /* Pass by value copy assignment operator. */
8496 result = -1;
8498 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8499 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8501 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8502 result = 2;
8504 else
8505 return 0;
8507 args = TREE_CHAIN (args);
8509 if (args && args != void_list_node && !TREE_PURPOSE (args))
8510 /* There are more non-optional args. */
8511 return 0;
8513 return result;
8516 /* Remember any special properties of member function DECL. */
8518 void grok_special_member_properties (tree decl)
8520 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8521 ; /* Not special. */
8522 else if (DECL_CONSTRUCTOR_P (decl))
8524 int ctor = copy_fn_p (decl);
8526 if (ctor > 0)
8528 /* [class.copy]
8530 A non-template constructor for class X is a copy
8531 constructor if its first parameter is of type X&, const
8532 X&, volatile X& or const volatile X&, and either there
8533 are no other parameters or else all other parameters have
8534 default arguments. */
8535 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8536 if (ctor > 1)
8537 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8539 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8540 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8542 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8544 /* [class.copy]
8546 A non-template assignment operator for class X is a copy
8547 assignment operator if its parameter is of type X, X&, const
8548 X&, volatile X& or const volatile X&. */
8550 int assop = copy_fn_p (decl);
8552 if (assop)
8554 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8555 if (assop != 1)
8556 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8561 /* Check a constructor DECL has the correct form. Complains
8562 if the class has a constructor of the form X(X). */
8565 grok_ctor_properties (tree ctype, tree decl)
8567 int ctor_parm = copy_fn_p (decl);
8569 if (ctor_parm < 0)
8571 /* [class.copy]
8573 A declaration of a constructor for a class X is ill-formed if
8574 its first parameter is of type (optionally cv-qualified) X
8575 and either there are no other parameters or else all other
8576 parameters have default arguments.
8578 We *don't* complain about member template instantiations that
8579 have this form, though; they can occur as we try to decide
8580 what constructor to use during overload resolution. Since
8581 overload resolution will never prefer such a constructor to
8582 the non-template copy constructor (which is either explicitly
8583 or implicitly defined), there's no need to worry about their
8584 existence. Theoretically, they should never even be
8585 instantiated, but that's hard to forestall. */
8586 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8587 ctype, ctype);
8588 return 0;
8591 return 1;
8594 /* An operator with this code is unary, but can also be binary. */
8596 static int
8597 ambi_op_p (enum tree_code code)
8599 return (code == INDIRECT_REF
8600 || code == ADDR_EXPR
8601 || code == CONVERT_EXPR
8602 || code == NEGATE_EXPR
8603 || code == PREINCREMENT_EXPR
8604 || code == PREDECREMENT_EXPR);
8607 /* An operator with this name can only be unary. */
8609 static int
8610 unary_op_p (enum tree_code code)
8612 return (code == TRUTH_NOT_EXPR
8613 || code == BIT_NOT_EXPR
8614 || code == COMPONENT_REF
8615 || code == TYPE_EXPR);
8618 /* DECL is a declaration for an overloaded operator. Returns true if
8619 the declaration is valid; false otherwise. If COMPLAIN is true,
8620 errors are issued for invalid declarations. */
8622 bool
8623 grok_op_properties (tree decl, int friendp, bool complain)
8625 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8626 tree argtype;
8627 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8628 tree name = DECL_NAME (decl);
8629 enum tree_code operator_code;
8630 int arity;
8631 bool ok;
8633 /* Assume that the declaration is valid. */
8634 ok = true;
8636 /* Count the number of arguments. */
8637 for (argtype = argtypes, arity = 0;
8638 argtype && argtype != void_list_node;
8639 argtype = TREE_CHAIN (argtype))
8640 ++arity;
8642 if (current_class_type == NULL_TREE)
8643 friendp = 1;
8645 if (DECL_CONV_FN_P (decl))
8646 operator_code = TYPE_EXPR;
8647 else
8650 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8651 if (ansi_opname (CODE) == name) \
8653 operator_code = (CODE); \
8654 break; \
8656 else if (ansi_assopname (CODE) == name) \
8658 operator_code = (CODE); \
8659 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8660 break; \
8663 #include "operators.def"
8664 #undef DEF_OPERATOR
8666 gcc_unreachable ();
8668 while (0);
8669 gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8670 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8672 if (! friendp)
8674 switch (operator_code)
8676 case NEW_EXPR:
8677 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8678 break;
8680 case DELETE_EXPR:
8681 TYPE_GETS_DELETE (current_class_type) |= 1;
8682 break;
8684 case VEC_NEW_EXPR:
8685 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8686 break;
8688 case VEC_DELETE_EXPR:
8689 TYPE_GETS_DELETE (current_class_type) |= 2;
8690 break;
8692 default:
8693 break;
8697 /* [basic.std.dynamic.allocation]/1:
8699 A program is ill-formed if an allocation function is declared
8700 in a namespace scope other than global scope or declared static
8701 in global scope.
8703 The same also holds true for deallocation functions. */
8704 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
8705 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8707 if (DECL_NAMESPACE_SCOPE_P (decl))
8709 if (CP_DECL_CONTEXT (decl) != global_namespace)
8710 error ("%qD may not be declared within a namespace", decl);
8711 else if (!TREE_PUBLIC (decl))
8712 error ("%qD may not be declared as static", decl);
8716 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8717 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8718 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8719 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8720 else
8722 /* An operator function must either be a non-static member function
8723 or have at least one parameter of a class, a reference to a class,
8724 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8725 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8727 if (operator_code == TYPE_EXPR
8728 || operator_code == CALL_EXPR
8729 || operator_code == COMPONENT_REF
8730 || operator_code == ARRAY_REF
8731 || operator_code == NOP_EXPR)
8732 error ("%qD must be a nonstatic member function", decl);
8733 else
8735 tree p;
8737 if (DECL_STATIC_FUNCTION_P (decl))
8738 error ("%qD must be either a non-static member "
8739 "function or a non-member function", decl);
8741 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8743 tree arg = non_reference (TREE_VALUE (p));
8744 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8745 because these checks are performed even on
8746 template functions. */
8747 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8748 break;
8751 if (!p || p == void_list_node)
8753 if (!complain)
8754 return false;
8756 error ("%qD must have an argument of class or "
8757 "enumerated type",
8758 decl);
8759 ok = false;
8764 /* There are no restrictions on the arguments to an overloaded
8765 "operator ()". */
8766 if (operator_code == CALL_EXPR)
8767 return ok;
8769 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
8771 tree t = TREE_TYPE (name);
8772 if (! friendp)
8774 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8775 const char *what = 0;
8777 if (ref)
8778 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8780 if (TREE_CODE (t) == VOID_TYPE)
8781 what = "void";
8782 else if (t == current_class_type)
8783 what = "the same type";
8784 /* Don't force t to be complete here. */
8785 else if (IS_AGGR_TYPE (t)
8786 && COMPLETE_TYPE_P (t)
8787 && DERIVED_FROM_P (t, current_class_type))
8788 what = "a base class";
8790 if (what && warn_conversion)
8791 warning ("conversion to %s%s will never use a type "
8792 "conversion operator",
8793 ref ? "a reference to " : "", what);
8796 if (operator_code == COND_EXPR)
8798 /* 13.4.0.3 */
8799 error ("ISO C++ prohibits overloading operator ?:");
8801 else if (ambi_op_p (operator_code))
8803 if (arity == 1)
8804 /* We pick the one-argument operator codes by default, so
8805 we don't have to change anything. */
8807 else if (arity == 2)
8809 /* If we thought this was a unary operator, we now know
8810 it to be a binary operator. */
8811 switch (operator_code)
8813 case INDIRECT_REF:
8814 operator_code = MULT_EXPR;
8815 break;
8817 case ADDR_EXPR:
8818 operator_code = BIT_AND_EXPR;
8819 break;
8821 case CONVERT_EXPR:
8822 operator_code = PLUS_EXPR;
8823 break;
8825 case NEGATE_EXPR:
8826 operator_code = MINUS_EXPR;
8827 break;
8829 case PREINCREMENT_EXPR:
8830 operator_code = POSTINCREMENT_EXPR;
8831 break;
8833 case PREDECREMENT_EXPR:
8834 operator_code = POSTDECREMENT_EXPR;
8835 break;
8837 default:
8838 gcc_unreachable ();
8841 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8843 if ((operator_code == POSTINCREMENT_EXPR
8844 || operator_code == POSTDECREMENT_EXPR)
8845 && ! processing_template_decl
8846 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8848 if (methodp)
8849 error ("postfix %qD must take %<int%> as its argument",
8850 decl);
8851 else
8852 error
8853 ("postfix %qD must take %<int%> as its second argument",
8854 decl);
8857 else
8859 if (methodp)
8860 error ("%qD must take either zero or one argument", decl);
8861 else
8862 error ("%qD must take either one or two arguments", decl);
8865 /* More Effective C++ rule 6. */
8866 if (warn_ecpp
8867 && (operator_code == POSTINCREMENT_EXPR
8868 || operator_code == POSTDECREMENT_EXPR
8869 || operator_code == PREINCREMENT_EXPR
8870 || operator_code == PREDECREMENT_EXPR))
8872 tree arg = TREE_VALUE (argtypes);
8873 tree ret = TREE_TYPE (TREE_TYPE (decl));
8874 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
8875 arg = TREE_TYPE (arg);
8876 arg = TYPE_MAIN_VARIANT (arg);
8877 if (operator_code == PREINCREMENT_EXPR
8878 || operator_code == PREDECREMENT_EXPR)
8880 if (TREE_CODE (ret) != REFERENCE_TYPE
8881 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
8882 arg))
8883 warning ("prefix %qD should return %qT", decl,
8884 build_reference_type (arg));
8886 else
8888 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8889 warning ("postfix %qD should return %qT", decl, arg);
8893 else if (unary_op_p (operator_code))
8895 if (arity != 1)
8897 if (methodp)
8898 error ("%qD must take %<void%>", decl);
8899 else
8900 error ("%qD must take exactly one argument", decl);
8903 else /* if (binary_op_p (operator_code)) */
8905 if (arity != 2)
8907 if (methodp)
8908 error ("%qD must take exactly one argument", decl);
8909 else
8910 error ("%qD must take exactly two arguments", decl);
8913 /* More Effective C++ rule 7. */
8914 if (warn_ecpp
8915 && (operator_code == TRUTH_ANDIF_EXPR
8916 || operator_code == TRUTH_ORIF_EXPR
8917 || operator_code == COMPOUND_EXPR))
8918 warning ("user-defined %qD always evaluates both arguments",
8919 decl);
8922 /* Effective C++ rule 23. */
8923 if (warn_ecpp
8924 && arity == 2
8925 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
8926 && (operator_code == PLUS_EXPR
8927 || operator_code == MINUS_EXPR
8928 || operator_code == TRUNC_DIV_EXPR
8929 || operator_code == MULT_EXPR
8930 || operator_code == TRUNC_MOD_EXPR)
8931 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8932 warning ("%qD should return by value", decl);
8934 /* [over.oper]/8 */
8935 for (; argtypes && argtypes != void_list_node;
8936 argtypes = TREE_CHAIN (argtypes))
8937 if (TREE_PURPOSE (argtypes))
8939 TREE_PURPOSE (argtypes) = NULL_TREE;
8940 if (operator_code == POSTINCREMENT_EXPR
8941 || operator_code == POSTDECREMENT_EXPR)
8943 if (pedantic)
8944 pedwarn ("%qD cannot have default arguments", decl);
8946 else
8947 error ("%qD cannot have default arguments", decl);
8952 return ok;
8955 static const char *
8956 tag_name (enum tag_types code)
8958 switch (code)
8960 case record_type:
8961 return "struct";
8962 case class_type:
8963 return "class";
8964 case union_type:
8965 return "union ";
8966 case enum_type:
8967 return "enum";
8968 default:
8969 gcc_unreachable ();
8973 /* Name lookup in an elaborated-type-specifier (after the keyword
8974 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
8975 elaborated-type-specifier is invalid, issue a diagnostic and return
8976 error_mark_node; otherwise, return the *_TYPE to which it referred.
8977 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
8979 tree
8980 check_elaborated_type_specifier (enum tag_types tag_code,
8981 tree decl,
8982 bool allow_template_p)
8984 tree type;
8986 /* In the case of:
8988 struct S { struct S *p; };
8990 name lookup will find the TYPE_DECL for the implicit "S::S"
8991 typedef. Adjust for that here. */
8992 if (DECL_SELF_REFERENCE_P (decl))
8993 decl = TYPE_NAME (TREE_TYPE (decl));
8995 type = TREE_TYPE (decl);
8997 /* [dcl.type.elab]
8999 If the identifier resolves to a typedef-name or a template
9000 type-parameter, the elaborated-type-specifier is ill-formed.
9002 In other words, the only legitimate declaration to use in the
9003 elaborated type specifier is the implicit typedef created when
9004 the type is declared. */
9005 if (!DECL_IMPLICIT_TYPEDEF_P (decl))
9007 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9008 return IS_AGGR_TYPE (type) ? type : error_mark_node;
9011 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9013 error ("using template type parameter %qT after %qs",
9014 type, tag_name (tag_code));
9015 return error_mark_node;
9017 else if (TREE_CODE (type) != RECORD_TYPE
9018 && TREE_CODE (type) != UNION_TYPE
9019 && tag_code != enum_type)
9021 error ("%qT referred to as %qs", type, tag_name (tag_code));
9022 return error_mark_node;
9024 else if (TREE_CODE (type) != ENUMERAL_TYPE
9025 && tag_code == enum_type)
9027 error ("%qT referred to as enum", type);
9028 return error_mark_node;
9030 else if (!allow_template_p
9031 && TREE_CODE (type) == RECORD_TYPE
9032 && CLASSTYPE_IS_TEMPLATE (type))
9034 /* If a class template appears as elaborated type specifier
9035 without a template header such as:
9037 template <class T> class C {};
9038 void f(class C); // No template header here
9040 then the required template argument is missing. */
9042 error ("template argument required for %<%s %T%>",
9043 tag_name (tag_code),
9044 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9045 return error_mark_node;
9048 return type;
9051 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9052 Define the tag as a forward-reference if it is not defined.
9054 If a declaration is given, process it here, and report an error if
9055 multiple declarations are not identical.
9057 GLOBALIZE is false when this is also a definition. Only look in
9058 the current frame for the name (since C++ allows new names in any
9059 scope.)
9061 TEMPLATE_HEADER_P is true when this declaration is preceded by
9062 a set of template parameters. */
9064 tree
9065 xref_tag (enum tag_types tag_code, tree name,
9066 bool globalize, bool template_header_p)
9068 enum tree_code code;
9069 tree t;
9070 struct cp_binding_level *b = current_binding_level;
9071 tree context = NULL_TREE;
9073 timevar_push (TV_NAME_LOOKUP);
9075 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9077 switch (tag_code)
9079 case record_type:
9080 case class_type:
9081 code = RECORD_TYPE;
9082 break;
9083 case union_type:
9084 code = UNION_TYPE;
9085 break;
9086 case enum_type:
9087 code = ENUMERAL_TYPE;
9088 break;
9089 default:
9090 gcc_unreachable ();
9093 if (! globalize)
9095 /* If we know we are defining this tag, only look it up in
9096 this scope and don't try to find it as a type. */
9097 t = lookup_tag (code, name, b, 1);
9099 else
9101 tree decl = lookup_name (name, 2);
9103 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9104 decl = DECL_TEMPLATE_RESULT (decl);
9106 if (decl && TREE_CODE (decl) == TYPE_DECL)
9108 /* Two cases we need to consider when deciding if a class
9109 template is allowed as an elaborated type specifier:
9110 1. It is a self reference to its own class.
9111 2. It comes with a template header.
9113 For example:
9115 template <class T> class C {
9116 class C *c1; // DECL_SELF_REFERENCE_P is true
9117 class D;
9119 template <class U> class C; // template_header_p is true
9120 template <class T> class C<T>::D {
9121 class C *c2; // DECL_SELF_REFERENCE_P is true
9122 }; */
9124 t = check_elaborated_type_specifier (tag_code,
9125 decl,
9126 template_header_p
9127 | DECL_SELF_REFERENCE_P (decl));
9128 if (t == error_mark_node)
9129 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9131 else
9132 t = NULL_TREE;
9134 if (t && current_class_type
9135 && template_class_depth (current_class_type)
9136 && template_header_p)
9138 /* Since GLOBALIZE is nonzero, we are not looking at a
9139 definition of this tag. Since, in addition, we are currently
9140 processing a (member) template declaration of a template
9141 class, we must be very careful; consider:
9143 template <class X>
9144 struct S1
9146 template <class U>
9147 struct S2
9148 { template <class V>
9149 friend struct S1; };
9151 Here, the S2::S1 declaration should not be confused with the
9152 outer declaration. In particular, the inner version should
9153 have a template parameter of level 2, not level 1. This
9154 would be particularly important if the member declaration
9155 were instead:
9157 template <class V = U> friend struct S1;
9159 say, when we should tsubst into `U' when instantiating
9160 S2. On the other hand, when presented with:
9162 template <class T>
9163 struct S1 {
9164 template <class U>
9165 struct S2 {};
9166 template <class U>
9167 friend struct S2;
9170 we must find the inner binding eventually. We
9171 accomplish this by making sure that the new type we
9172 create to represent this declaration has the right
9173 TYPE_CONTEXT. */
9174 context = TYPE_CONTEXT (t);
9175 t = NULL_TREE;
9179 if (! t)
9181 /* If no such tag is yet defined, create a forward-reference node
9182 and record it as the "definition".
9183 When a real declaration of this type is found,
9184 the forward-reference will be altered into a real type. */
9185 if (code == ENUMERAL_TYPE)
9187 error ("use of enum %q#D without previous declaration", name);
9188 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9190 else
9192 t = make_aggr_type (code);
9193 TYPE_CONTEXT (t) = context;
9194 pushtag (name, t, globalize);
9197 else
9199 if (!globalize && processing_template_decl && IS_AGGR_TYPE (t))
9200 redeclare_class_template (t, current_template_parms);
9201 else if (!processing_template_decl
9202 && CLASS_TYPE_P (t)
9203 && CLASSTYPE_IS_TEMPLATE (t))
9205 error ("redeclaration of %qT as a non-template", t);
9206 t = error_mark_node;
9210 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9213 tree
9214 xref_tag_from_type (tree old, tree id, int globalize)
9216 enum tag_types tag_kind;
9218 if (TREE_CODE (old) == RECORD_TYPE)
9219 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9220 else
9221 tag_kind = union_type;
9223 if (id == NULL_TREE)
9224 id = TYPE_IDENTIFIER (old);
9226 return xref_tag (tag_kind, id, globalize, false);
9229 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9230 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
9231 access_* node, and the TREE_VALUE is the type of the base-class.
9232 Non-NULL TREE_TYPE indicates virtual inheritance. */
9234 void
9235 xref_basetypes (tree ref, tree base_list)
9237 tree *basep;
9238 tree binfo, base_binfo;
9239 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
9240 unsigned max_bases = 0; /* Maximum direct bases. */
9241 int i;
9242 tree default_access;
9243 tree igo_prev; /* Track Inheritance Graph Order. */
9245 if (ref == error_mark_node)
9246 return;
9248 /* The base of a derived class is private by default, all others are
9249 public. */
9250 default_access = (TREE_CODE (ref) == RECORD_TYPE
9251 && CLASSTYPE_DECLARED_CLASS (ref)
9252 ? access_private_node : access_public_node);
9254 /* First, make sure that any templates in base-classes are
9255 instantiated. This ensures that if we call ourselves recursively
9256 we do not get confused about which classes are marked and which
9257 are not. */
9258 basep = &base_list;
9259 while (*basep)
9261 tree basetype = TREE_VALUE (*basep);
9263 if (!(processing_template_decl && uses_template_parms (basetype))
9264 && !complete_type_or_else (basetype, NULL))
9265 /* An incomplete type. Remove it from the list. */
9266 *basep = TREE_CHAIN (*basep);
9267 else
9269 max_bases++;
9270 if (TREE_TYPE (*basep))
9271 max_vbases++;
9272 if (CLASS_TYPE_P (basetype))
9273 max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9274 basep = &TREE_CHAIN (*basep);
9278 TYPE_MARKED_P (ref) = 1;
9280 /* The binfo slot should be empty, unless this is an (ill-formed)
9281 redefinition. */
9282 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9283 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9285 binfo = make_tree_binfo (max_bases);
9287 TYPE_BINFO (ref) = binfo;
9288 BINFO_OFFSET (binfo) = size_zero_node;
9289 BINFO_TYPE (binfo) = ref;
9291 if (max_bases)
9293 BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, max_bases);
9294 /* An aggregate cannot have baseclasses. */
9295 CLASSTYPE_NON_AGGREGATE (ref) = 1;
9297 if (TREE_CODE (ref) == UNION_TYPE)
9298 error ("derived union %qT invalid", ref);
9301 if (max_bases > 1)
9303 if (TYPE_FOR_JAVA (ref))
9304 error ("Java class %qT cannot have multiple bases", ref);
9307 if (max_vbases)
9309 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, max_vbases);
9311 if (TYPE_FOR_JAVA (ref))
9312 error ("Java class %qT cannot have virtual bases", ref);
9315 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9317 tree access = TREE_PURPOSE (base_list);
9318 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9319 tree basetype = TREE_VALUE (base_list);
9321 if (access == access_default_node)
9322 access = default_access;
9324 if (TREE_CODE (basetype) == TYPE_DECL)
9325 basetype = TREE_TYPE (basetype);
9326 if (TREE_CODE (basetype) != RECORD_TYPE
9327 && TREE_CODE (basetype) != TYPENAME_TYPE
9328 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9329 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9331 error ("base type %qT fails to be a struct or class type",
9332 basetype);
9333 continue;
9336 if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9337 TYPE_FOR_JAVA (ref) = 1;
9339 base_binfo = NULL_TREE;
9340 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9342 base_binfo = TYPE_BINFO (basetype);
9343 /* The original basetype could have been a typedef'd type. */
9344 basetype = BINFO_TYPE (base_binfo);
9346 /* Inherit flags from the base. */
9347 TYPE_HAS_NEW_OPERATOR (ref)
9348 |= TYPE_HAS_NEW_OPERATOR (basetype);
9349 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9350 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9351 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9352 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9353 CLASSTYPE_DIAMOND_SHAPED_P (ref)
9354 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9355 CLASSTYPE_REPEATED_BASE_P (ref)
9356 |= CLASSTYPE_REPEATED_BASE_P (basetype);
9359 /* We must do this test after we've seen through a typedef
9360 type. */
9361 if (TYPE_MARKED_P (basetype))
9363 if (basetype == ref)
9364 error ("recursive type %qT undefined", basetype);
9365 else
9366 error ("duplicate base type %qT invalid", basetype);
9367 continue;
9369 TYPE_MARKED_P (basetype) = 1;
9371 base_binfo = copy_binfo (base_binfo, basetype, ref,
9372 &igo_prev, via_virtual);
9373 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9374 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9376 BINFO_BASE_APPEND (binfo, base_binfo);
9377 BINFO_BASE_ACCESS_APPEND (binfo, access);
9380 if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9381 /* If we have space in the vbase vector, we must have shared at
9382 least one of them, and are therefore diamond shaped. */
9383 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9385 /* Unmark all the types. */
9386 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9387 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9388 TYPE_MARKED_P (ref) = 0;
9390 /* Now see if we have a repeated base type. */
9391 if (!CLASSTYPE_REPEATED_BASE_P (ref))
9393 for (base_binfo = binfo; base_binfo;
9394 base_binfo = TREE_CHAIN (base_binfo))
9396 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9398 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9399 break;
9401 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9403 for (base_binfo = binfo; base_binfo;
9404 base_binfo = TREE_CHAIN (base_binfo))
9405 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9406 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9407 else
9408 break;
9413 /* Begin compiling the definition of an enumeration type.
9414 NAME is its name (or null if anonymous).
9415 Returns the type object, as yet incomplete.
9416 Also records info about it so that build_enumerator
9417 may be used to declare the individual values as they are read. */
9419 tree
9420 start_enum (tree name)
9422 tree enumtype = NULL_TREE;
9423 struct cp_binding_level *b = current_binding_level;
9425 /* If this is the real definition for a previous forward reference,
9426 fill in the contents in the same object that used to be the
9427 forward reference. */
9429 if (name != NULL_TREE)
9430 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
9432 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9434 error ("multiple definition of %q#T", enumtype);
9435 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9436 /* Clear out TYPE_VALUES, and start again. */
9437 TYPE_VALUES (enumtype) = NULL_TREE;
9439 else
9441 enumtype = make_node (ENUMERAL_TYPE);
9442 pushtag (name, enumtype, 0);
9445 return enumtype;
9448 /* After processing and defining all the values of an enumeration type,
9449 install their decls in the enumeration type and finish it off.
9450 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9452 void
9453 finish_enum (tree enumtype)
9455 tree values;
9456 tree decl;
9457 tree value;
9458 tree minnode;
9459 tree maxnode;
9460 tree t;
9461 bool unsignedp;
9462 int lowprec;
9463 int highprec;
9464 int precision;
9465 integer_type_kind itk;
9466 tree underlying_type = NULL_TREE;
9468 /* We built up the VALUES in reverse order. */
9469 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9471 /* For an enum defined in a template, just set the type of the values;
9472 all further processing is postponed until the template is
9473 instantiated. We need to set the type so that tsubst of a CONST_DECL
9474 works. */
9475 if (processing_template_decl)
9477 for (values = TYPE_VALUES (enumtype);
9478 values;
9479 values = TREE_CHAIN (values))
9480 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9481 if (at_function_scope_p ())
9482 add_stmt (build_min (TAG_DEFN, enumtype));
9483 return;
9486 /* Determine the minimum and maximum values of the enumerators. */
9487 if (TYPE_VALUES (enumtype))
9489 minnode = maxnode = NULL_TREE;
9491 for (values = TYPE_VALUES (enumtype);
9492 values;
9493 values = TREE_CHAIN (values))
9495 decl = TREE_VALUE (values);
9497 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9498 each enumerator has the type of its enumeration. Prior to the
9499 closing brace, the type of each enumerator is the type of its
9500 initializing value. */
9501 TREE_TYPE (decl) = enumtype;
9503 /* Update the minimum and maximum values, if appropriate. */
9504 value = DECL_INITIAL (decl);
9505 /* Figure out what the minimum and maximum values of the
9506 enumerators are. */
9507 if (!minnode)
9508 minnode = maxnode = value;
9509 else if (tree_int_cst_lt (maxnode, value))
9510 maxnode = value;
9511 else if (tree_int_cst_lt (value, minnode))
9512 minnode = value;
9515 else
9516 /* [dcl.enum]
9518 If the enumerator-list is empty, the underlying type is as if
9519 the enumeration had a single enumerator with value 0. */
9520 minnode = maxnode = integer_zero_node;
9522 /* Compute the number of bits require to represent all values of the
9523 enumeration. We must do this before the type of MINNODE and
9524 MAXNODE are transformed, since min_precision relies on the
9525 TREE_TYPE of the value it is passed. */
9526 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9527 lowprec = min_precision (minnode, unsignedp);
9528 highprec = min_precision (maxnode, unsignedp);
9529 precision = MAX (lowprec, highprec);
9531 /* Determine the underlying type of the enumeration.
9533 [dcl.enum]
9535 The underlying type of an enumeration is an integral type that
9536 can represent all the enumerator values defined in the
9537 enumeration. It is implementation-defined which integral type is
9538 used as the underlying type for an enumeration except that the
9539 underlying type shall not be larger than int unless the value of
9540 an enumerator cannot fit in an int or unsigned int.
9542 We use "int" or an "unsigned int" as the underlying type, even if
9543 a smaller integral type would work, unless the user has
9544 explicitly requested that we use the smallest possible type. */
9545 for (itk = (flag_short_enums ? itk_char : itk_int);
9546 itk != itk_none;
9547 itk++)
9549 underlying_type = integer_types[itk];
9550 if (TYPE_PRECISION (underlying_type) >= precision
9551 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9552 break;
9554 if (itk == itk_none)
9556 /* DR 377
9558 IF no integral type can represent all the enumerator values, the
9559 enumeration is ill-formed. */
9560 error ("no integral type can represent all of the enumerator values "
9561 "for %qT", enumtype);
9562 precision = TYPE_PRECISION (long_long_integer_type_node);
9563 underlying_type = integer_types[itk_unsigned_long_long];
9566 /* Compute the minium and maximum values for the type.
9568 [dcl.enum]
9570 For an enumeration where emin is the smallest enumerator and emax
9571 is the largest, the values of the enumeration are the values of the
9572 underlying type in the range bmin to bmax, where bmin and bmax are,
9573 respectively, the smallest and largest values of the smallest bit-
9574 field that can store emin and emax. */
9576 /* The middle-end currently assumes that types with TYPE_PRECISION
9577 narrower than their underlying type are suitably zero or sign
9578 extended to fill their mode. g++ doesn't make these guarantees.
9579 Until the middle-end can represent such paradoxical types, we
9580 set the TYPE_PRECISION to the width of the underlying type. */
9581 TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
9583 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9585 /* [dcl.enum]
9587 The value of sizeof() applied to an enumeration type, an object
9588 of an enumeration type, or an enumerator, is the value of sizeof()
9589 applied to the underlying type. */
9590 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9591 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9592 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9593 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9594 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9595 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9597 /* Convert each of the enumerators to the type of the underlying
9598 type of the enumeration. */
9599 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9601 decl = TREE_VALUE (values);
9602 value = perform_implicit_conversion (underlying_type,
9603 DECL_INITIAL (decl));
9605 /* Do not clobber shared ints. */
9606 value = copy_node (value);
9608 TREE_TYPE (value) = enumtype;
9609 DECL_INITIAL (decl) = value;
9610 TREE_VALUE (values) = value;
9613 /* Fix up all variant types of this enum type. */
9614 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9616 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9617 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9618 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9619 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9620 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9621 TYPE_MODE (t) = TYPE_MODE (enumtype);
9622 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9623 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9624 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9625 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9628 /* Finish debugging output for this type. */
9629 rest_of_type_compilation (enumtype, namespace_bindings_p ());
9632 /* Build and install a CONST_DECL for an enumeration constant of the
9633 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9634 Assignment of sequential values by default is handled here. */
9636 void
9637 build_enumerator (tree name, tree value, tree enumtype)
9639 tree decl;
9640 tree context;
9641 tree type;
9643 /* Remove no-op casts from the value. */
9644 if (value)
9645 STRIP_TYPE_NOPS (value);
9647 if (! processing_template_decl)
9649 /* Validate and default VALUE. */
9650 if (value != NULL_TREE)
9652 value = decl_constant_value (value);
9654 if (TREE_CODE (value) == INTEGER_CST)
9656 value = perform_integral_promotions (value);
9657 constant_expression_warning (value);
9659 else
9661 error ("enumerator value for %qD not integer constant", name);
9662 value = NULL_TREE;
9666 /* Default based on previous value. */
9667 if (value == NULL_TREE)
9669 if (TYPE_VALUES (enumtype))
9671 HOST_WIDE_INT hi;
9672 unsigned HOST_WIDE_INT lo;
9673 tree prev_value;
9674 bool overflowed;
9676 /* The next value is the previous value plus one. We can
9677 safely assume that the previous value is an INTEGER_CST.
9678 add_double doesn't know the type of the target expression,
9679 so we must check with int_fits_type_p as well. */
9680 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9681 overflowed = add_double (TREE_INT_CST_LOW (prev_value),
9682 TREE_INT_CST_HIGH (prev_value),
9683 1, 0, &lo, &hi);
9684 value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
9685 overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
9687 if (overflowed)
9688 error ("overflow in enumeration values at %qD", name);
9690 else
9691 value = integer_zero_node;
9694 /* Remove no-op casts from the value. */
9695 STRIP_TYPE_NOPS (value);
9698 /* C++ associates enums with global, function, or class declarations. */
9699 context = current_scope ();
9700 if (!context)
9701 context = current_namespace;
9703 /* Build the actual enumeration constant. Note that the enumeration
9704 constants have the type of their initializers until the
9705 enumeration is complete:
9707 [ dcl.enum ]
9709 Following the closing brace of an enum-specifier, each enumer-
9710 ator has the type of its enumeration. Prior to the closing
9711 brace, the type of each enumerator is the type of its
9712 initializing value.
9714 In finish_enum we will reset the type. Of course, if we're
9715 processing a template, there may be no value. */
9716 type = value ? TREE_TYPE (value) : NULL_TREE;
9718 if (context && context == current_class_type)
9719 /* This enum declaration is local to the class. We need the full
9720 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9721 decl = build_lang_decl (CONST_DECL, name, type);
9722 else
9723 /* It's a global enum, or it's local to a function. (Note local to
9724 a function could mean local to a class method. */
9725 decl = build_decl (CONST_DECL, name, type);
9727 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9728 TREE_CONSTANT (decl) = 1;
9729 TREE_INVARIANT (decl) = 1;
9730 TREE_READONLY (decl) = 1;
9731 DECL_INITIAL (decl) = value;
9733 if (context && context == current_class_type)
9734 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9735 on the TYPE_FIELDS list for `S'. (That's so that you can say
9736 things like `S::i' later.) */
9737 finish_member_declaration (decl);
9738 else
9739 pushdecl (decl);
9741 /* Add this enumeration constant to the list for this type. */
9742 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9746 /* We're defining DECL. Make sure that it's type is OK. */
9748 static void
9749 check_function_type (tree decl, tree current_function_parms)
9751 tree fntype = TREE_TYPE (decl);
9752 tree return_type = complete_type (TREE_TYPE (fntype));
9754 /* In a function definition, arg types must be complete. */
9755 require_complete_types_for_parms (current_function_parms);
9757 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9759 error ("return type %q#T is incomplete", TREE_TYPE (fntype));
9761 /* Make it return void instead, but don't change the
9762 type of the DECL_RESULT, in case we have a named return value. */
9763 if (TREE_CODE (fntype) == METHOD_TYPE)
9765 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9766 TREE_TYPE (decl)
9767 = build_method_type_directly (ctype,
9768 void_type_node,
9769 FUNCTION_ARG_CHAIN (decl));
9771 else
9772 TREE_TYPE (decl)
9773 = build_function_type (void_type_node,
9774 TYPE_ARG_TYPES (TREE_TYPE (decl)));
9775 TREE_TYPE (decl)
9776 = build_exception_variant (fntype,
9777 TYPE_RAISES_EXCEPTIONS (fntype));
9779 else
9780 abstract_virtuals_error (decl, TREE_TYPE (fntype));
9783 /* Create the FUNCTION_DECL for a function definition.
9784 DECLSPECS and DECLARATOR are the parts of the declaration;
9785 they describe the function's name and the type it returns,
9786 but twisted together in a fashion that parallels the syntax of C.
9788 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9789 DECLARATOR is really the DECL for the function we are about to
9790 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9791 indicating that the function is an inline defined in-class.
9793 This function creates a binding context for the function body
9794 as well as setting up the FUNCTION_DECL in current_function_decl.
9796 For C++, we must first check whether that datum makes any sense.
9797 For example, "class A local_a(1,2);" means that variable local_a
9798 is an aggregate of type A, which should have a constructor
9799 applied to it with the argument list [1, 2]. */
9801 void
9802 start_preparsed_function (tree decl1, tree attrs, int flags)
9804 tree ctype = NULL_TREE;
9805 tree fntype;
9806 tree restype;
9807 int doing_friend = 0;
9808 struct cp_binding_level *bl;
9809 tree current_function_parms;
9810 struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
9812 /* Sanity check. */
9813 gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
9814 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
9816 fntype = TREE_TYPE (decl1);
9817 if (TREE_CODE (fntype) == METHOD_TYPE)
9818 ctype = TYPE_METHOD_BASETYPE (fntype);
9820 /* ISO C++ 11.4/5. A friend function defined in a class is in
9821 the (lexical) scope of the class in which it is defined. */
9822 if (!ctype && DECL_FRIEND_P (decl1))
9824 ctype = DECL_FRIEND_CONTEXT (decl1);
9826 /* CTYPE could be null here if we're dealing with a template;
9827 for example, `inline friend float foo()' inside a template
9828 will have no CTYPE set. */
9829 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
9830 ctype = NULL_TREE;
9831 else
9832 doing_friend = 1;
9835 if (DECL_DECLARED_INLINE_P (decl1)
9836 && lookup_attribute ("noinline", attrs))
9837 warning ("%Jinline function %qD given attribute noinline", decl1, decl1);
9839 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
9840 /* This is a constructor, we must ensure that any default args
9841 introduced by this definition are propagated to the clones
9842 now. The clones are used directly in overload resolution. */
9843 adjust_clone_args (decl1);
9845 /* Sometimes we don't notice that a function is a static member, and
9846 build a METHOD_TYPE for it. Fix that up now. */
9847 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
9848 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
9850 revert_static_member_fn (decl1);
9851 ctype = NULL_TREE;
9854 /* Set up current_class_type, and enter the scope of the class, if
9855 appropriate. */
9856 if (ctype)
9857 push_nested_class (ctype);
9858 else if (DECL_STATIC_FUNCTION_P (decl1))
9859 push_nested_class (DECL_CONTEXT (decl1));
9861 /* Now that we have entered the scope of the class, we must restore
9862 the bindings for any template parameters surrounding DECL1, if it
9863 is an inline member template. (Order is important; consider the
9864 case where a template parameter has the same name as a field of
9865 the class.) It is not until after this point that
9866 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
9867 if (flags & SF_INCLASS_INLINE)
9868 maybe_begin_member_template_processing (decl1);
9870 /* Effective C++ rule 15. */
9871 if (warn_ecpp
9872 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9873 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
9874 warning ("%<operator=%> should return a reference to %<*this%>");
9876 /* Make the init_value nonzero so pushdecl knows this is not tentative.
9877 error_mark_node is replaced below (in poplevel) with the BLOCK. */
9878 if (!DECL_INITIAL (decl1))
9879 DECL_INITIAL (decl1) = error_mark_node;
9881 /* This function exists in static storage.
9882 (This does not mean `static' in the C sense!) */
9883 TREE_STATIC (decl1) = 1;
9885 /* We must call push_template_decl after current_class_type is set
9886 up. (If we are processing inline definitions after exiting a
9887 class scope, current_class_type will be NULL_TREE until set above
9888 by push_nested_class.) */
9889 if (processing_template_decl)
9890 decl1 = push_template_decl (decl1);
9892 /* We are now in the scope of the function being defined. */
9893 current_function_decl = decl1;
9895 /* Save the parm names or decls from this function's declarator
9896 where store_parm_decls will find them. */
9897 current_function_parms = DECL_ARGUMENTS (decl1);
9899 /* Make sure the parameter and return types are reasonable. When
9900 you declare a function, these types can be incomplete, but they
9901 must be complete when you define the function. */
9902 if (! processing_template_decl)
9903 check_function_type (decl1, current_function_parms);
9905 /* Build the return declaration for the function. */
9906 restype = TREE_TYPE (fntype);
9907 /* Promote the value to int before returning it. */
9908 if (c_promoting_integer_type_p (restype))
9909 restype = type_promotes_to (restype);
9910 if (DECL_RESULT (decl1) == NULL_TREE)
9912 tree resdecl;
9914 resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
9915 DECL_ARTIFICIAL (resdecl) = 1;
9916 DECL_IGNORED_P (resdecl) = 1;
9917 DECL_RESULT (decl1) = resdecl;
9919 c_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
9922 /* Initialize RTL machinery. We cannot do this until
9923 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
9924 even when processing a template; this is how we get
9925 CFUN set up, and our per-function variables initialized.
9926 FIXME factor out the non-RTL stuff. */
9927 bl = current_binding_level;
9928 allocate_struct_function (decl1);
9929 current_binding_level = bl;
9931 /* Even though we're inside a function body, we still don't want to
9932 call expand_expr to calculate the size of a variable-sized array.
9933 We haven't necessarily assigned RTL to all variables yet, so it's
9934 not safe to try to expand expressions involving them. */
9935 cfun->x_dont_save_pending_sizes_p = 1;
9937 /* Start the statement-tree, start the tree now. */
9938 DECL_SAVED_TREE (decl1) = push_stmt_list ();
9940 /* Let the user know we're compiling this function. */
9941 announce_function (decl1);
9943 /* Record the decl so that the function name is defined.
9944 If we already have a decl for this name, and it is a FUNCTION_DECL,
9945 use the old decl. */
9946 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
9948 /* A specialization is not used to guide overload resolution. */
9949 if (!DECL_FUNCTION_MEMBER_P (decl1)
9950 && !(DECL_USE_TEMPLATE (decl1) &&
9951 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
9953 tree olddecl = pushdecl (decl1);
9955 if (olddecl == error_mark_node)
9956 /* If something went wrong when registering the declaration,
9957 use DECL1; we have to have a FUNCTION_DECL to use when
9958 parsing the body of the function. */
9960 else
9961 /* Otherwise, OLDDECL is either a previous declaration of
9962 the same function or DECL1 itself. */
9963 decl1 = olddecl;
9965 else
9967 /* We need to set the DECL_CONTEXT. */
9968 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
9969 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
9970 /* And make sure we have enough default args. */
9971 check_default_args (decl1);
9973 fntype = TREE_TYPE (decl1);
9976 /* Determine the ELF visibility attribute for the function. We must
9977 not do this before calling "pushdecl", as we must allow
9978 "duplicate_decls" to merge any attributes appropriately. */
9979 if (!DECL_CLONED_FUNCTION_P (decl1))
9980 determine_visibility (decl1);
9982 /* Reset these in case the call to pushdecl changed them. */
9983 current_function_decl = decl1;
9984 cfun->decl = decl1;
9986 /* If we are (erroneously) defining a function that we have already
9987 defined before, wipe out what we knew before. */
9988 if (!DECL_PENDING_INLINE_P (decl1))
9989 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
9991 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
9993 /* We know that this was set up by `grokclassfn'. We do not
9994 wait until `store_parm_decls', since evil parse errors may
9995 never get us to that point. Here we keep the consistency
9996 between `current_class_type' and `current_class_ptr'. */
9997 tree t = DECL_ARGUMENTS (decl1);
9999 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10000 gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10002 cp_function_chain->x_current_class_ref
10003 = build_indirect_ref (t, NULL);
10004 cp_function_chain->x_current_class_ptr = t;
10006 /* Constructors and destructors need to know whether they're "in
10007 charge" of initializing virtual base classes. */
10008 t = TREE_CHAIN (t);
10009 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10011 current_in_charge_parm = t;
10012 t = TREE_CHAIN (t);
10014 if (DECL_HAS_VTT_PARM_P (decl1))
10016 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10017 current_vtt_parm = t;
10021 if (DECL_INTERFACE_KNOWN (decl1))
10023 tree ctx = decl_function_context (decl1);
10025 if (DECL_NOT_REALLY_EXTERN (decl1))
10026 DECL_EXTERNAL (decl1) = 0;
10028 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10029 && TREE_PUBLIC (ctx))
10030 /* This is a function in a local class in an extern inline
10031 function. */
10032 comdat_linkage (decl1);
10034 /* If this function belongs to an interface, it is public.
10035 If it belongs to someone else's interface, it is also external.
10036 This only affects inlines and template instantiations. */
10037 else if (finfo->interface_unknown == 0
10038 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10040 if (DECL_DECLARED_INLINE_P (decl1)
10041 || DECL_TEMPLATE_INSTANTIATION (decl1)
10042 || processing_template_decl)
10044 DECL_EXTERNAL (decl1)
10045 = (finfo->interface_only
10046 || (DECL_DECLARED_INLINE_P (decl1)
10047 && ! flag_implement_inlines
10048 && !DECL_VINDEX (decl1)));
10050 /* For WIN32 we also want to put these in linkonce sections. */
10051 maybe_make_one_only (decl1);
10053 else
10054 DECL_EXTERNAL (decl1) = 0;
10055 DECL_NOT_REALLY_EXTERN (decl1) = 0;
10056 DECL_INTERFACE_KNOWN (decl1) = 1;
10057 /* If this function is in an interface implemented in this file,
10058 make sure that the backend knows to emit this function
10059 here. */
10060 if (!DECL_EXTERNAL (decl1))
10061 mark_needed (decl1);
10063 else if (finfo->interface_unknown && finfo->interface_only
10064 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10066 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10067 interface, we will have both finfo->interface_unknown and
10068 finfo->interface_only set. In that case, we don't want to
10069 use the normal heuristics because someone will supply a
10070 #pragma implementation elsewhere, and deducing it here would
10071 produce a conflict. */
10072 comdat_linkage (decl1);
10073 DECL_EXTERNAL (decl1) = 0;
10074 DECL_INTERFACE_KNOWN (decl1) = 1;
10075 DECL_DEFER_OUTPUT (decl1) = 1;
10077 else
10079 /* This is a definition, not a reference.
10080 So clear DECL_EXTERNAL. */
10081 DECL_EXTERNAL (decl1) = 0;
10083 if ((DECL_DECLARED_INLINE_P (decl1)
10084 || DECL_TEMPLATE_INSTANTIATION (decl1))
10085 && ! DECL_INTERFACE_KNOWN (decl1)
10086 /* Don't try to defer nested functions for now. */
10087 && ! decl_function_context (decl1))
10088 DECL_DEFER_OUTPUT (decl1) = 1;
10089 else
10090 DECL_INTERFACE_KNOWN (decl1) = 1;
10093 begin_scope (sk_function_parms, decl1);
10095 ++function_depth;
10097 if (DECL_DESTRUCTOR_P (decl1)
10098 || (DECL_CONSTRUCTOR_P (decl1)
10099 && targetm.cxx.cdtor_returns_this ()))
10101 cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10102 DECL_CONTEXT (cdtor_label) = current_function_decl;
10105 start_fname_decls ();
10107 store_parm_decls (current_function_parms);
10111 /* Like start_preparsed_function, except that instead of a
10112 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10114 Returns 1 on success. If the DECLARATOR is not suitable for a function
10115 (it defines a datum instead), we return 0, which tells
10116 yyparse to report a parse error. */
10119 start_function (cp_decl_specifier_seq *declspecs,
10120 const cp_declarator *declarator,
10121 tree attrs)
10123 tree decl1;
10125 if (have_extern_spec)
10127 declspecs->storage_class = sc_extern;
10128 /* This should only be done once on the outermost decl. */
10129 have_extern_spec = false;
10132 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10133 /* If the declarator is not suitable for a function definition,
10134 cause a syntax error. */
10135 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10136 return 0;
10138 /* If #pragma weak was used, mark the decl weak now. */
10139 if (global_scope_p (current_binding_level))
10140 maybe_apply_pragma_weak (decl1);
10142 if (DECL_MAIN_P (decl1))
10143 /* main must return int. grokfndecl should have corrected it
10144 (and issued a diagnostic) if the user got it wrong. */
10145 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10146 integer_type_node));
10148 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10150 return 1;
10153 /* Store the parameter declarations into the current function declaration.
10154 This is called after parsing the parameter declarations, before
10155 digesting the body of the function.
10157 Also install to binding contour return value identifier, if any. */
10159 static void
10160 store_parm_decls (tree current_function_parms)
10162 tree fndecl = current_function_decl;
10163 tree parm;
10165 /* This is a chain of any other decls that came in among the parm
10166 declarations. If a parm is declared with enum {foo, bar} x;
10167 then CONST_DECLs for foo and bar are put here. */
10168 tree nonparms = NULL_TREE;
10170 if (current_function_parms)
10172 /* This case is when the function was defined with an ANSI prototype.
10173 The parms already have decls, so we need not do anything here
10174 except record them as in effect
10175 and complain if any redundant old-style parm decls were written. */
10177 tree specparms = current_function_parms;
10178 tree next;
10180 /* Must clear this because it might contain TYPE_DECLs declared
10181 at class level. */
10182 current_binding_level->names = NULL;
10184 /* If we're doing semantic analysis, then we'll call pushdecl
10185 for each of these. We must do them in reverse order so that
10186 they end in the correct forward order. */
10187 specparms = nreverse (specparms);
10189 for (parm = specparms; parm; parm = next)
10191 next = TREE_CHAIN (parm);
10192 if (TREE_CODE (parm) == PARM_DECL)
10194 if (DECL_NAME (parm) == NULL_TREE
10195 || TREE_CODE (parm) != VOID_TYPE)
10196 pushdecl (parm);
10197 else
10198 error ("parameter %qD declared void", parm);
10200 else
10202 /* If we find an enum constant or a type tag,
10203 put it aside for the moment. */
10204 TREE_CHAIN (parm) = NULL_TREE;
10205 nonparms = chainon (nonparms, parm);
10209 /* Get the decls in their original chain order and record in the
10210 function. This is all and only the PARM_DECLs that were
10211 pushed into scope by the loop above. */
10212 DECL_ARGUMENTS (fndecl) = getdecls ();
10214 else
10215 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10217 /* Now store the final chain of decls for the arguments
10218 as the decl-chain of the current lexical scope.
10219 Put the enumerators in as well, at the front so that
10220 DECL_ARGUMENTS is not modified. */
10221 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10223 /* For a cloned function, we've already got all the code we need;
10224 there's no need to add any extra bits. */
10225 if (!DECL_CLONED_FUNCTION_P (fndecl))
10227 /* Do the starting of the exception specifications, if we have any. */
10228 if (flag_exceptions && !processing_template_decl
10229 && flag_enforce_eh_specs
10230 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10231 current_eh_spec_block = begin_eh_spec_block ();
10236 /* We have finished doing semantic analysis on DECL, but have not yet
10237 generated RTL for its body. Save away our current state, so that
10238 when we want to generate RTL later we know what to do. */
10240 static void
10241 save_function_data (tree decl)
10243 struct language_function *f;
10245 /* Save the language-specific per-function data so that we can
10246 get it back when we really expand this function. */
10247 gcc_assert (!DECL_PENDING_INLINE_P (decl));
10249 /* Make a copy. */
10250 f = GGC_NEW (struct language_function);
10251 memcpy (f, cp_function_chain, sizeof (struct language_function));
10252 DECL_SAVED_FUNCTION_DATA (decl) = f;
10254 /* Clear out the bits we don't need. */
10255 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10256 f->x_named_label_uses = NULL;
10257 f->bindings = NULL;
10258 f->x_local_names = NULL;
10262 /* Set the return value of the constructor (if present). */
10264 static void
10265 finish_constructor_body (void)
10267 tree val;
10268 tree exprstmt;
10270 if (targetm.cxx.cdtor_returns_this ())
10272 /* Any return from a constructor will end up here. */
10273 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10275 val = DECL_ARGUMENTS (current_function_decl);
10276 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10277 DECL_RESULT (current_function_decl), val);
10278 /* Return the address of the object. */
10279 exprstmt = build_stmt (RETURN_EXPR, val);
10280 add_stmt (exprstmt);
10284 /* Do all the processing for the beginning of a destructor; set up the
10285 vtable pointers and cleanups for bases and members. */
10287 static void
10288 begin_destructor_body (void)
10290 tree if_stmt;
10291 tree compound_stmt;
10293 /* If the dtor is empty, and we know there is not any possible
10294 way we could use any vtable entries, before they are possibly
10295 set by a base class dtor, we don't have to setup the vtables,
10296 as we know that any base class dtor will set up any vtables
10297 it needs. We avoid MI, because one base class dtor can do a
10298 virtual dispatch to an overridden function that would need to
10299 have a non-related vtable set up, we cannot avoid setting up
10300 vtables in that case. We could change this to see if there
10301 is just one vtable.
10303 ??? In the destructor for a class, the vtables are set
10304 appropriately for that class. There will be no non-related
10305 vtables. jason 2001-12-11. */
10306 if_stmt = begin_if_stmt ();
10308 /* If it is not safe to avoid setting up the vtables, then
10309 someone will change the condition to be boolean_true_node.
10310 (Actually, for now, we do not have code to set the condition
10311 appropriately, so we just assume that we always need to
10312 initialize the vtables.) */
10313 finish_if_stmt_cond (boolean_true_node, if_stmt);
10315 compound_stmt = begin_compound_stmt (0);
10317 /* Make all virtual function table pointers in non-virtual base
10318 classes point to CURRENT_CLASS_TYPE's virtual function
10319 tables. */
10320 initialize_vtbl_ptrs (current_class_ptr);
10322 finish_compound_stmt (compound_stmt);
10323 finish_then_clause (if_stmt);
10324 finish_if_stmt (if_stmt);
10326 /* And insert cleanups for our bases and members so that they
10327 will be properly destroyed if we throw. */
10328 push_base_cleanups ();
10331 /* At the end of every destructor we generate code to delete the object if
10332 necessary. Do that now. */
10334 static void
10335 finish_destructor_body (void)
10337 tree exprstmt;
10339 /* Any return from a destructor will end up here; that way all base
10340 and member cleanups will be run when the function returns. */
10341 add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10343 /* In a virtual destructor, we must call delete. */
10344 if (DECL_VIRTUAL_P (current_function_decl))
10346 tree if_stmt;
10347 tree virtual_size = cxx_sizeof (current_class_type);
10349 /* [class.dtor]
10351 At the point of definition of a virtual destructor (including
10352 an implicit definition), non-placement operator delete shall
10353 be looked up in the scope of the destructor's class and if
10354 found shall be accessible and unambiguous. */
10355 exprstmt = build_op_delete_call
10356 (DELETE_EXPR, current_class_ptr, virtual_size,
10357 /*global_p=*/false, NULL_TREE);
10359 if_stmt = begin_if_stmt ();
10360 finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10361 current_in_charge_parm,
10362 integer_one_node),
10363 if_stmt);
10364 finish_expr_stmt (exprstmt);
10365 finish_then_clause (if_stmt);
10366 finish_if_stmt (if_stmt);
10369 if (targetm.cxx.cdtor_returns_this ())
10371 tree val;
10373 val = DECL_ARGUMENTS (current_function_decl);
10374 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10375 DECL_RESULT (current_function_decl), val);
10376 /* Return the address of the object. */
10377 exprstmt = build_stmt (RETURN_EXPR, val);
10378 add_stmt (exprstmt);
10382 /* Do the necessary processing for the beginning of a function body, which
10383 in this case includes member-initializers, but not the catch clauses of
10384 a function-try-block. Currently, this means opening a binding level
10385 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10386 In other functions, this isn't necessary, but it doesn't hurt. */
10388 tree
10389 begin_function_body (void)
10391 tree stmt;
10393 if (processing_template_decl)
10394 /* Do nothing now. */;
10395 else
10396 /* Always keep the BLOCK node associated with the outermost pair of
10397 curly braces of a function. These are needed for correct
10398 operation of dwarfout.c. */
10399 keep_next_level (true);
10401 stmt = begin_compound_stmt (BCS_FN_BODY);
10403 if (processing_template_decl)
10404 /* Do nothing now. */;
10405 else if (DECL_DESTRUCTOR_P (current_function_decl))
10406 begin_destructor_body ();
10408 return stmt;
10411 /* Do the processing for the end of a function body. Currently, this means
10412 closing out the cleanups for fully-constructed bases and members, and in
10413 the case of the destructor, deleting the object if desired. Again, this
10414 is only meaningful for [cd]tors, since they are the only functions where
10415 there is a significant distinction between the main body and any
10416 function catch clauses. Handling, say, main() return semantics here
10417 would be wrong, as flowing off the end of a function catch clause for
10418 main() would also need to return 0. */
10420 void
10421 finish_function_body (tree compstmt)
10423 /* Close the block. */
10424 finish_compound_stmt (compstmt);
10426 if (processing_template_decl)
10427 /* Do nothing now. */;
10428 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10429 finish_constructor_body ();
10430 else if (DECL_DESTRUCTOR_P (current_function_decl))
10431 finish_destructor_body ();
10434 /* Finish up a function declaration and compile that function
10435 all the way to assembler language output. The free the storage
10436 for the function definition.
10438 FLAGS is a bitwise or of the following values:
10439 2 - INCLASS_INLINE
10440 We just finished processing the body of an in-class inline
10441 function definition. (This processing will have taken place
10442 after the class definition is complete.) */
10444 tree
10445 finish_function (int flags)
10447 tree fndecl = current_function_decl;
10448 tree fntype, ctype = NULL_TREE;
10449 int inclass_inline = (flags & 2) != 0;
10450 int nested;
10452 /* When we get some parse errors, we can end up without a
10453 current_function_decl, so cope. */
10454 if (fndecl == NULL_TREE)
10455 return error_mark_node;
10457 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10458 && DECL_VIRTUAL_P (fndecl)
10459 && !processing_template_decl)
10461 tree fnclass = DECL_CONTEXT (fndecl);
10462 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10463 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10466 nested = function_depth > 1;
10467 fntype = TREE_TYPE (fndecl);
10469 /* TREE_READONLY (fndecl) = 1;
10470 This caused &foo to be of type ptr-to-const-function
10471 which then got a warning when stored in a ptr-to-function variable. */
10473 gcc_assert (building_stmt_tree ());
10475 /* For a cloned function, we've already got all the code we need;
10476 there's no need to add any extra bits. */
10477 if (!DECL_CLONED_FUNCTION_P (fndecl))
10479 if (DECL_MAIN_P (current_function_decl))
10481 /* Make it so that `main' always returns 0 by default. */
10482 #if VMS_TARGET
10483 finish_return_stmt (integer_one_node);
10484 #else
10485 finish_return_stmt (integer_zero_node);
10486 #endif
10489 /* Finish dealing with exception specifiers. */
10490 if (flag_exceptions && !processing_template_decl
10491 && flag_enforce_eh_specs
10492 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10493 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10494 (TREE_TYPE (current_function_decl)),
10495 current_eh_spec_block);
10498 /* If we're saving up tree structure, tie off the function now. */
10499 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10501 finish_fname_decls ();
10503 /* If this function can't throw any exceptions, remember that. */
10504 if (!processing_template_decl
10505 && !cp_function_chain->can_throw
10506 && !flag_non_call_exceptions)
10507 TREE_NOTHROW (fndecl) = 1;
10509 /* This must come after expand_function_end because cleanups might
10510 have declarations (from inline functions) that need to go into
10511 this function's blocks. */
10513 /* If the current binding level isn't the outermost binding level
10514 for this function, either there is a bug, or we have experienced
10515 syntax errors and the statement tree is malformed. */
10516 if (current_binding_level->kind != sk_function_parms)
10518 /* Make sure we have already experienced errors. */
10519 gcc_assert (errorcount);
10521 /* Throw away the broken statement tree and extra binding
10522 levels. */
10523 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10525 while (current_binding_level->kind != sk_function_parms)
10527 if (current_binding_level->kind == sk_class)
10528 pop_nested_class ();
10529 else
10530 poplevel (0, 0, 0);
10533 poplevel (1, 0, 1);
10535 /* Statements should always be full-expressions at the outermost set
10536 of curly braces for a function. */
10537 gcc_assert (stmts_are_full_exprs_p ());
10539 /* Set up the named return value optimization, if we can. Candidate
10540 variables are selected in check_return_value. */
10541 if (current_function_return_value)
10543 tree r = current_function_return_value;
10544 tree outer;
10546 if (r != error_mark_node
10547 /* This is only worth doing for fns that return in memory--and
10548 simpler, since we don't have to worry about promoted modes. */
10549 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10550 /* Only allow this for variables declared in the outer scope of
10551 the function so we know that their lifetime always ends with a
10552 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10553 we were to do this optimization in tree-ssa. */
10554 && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)))
10555 /* Skip the artificial function body block. */
10556 && (outer = BLOCK_SUBBLOCKS (outer))
10557 && chain_member (r, BLOCK_VARS (outer)))
10558 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10560 current_function_return_value = NULL_TREE;
10563 /* Remember that we were in class scope. */
10564 if (current_class_name)
10565 ctype = current_class_type;
10567 /* Must mark the RESULT_DECL as being in this function. */
10568 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10570 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10571 to the FUNCTION_DECL node itself. */
10572 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10574 /* Save away current state, if appropriate. */
10575 if (!processing_template_decl)
10576 save_function_data (fndecl);
10578 /* Complain if there's just no return statement. */
10579 if (warn_return_type
10580 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10581 && !dependent_type_p (TREE_TYPE (fntype))
10582 && !current_function_returns_value && !current_function_returns_null
10583 /* Don't complain if we abort or throw. */
10584 && !current_function_returns_abnormally
10585 && !DECL_NAME (DECL_RESULT (fndecl))
10586 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10587 inline function, as we might never be compiled separately. */
10588 && (DECL_INLINE (fndecl) || processing_template_decl)
10589 /* Structor return values (if any) are set by the compiler. */
10590 && !DECL_CONSTRUCTOR_P (fndecl)
10591 && !DECL_DESTRUCTOR_P (fndecl))
10592 warning ("no return statement in function returning non-void");
10594 /* Store the end of the function, so that we get good line number
10595 info for the epilogue. */
10596 cfun->function_end_locus = input_location;
10598 /* Genericize before inlining. */
10599 if (!processing_template_decl)
10601 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
10602 cp_genericize (fndecl);
10603 /* Clear out the bits we don't need. */
10604 f->x_current_class_ptr = NULL;
10605 f->x_current_class_ref = NULL;
10606 f->x_eh_spec_block = NULL;
10607 f->x_in_charge_parm = NULL;
10608 f->x_vtt_parm = NULL;
10609 f->x_return_value = NULL;
10610 f->bindings = NULL;
10612 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10613 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10615 /* Clear out the bits we don't need. */
10616 local_names = NULL;
10617 named_label_uses = NULL;
10619 /* We're leaving the context of this function, so zap cfun. It's still in
10620 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10621 cfun = NULL;
10622 current_function_decl = NULL;
10624 /* If this is an in-class inline definition, we may have to pop the
10625 bindings for the template parameters that we added in
10626 maybe_begin_member_template_processing when start_function was
10627 called. */
10628 if (inclass_inline)
10629 maybe_end_member_template_processing ();
10631 /* Leave the scope of the class. */
10632 if (ctype)
10633 pop_nested_class ();
10635 --function_depth;
10637 /* Clean up. */
10638 if (! nested)
10639 /* Let the error reporting routines know that we're outside a
10640 function. For a nested function, this value is used in
10641 cxx_pop_function_context and then reset via pop_function_context. */
10642 current_function_decl = NULL_TREE;
10644 return fndecl;
10647 /* Create the FUNCTION_DECL for a function definition.
10648 DECLSPECS and DECLARATOR are the parts of the declaration;
10649 they describe the return type and the name of the function,
10650 but twisted together in a fashion that parallels the syntax of C.
10652 This function creates a binding context for the function body
10653 as well as setting up the FUNCTION_DECL in current_function_decl.
10655 Returns a FUNCTION_DECL on success.
10657 If the DECLARATOR is not suitable for a function (it defines a datum
10658 instead), we return 0, which tells yyparse to report a parse error.
10660 May return void_type_node indicating that this method is actually
10661 a friend. See grokfield for more details.
10663 Came here with a `.pushlevel' .
10665 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10666 CHANGES TO CODE IN `grokfield'. */
10668 tree
10669 start_method (cp_decl_specifier_seq *declspecs,
10670 const cp_declarator *declarator, tree attrlist)
10672 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10673 &attrlist);
10675 if (fndecl == error_mark_node)
10676 return error_mark_node;
10678 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10680 error ("invalid member function declaration");
10681 return error_mark_node;
10684 if (attrlist)
10685 cplus_decl_attributes (&fndecl, attrlist, 0);
10687 /* Pass friends other than inline friend functions back. */
10688 if (fndecl == void_type_node)
10689 return fndecl;
10691 if (DECL_IN_AGGR_P (fndecl))
10693 if (DECL_CONTEXT (fndecl)
10694 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10695 error ("%qD is already defined in class %qT", fndecl,
10696 DECL_CONTEXT (fndecl));
10697 return void_type_node;
10700 check_template_shadow (fndecl);
10702 DECL_DECLARED_INLINE_P (fndecl) = 1;
10703 if (flag_default_inline)
10704 DECL_INLINE (fndecl) = 1;
10706 /* We process method specializations in finish_struct_1. */
10707 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10709 fndecl = push_template_decl (fndecl);
10710 if (fndecl == error_mark_node)
10711 return fndecl;
10714 if (! DECL_FRIEND_P (fndecl))
10716 if (TREE_CHAIN (fndecl))
10718 fndecl = copy_node (fndecl);
10719 TREE_CHAIN (fndecl) = NULL_TREE;
10721 grok_special_member_properties (fndecl);
10724 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10726 /* Make a place for the parms. */
10727 begin_scope (sk_function_parms, fndecl);
10729 DECL_IN_AGGR_P (fndecl) = 1;
10730 return fndecl;
10733 /* Go through the motions of finishing a function definition.
10734 We don't compile this method until after the whole class has
10735 been processed.
10737 FINISH_METHOD must return something that looks as though it
10738 came from GROKFIELD (since we are defining a method, after all).
10740 This is called after parsing the body of the function definition.
10741 STMTS is the chain of statements that makes up the function body.
10743 DECL is the ..._DECL that `start_method' provided. */
10745 tree
10746 finish_method (tree decl)
10748 tree fndecl = decl;
10749 tree old_initial;
10751 tree link;
10753 if (decl == void_type_node)
10754 return decl;
10756 old_initial = DECL_INITIAL (fndecl);
10758 /* Undo the level for the parms (from start_method).
10759 This is like poplevel, but it causes nothing to be
10760 saved. Saving information here confuses symbol-table
10761 output routines. Besides, this information will
10762 be correctly output when this method is actually
10763 compiled. */
10765 /* Clear out the meanings of the local variables of this level;
10766 also record in each decl which block it belongs to. */
10768 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10770 if (DECL_NAME (link) != NULL_TREE)
10771 pop_binding (DECL_NAME (link), link);
10772 gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
10773 DECL_CONTEXT (link) = NULL_TREE;
10776 poplevel (0, 0, 0);
10778 DECL_INITIAL (fndecl) = old_initial;
10780 /* We used to check if the context of FNDECL was different from
10781 current_class_type as another way to get inside here. This didn't work
10782 for String.cc in libg++. */
10783 if (DECL_FRIEND_P (fndecl))
10785 VEC_safe_push (tree, CLASSTYPE_INLINE_FRIENDS (current_class_type),
10786 fndecl);
10787 decl = void_type_node;
10790 return decl;
10794 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10795 we can lay it out later, when and if its type becomes complete. */
10797 void
10798 maybe_register_incomplete_var (tree var)
10800 gcc_assert (TREE_CODE (var) == VAR_DECL);
10802 /* Keep track of variables with incomplete types. */
10803 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
10804 && DECL_EXTERNAL (var))
10806 tree inner_type = TREE_TYPE (var);
10808 while (TREE_CODE (inner_type) == ARRAY_TYPE)
10809 inner_type = TREE_TYPE (inner_type);
10810 inner_type = TYPE_MAIN_VARIANT (inner_type);
10812 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10813 /* RTTI TD entries are created while defining the type_info. */
10814 || (TYPE_LANG_SPECIFIC (inner_type)
10815 && TYPE_BEING_DEFINED (inner_type)))
10816 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10820 /* Called when a class type (given by TYPE) is defined. If there are
10821 any existing VAR_DECLs whose type hsa been completed by this
10822 declaration, update them now. */
10824 void
10825 complete_vars (tree type)
10827 tree *list = &incomplete_vars;
10829 gcc_assert (CLASS_TYPE_P (type));
10830 while (*list)
10832 if (same_type_p (type, TREE_PURPOSE (*list)))
10834 tree var = TREE_VALUE (*list);
10835 /* Complete the type of the variable. The VAR_DECL itself
10836 will be laid out in expand_expr. */
10837 complete_type (TREE_TYPE (var));
10838 /* Remove this entry from the list. */
10839 *list = TREE_CHAIN (*list);
10841 else
10842 list = &TREE_CHAIN (*list);
10845 /* Check for pending declarations which may have abstract type. */
10846 complete_type_check_abstract (type);
10849 /* If DECL is of a type which needs a cleanup, build that cleanup
10850 here. */
10852 tree
10853 cxx_maybe_build_cleanup (tree decl)
10855 tree type = TREE_TYPE (decl);
10857 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10859 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
10860 tree rval;
10861 bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
10862 && CLASSTYPE_VBASECLASSES (type));
10864 if (TREE_CODE (type) == ARRAY_TYPE)
10865 rval = decl;
10866 else
10868 cxx_mark_addressable (decl);
10869 rval = build_unary_op (ADDR_EXPR, decl, 0);
10872 /* Optimize for space over speed here. */
10873 if (!has_vbases || flag_expensive_optimizations)
10874 flags |= LOOKUP_NONVIRTUAL;
10876 rval = build_delete (TREE_TYPE (rval), rval,
10877 sfk_complete_destructor, flags, 0);
10879 if (has_vbases && !TYPE_HAS_DESTRUCTOR (type))
10880 rval = build_compound_expr (rval, build_vbase_delete (type, decl));
10882 return rval;
10884 return NULL_TREE;
10887 /* When a stmt has been parsed, this function is called. */
10889 void
10890 finish_stmt (void)
10894 /* DECL was originally constructed as a non-static member function,
10895 but turned out to be static. Update it accordingly. */
10897 void
10898 revert_static_member_fn (tree decl)
10900 tree tmp;
10901 tree function = TREE_TYPE (decl);
10902 tree args = TYPE_ARG_TYPES (function);
10904 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
10905 != TYPE_UNQUALIFIED)
10906 error ("static member function `%#D' declared with type qualifiers",
10907 decl);
10909 args = TREE_CHAIN (args);
10910 tmp = build_function_type (TREE_TYPE (function), args);
10911 tmp = build_qualified_type (tmp, cp_type_quals (function));
10912 tmp = build_exception_variant (tmp,
10913 TYPE_RAISES_EXCEPTIONS (function));
10914 TREE_TYPE (decl) = tmp;
10915 if (DECL_ARGUMENTS (decl))
10916 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
10917 DECL_STATIC_FUNCTION_P (decl) = 1;
10920 /* Initialize the variables used during compilation of a C++
10921 function. */
10923 void
10924 cxx_push_function_context (struct function * f)
10926 struct language_function *p = GGC_CNEW (struct language_function);
10927 f->language = p;
10929 /* Whenever we start a new function, we destroy temporaries in the
10930 usual way. */
10931 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
10933 if (f->decl)
10935 tree fn = f->decl;
10937 if (DECL_SAVED_FUNCTION_DATA (fn))
10939 /* If we already parsed this function, and we're just expanding it
10940 now, restore saved state. */
10941 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
10943 /* We don't need the saved data anymore. Unless this is an inline
10944 function; we need the named return value info for
10945 declare_return_variable. */
10946 if (! DECL_INLINE (fn))
10947 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
10952 /* Free the language-specific parts of F, now that we've finished
10953 compiling the function. */
10955 void
10956 cxx_pop_function_context (struct function * f)
10958 f->language = 0;
10961 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
10962 one of the language-independent trees. */
10964 enum cp_tree_node_structure_enum
10965 cp_tree_node_structure (union lang_tree_node * t)
10967 switch (TREE_CODE (&t->generic))
10969 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
10970 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
10971 case OVERLOAD: return TS_CP_OVERLOAD;
10972 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
10973 case TINST_LEVEL: return TS_CP_TINST_LEVEL;
10974 case PTRMEM_CST: return TS_CP_PTRMEM;
10975 case BASELINK: return TS_CP_BASELINK;
10976 default: return TS_CP_GENERIC;
10980 /* Build the void_list_node (void_type_node having been created). */
10981 tree
10982 build_void_list_node (void)
10984 tree t = build_tree_list (NULL_TREE, void_type_node);
10985 return t;
10988 bool
10989 cp_missing_noreturn_ok_p (tree decl)
10991 /* A missing noreturn is ok for the `main' function. */
10992 return DECL_MAIN_P (decl);
10995 /* Return the COMDAT group into which DECL should be placed. */
10997 const char *
10998 cxx_comdat_group (tree decl)
11000 tree name;
11002 /* Virtual tables, construction virtual tables, and virtual table
11003 tables all go in a single COMDAT group, named after the primary
11004 virtual table. */
11005 if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11006 name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11007 /* For all other DECLs, the COMDAT group is the mangled name of the
11008 declaration itself. */
11009 else
11010 name = DECL_ASSEMBLER_NAME (decl);
11012 return IDENTIFIER_POINTER (name);
11015 #include "gt-cp-decl.h"