* options.c (gfc_handle_module_path_options): Fix buffer overrun.
[official-gcc.git] / gcc / cp / decl.c
blob21f82548eaa15f923d297877029e160283b9292d
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 "lex.h"
43 #include "output.h"
44 #include "except.h"
45 #include "toplev.h"
46 #include "hashtab.h"
47 #include "tm_p.h"
48 #include "target.h"
49 #include "c-common.h"
50 #include "c-pragma.h"
51 #include "diagnostic.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "tree-flow.h"
56 static tree grokparms (tree, tree *);
57 static const char *redeclaration_error_message (tree, tree);
59 static int decl_jump_unsafe (tree);
60 static void require_complete_types_for_parms (tree);
61 static int ambi_op_p (enum tree_code);
62 static int unary_op_p (enum tree_code);
63 static void push_local_name (tree);
64 static tree grok_reference_init (tree, tree, tree, tree *);
65 static tree grokfndecl (tree, tree, tree, tree, tree, int,
66 enum overload_flags, tree,
67 tree, int, int, int, int, int, int, tree);
68 static tree grokvardecl (tree, tree, RID_BIT_TYPE *, int, int, tree);
69 static void record_unknown_type (tree, const char *);
70 static tree builtin_function_1 (const char *, tree, tree, int,
71 enum built_in_class, const char *,
72 tree);
73 static tree build_library_fn_1 (tree, enum tree_code, tree);
74 static int member_function_or_else (tree, tree, enum overload_flags);
75 static void bad_specifiers (tree, const char *, int, int, int, int,
76 int);
77 static void check_for_uninitialized_const_var (tree);
78 static hashval_t typename_hash (const void *);
79 static int typename_compare (const void *, const void *);
80 static tree local_variable_p_walkfn (tree *, int *, void *);
81 static tree record_builtin_java_type (const char *, int);
82 static const char *tag_name (enum tag_types code);
83 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
84 static int walk_globals_r (tree, void*);
85 static int walk_vtables_r (tree, void*);
86 static tree make_label_decl (tree, int);
87 static void use_label (tree);
88 static void check_previous_goto_1 (tree, struct cp_binding_level *, tree,
89 const location_t *);
90 static void check_previous_goto (struct named_label_use_list *);
91 static void check_switch_goto (struct cp_binding_level *);
92 static void check_previous_gotos (tree);
93 static void pop_label (tree, tree);
94 static void pop_labels (tree);
95 static void maybe_deduce_size_from_array_init (tree, tree);
96 static void layout_var_decl (tree);
97 static void maybe_commonize_var (tree);
98 static tree check_initializer (tree, tree, int, tree *);
99 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
100 static void save_function_data (tree);
101 static void check_function_type (tree, tree);
102 static void begin_constructor_body (void);
103 static void finish_constructor_body (void);
104 static void begin_destructor_body (void);
105 static void finish_destructor_body (void);
106 static tree create_array_type_for_decl (tree, tree, tree);
107 static tree get_atexit_node (void);
108 static tree get_dso_handle_node (void);
109 static tree start_cleanup_fn (void);
110 static void end_cleanup_fn (void);
111 static tree cp_make_fname_decl (tree, int);
112 static void initialize_predefined_identifiers (void);
113 static tree check_special_function_return_type
114 (special_function_kind, tree, tree);
115 static tree push_cp_library_fn (enum tree_code, tree);
116 static tree build_cp_library_fn (tree, enum tree_code, tree);
117 static void store_parm_decls (tree);
118 static void initialize_local_var (tree, tree);
119 static void expand_static_init (tree, tree);
120 static tree next_initializable_field (tree);
121 static tree reshape_init (tree, tree *);
122 static tree build_typename_type (tree, tree, tree);
124 /* Erroneous argument lists can use this *IFF* they do not modify it. */
125 tree error_mark_list;
127 /* The following symbols are subsumed in the cp_global_trees array, and
128 listed here individually for documentation purposes.
130 C++ extensions
131 tree wchar_decl_node;
133 tree vtable_entry_type;
134 tree delta_type_node;
135 tree __t_desc_type_node;
136 tree ti_desc_type_node;
137 tree bltn_desc_type_node, ptr_desc_type_node;
138 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
139 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
140 tree ptm_desc_type_node;
141 tree base_desc_type_node;
143 tree class_type_node;
144 tree unknown_type_node;
146 Array type `vtable_entry_type[]'
148 tree vtbl_type_node;
149 tree vtbl_ptr_type_node;
151 Namespaces,
153 tree std_node;
154 tree abi_node;
156 A FUNCTION_DECL which can call `abort'. Not necessarily the
157 one that the user will declare, but sufficient to be called
158 by routines that want to abort the program.
160 tree abort_fndecl;
162 The FUNCTION_DECL for the default `::operator delete'.
164 tree global_delete_fndecl;
166 Used by RTTI
167 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
168 tree tinfo_var_id;
172 tree cp_global_trees[CPTI_MAX];
174 /* Indicates that there is a type value in some namespace, although
175 that is not necessarily in scope at the moment. */
177 tree global_type_node;
179 /* The node that holds the "name" of the global scope. */
180 tree global_scope_name;
182 /* Used only for jumps to as-yet undefined labels, since jumps to
183 defined labels can have their validity checked immediately. */
185 struct named_label_use_list GTY(())
187 struct cp_binding_level *binding_level;
188 tree names_in_scope;
189 tree label_decl;
190 location_t o_goto_locus;
191 struct named_label_use_list *next;
194 #define named_label_uses cp_function_chain->x_named_label_uses
196 #define local_names cp_function_chain->x_local_names
198 /* A list of objects which have constructors or destructors
199 which reside in the global scope. The decl is stored in
200 the TREE_VALUE slot and the initializer is stored
201 in the TREE_PURPOSE slot. */
202 tree static_aggregates;
204 /* -- end of C++ */
206 /* A node for the integer constants 2, and 3. */
208 tree integer_two_node, integer_three_node;
210 /* A list of all LABEL_DECLs in the function that have names. Here so
211 we can clear out their names' definitions at the end of the
212 function, and so we can check the validity of jumps to these labels. */
214 struct named_label_list GTY(())
216 struct cp_binding_level *binding_level;
217 tree names_in_scope;
218 tree old_value;
219 tree label_decl;
220 tree bad_decls;
221 struct named_label_list *next;
222 unsigned int in_try_scope : 1;
223 unsigned int in_catch_scope : 1;
226 #define named_labels cp_function_chain->x_named_labels
228 /* The number of function bodies which we are currently processing.
229 (Zero if we are at namespace scope, one inside the body of a
230 function, two inside the body of a function in a local class, etc.) */
231 int function_depth;
233 /* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
236 deprecated items. */
238 enum deprecated_states {
239 DEPRECATED_NORMAL,
240 DEPRECATED_SUPPRESS
243 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
245 /* Set by add_implicitly_declared_members() to keep those members from
246 being flagged as deprecated or reported as using deprecated
247 types. */
248 int adding_implicit_members = 0;
250 /* True if a declaration with an `extern' linkage specifier is being
251 processed. */
252 bool have_extern_spec;
255 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
256 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
257 time the VAR_DECL was declared, the type was incomplete. */
259 static GTY(()) tree incomplete_vars;
261 /* Returns the kind of template specialization we are currently
262 processing, given that it's declaration contained N_CLASS_SCOPES
263 explicit scope qualifications. */
265 tmpl_spec_kind
266 current_tmpl_spec_kind (int n_class_scopes)
268 int n_template_parm_scopes = 0;
269 int seen_specialization_p = 0;
270 int innermost_specialization_p = 0;
271 struct cp_binding_level *b;
273 /* Scan through the template parameter scopes. */
274 for (b = current_binding_level;
275 b->kind == sk_template_parms;
276 b = b->level_chain)
278 /* If we see a specialization scope inside a parameter scope,
279 then something is wrong. That corresponds to a declaration
280 like:
282 template <class T> template <> ...
284 which is always invalid since [temp.expl.spec] forbids the
285 specialization of a class member template if the enclosing
286 class templates are not explicitly specialized as well. */
287 if (b->explicit_spec_p)
289 if (n_template_parm_scopes == 0)
290 innermost_specialization_p = 1;
291 else
292 seen_specialization_p = 1;
294 else if (seen_specialization_p == 1)
295 return tsk_invalid_member_spec;
297 ++n_template_parm_scopes;
300 /* Handle explicit instantiations. */
301 if (processing_explicit_instantiation)
303 if (n_template_parm_scopes != 0)
304 /* We've seen a template parameter list during an explicit
305 instantiation. For example:
307 template <class T> template void f(int);
309 This is erroneous. */
310 return tsk_invalid_expl_inst;
311 else
312 return tsk_expl_inst;
315 if (n_template_parm_scopes < n_class_scopes)
316 /* We've not seen enough template headers to match all the
317 specialized classes present. For example:
319 template <class T> void R<T>::S<T>::f(int);
321 This is invalid; there needs to be one set of template
322 parameters for each class. */
323 return tsk_insufficient_parms;
324 else if (n_template_parm_scopes == n_class_scopes)
325 /* We're processing a non-template declaration (even though it may
326 be a member of a template class.) For example:
328 template <class T> void S<T>::f(int);
330 The `class T' maches the `S<T>', leaving no template headers
331 corresponding to the `f'. */
332 return tsk_none;
333 else if (n_template_parm_scopes > n_class_scopes + 1)
334 /* We've got too many template headers. For example:
336 template <> template <class T> void f (T);
338 There need to be more enclosing classes. */
339 return tsk_excessive_parms;
340 else
341 /* This must be a template. It's of the form:
343 template <class T> template <class U> void S<T>::f(U);
345 This is a specialization if the innermost level was a
346 specialization; otherwise it's just a definition of the
347 template. */
348 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
351 /* Exit the current scope. */
353 void
354 finish_scope (void)
356 poplevel (0, 0, 0);
359 /* When a label goes out of scope, check to see if that label was used
360 in a valid manner, and issue any appropriate warnings or errors. */
362 static void
363 pop_label (tree label, tree old_value)
365 if (!processing_template_decl)
367 if (DECL_INITIAL (label) == NULL_TREE)
369 location_t location;
371 cp_error_at ("label `%D' used but not defined", label);
372 location.file = input_filename;
373 location.line = 0;
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 `%D' 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 /* Exit a binding level.
408 Pop the level off, and restore the state of the identifier-decl mappings
409 that were in effect when this level was entered.
411 If KEEP == 1, this level had explicit declarations, so
412 and create a "block" (a BLOCK node) for the level
413 to record its declarations and subblocks for symbol table output.
415 If FUNCTIONBODY is nonzero, this level is the body of a function,
416 so create a block as if KEEP were set and also clear out all
417 label names.
419 If REVERSE is nonzero, reverse the order of decls before putting
420 them into the BLOCK. */
422 tree
423 poplevel (int keep, int reverse, int functionbody)
425 tree link;
426 /* The chain of decls was accumulated in reverse order.
427 Put it into forward order, just for cleanliness. */
428 tree decls;
429 int tmp = functionbody;
430 int real_functionbody;
431 tree subblocks;
432 tree block = NULL_TREE;
433 tree decl;
434 int leaving_for_scope;
435 scope_kind kind;
437 timevar_push (TV_NAME_LOOKUP);
439 my_friendly_assert (current_binding_level->kind != sk_class, 19990916);
441 real_functionbody = (current_binding_level->kind == sk_cleanup
442 ? ((functionbody = 0), tmp) : functionbody);
443 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
445 my_friendly_assert (!current_binding_level->class_shadowed,
446 19990414);
448 /* We used to use KEEP == 2 to indicate that the new block should go
449 at the beginning of the list of blocks at this binding level,
450 rather than the end. This hack is no longer used. */
451 my_friendly_assert (keep == 0 || keep == 1, 0);
453 if (current_binding_level->keep)
454 keep = 1;
456 /* Any uses of undefined labels, and any defined labels, now operate
457 under constraints of next binding contour. */
458 if (cfun && !functionbody)
460 struct cp_binding_level *level_chain;
461 level_chain = current_binding_level->level_chain;
462 if (level_chain)
464 struct named_label_use_list *uses;
465 struct named_label_list *labels;
466 for (labels = named_labels; labels; labels = labels->next)
467 if (labels->binding_level == current_binding_level)
469 tree decl;
470 if (current_binding_level->kind == sk_try)
471 labels->in_try_scope = 1;
472 if (current_binding_level->kind == sk_catch)
473 labels->in_catch_scope = 1;
474 for (decl = labels->names_in_scope; decl;
475 decl = TREE_CHAIN (decl))
476 if (decl_jump_unsafe (decl))
477 labels->bad_decls = tree_cons (NULL_TREE, decl,
478 labels->bad_decls);
479 labels->binding_level = level_chain;
480 labels->names_in_scope = level_chain->names;
483 for (uses = named_label_uses; uses; uses = uses->next)
484 if (uses->binding_level == current_binding_level)
486 uses->binding_level = level_chain;
487 uses->names_in_scope = level_chain->names;
492 /* Get the decls in the order they were written.
493 Usually current_binding_level->names is in reverse order.
494 But parameter decls were previously put in forward order. */
496 if (reverse)
497 current_binding_level->names
498 = decls = nreverse (current_binding_level->names);
499 else
500 decls = current_binding_level->names;
502 /* When not in function-at-a-time mode, expand_end_bindings will
503 warn about unused variables. But, in function-at-a-time mode
504 expand_end_bindings is not passed the list of variables in the
505 current scope, and therefore no warning is emitted. So, we
506 explicitly warn here. */
507 if (!processing_template_decl)
508 warn_about_unused_variables (getdecls ());
510 /* If there were any declarations or structure tags in that level,
511 or if this level is a function body,
512 create a BLOCK to record them for the life of this function. */
513 block = NULL_TREE;
514 if (keep == 1 || functionbody)
515 block = make_node (BLOCK);
516 if (block != NULL_TREE)
518 BLOCK_VARS (block) = decls;
519 BLOCK_SUBBLOCKS (block) = subblocks;
522 /* In each subblock, record that this is its superior. */
523 if (keep >= 0)
524 for (link = subblocks; link; link = TREE_CHAIN (link))
525 BLOCK_SUPERCONTEXT (link) = block;
527 /* We still support the old for-scope rules, whereby the variables
528 in a for-init statement were in scope after the for-statement
529 ended. We only use the new rules if flag_new_for_scope is
530 nonzero. */
531 leaving_for_scope
532 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
534 /* Remove declarations for all the DECLs in this level. */
535 for (link = decls; link; link = TREE_CHAIN (link))
537 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
538 && DECL_NAME (link))
540 cxx_binding *outer_binding
541 = IDENTIFIER_BINDING (DECL_NAME (link))->previous;
542 tree ns_binding;
544 if (!outer_binding)
545 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
546 else
547 ns_binding = NULL_TREE;
549 if (outer_binding
550 && outer_binding->scope == current_binding_level->level_chain)
551 /* We have something like:
553 int i;
554 for (int i; ;);
556 and we are leaving the `for' scope. There's no reason to
557 keep the binding of the inner `i' in this case. */
558 pop_binding (DECL_NAME (link), link);
559 else if ((outer_binding
560 && (TREE_CODE (outer_binding->value) == TYPE_DECL))
561 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
562 /* Here, we have something like:
564 typedef int I;
566 void f () {
567 for (int I; ;);
570 We must pop the for-scope binding so we know what's a
571 type and what isn't. */
572 pop_binding (DECL_NAME (link), link);
573 else
575 /* Mark this VAR_DECL as dead so that we can tell we left it
576 there only for backward compatibility. */
577 DECL_DEAD_FOR_LOCAL (link) = 1;
579 /* Keep track of what should have happened when we
580 popped the binding. */
581 if (outer_binding && outer_binding->value)
582 DECL_SHADOWED_FOR_VAR (link) = outer_binding->value;
584 /* Add it to the list of dead variables in the next
585 outermost binding to that we can remove these when we
586 leave that binding. */
587 current_binding_level->level_chain->dead_vars_from_for
588 = tree_cons (NULL_TREE, link,
589 current_binding_level->level_chain->
590 dead_vars_from_for);
592 /* Although we don't pop the cxx_binding, we do clear
593 its SCOPE since the scope is going away now. */
594 IDENTIFIER_BINDING (DECL_NAME (link))->scope = NULL;
597 else
599 /* Remove the binding. */
600 decl = link;
601 if (TREE_CODE (decl) == TREE_LIST)
602 decl = TREE_VALUE (decl);
603 if (DECL_P (decl))
604 pop_binding (DECL_NAME (decl), decl);
605 else if (TREE_CODE (decl) == OVERLOAD)
606 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
607 else
608 abort ();
612 /* Remove declarations for any `for' variables from inner scopes
613 that we kept around. */
614 for (link = current_binding_level->dead_vars_from_for;
615 link; link = TREE_CHAIN (link))
616 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
618 /* Restore the IDENTIFIER_TYPE_VALUEs. */
619 for (link = current_binding_level->type_shadowed;
620 link; link = TREE_CHAIN (link))
621 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
623 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
624 for (link = current_binding_level->shadowed_labels;
625 link;
626 link = TREE_CHAIN (link))
627 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
629 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
630 list if a `using' declaration put them there. The debugging
631 back-ends won't understand OVERLOAD, so we remove them here.
632 Because the BLOCK_VARS are (temporarily) shared with
633 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
634 popped all the bindings. */
635 if (block)
637 tree* d;
639 for (d = &BLOCK_VARS (block); *d; )
641 if (TREE_CODE (*d) == TREE_LIST)
642 *d = TREE_CHAIN (*d);
643 else
644 d = &TREE_CHAIN (*d);
648 /* If the level being exited is the top level of a function,
649 check over all the labels. */
650 if (functionbody)
652 /* Since this is the top level block of a function, the vars are
653 the function's parameters. Don't leave them in the BLOCK
654 because they are found in the FUNCTION_DECL instead. */
655 BLOCK_VARS (block) = 0;
656 pop_labels (block);
659 kind = current_binding_level->kind;
661 leave_scope ();
662 if (functionbody)
663 DECL_INITIAL (current_function_decl) = block;
664 else if (block)
665 current_binding_level->blocks
666 = chainon (current_binding_level->blocks, block);
668 /* If we did not make a block for the level just exited,
669 any blocks made for inner levels
670 (since they cannot be recorded as subblocks in that level)
671 must be carried forward so they will later become subblocks
672 of something else. */
673 else if (subblocks)
674 current_binding_level->blocks
675 = chainon (current_binding_level->blocks, subblocks);
677 /* Each and every BLOCK node created here in `poplevel' is important
678 (e.g. for proper debugging information) so if we created one
679 earlier, mark it as "used". */
680 if (block)
681 TREE_USED (block) = 1;
683 /* Take care of compiler's internal binding structures. */
684 if (kind == sk_cleanup)
686 tree scope_stmts;
688 scope_stmts
689 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
690 if (block)
692 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
693 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
696 block = poplevel (keep, reverse, functionbody);
699 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
702 /* Delete the node BLOCK from the current binding level.
703 This is used for the block inside a stmt expr ({...})
704 so that the block can be reinserted where appropriate. */
706 void
707 delete_block (tree block)
709 tree t;
710 if (current_binding_level->blocks == block)
711 current_binding_level->blocks = TREE_CHAIN (block);
712 for (t = current_binding_level->blocks; t;)
714 if (TREE_CHAIN (t) == block)
715 TREE_CHAIN (t) = TREE_CHAIN (block);
716 else
717 t = TREE_CHAIN (t);
719 TREE_CHAIN (block) = NULL_TREE;
720 /* Clear TREE_USED which is always set by poplevel.
721 The flag is set again if insert_block is called. */
722 TREE_USED (block) = 0;
725 /* Insert BLOCK at the end of the list of subblocks of the
726 current binding level. This is used when a BIND_EXPR is expanded,
727 to handle the BLOCK node inside the BIND_EXPR. */
729 void
730 insert_block (tree block)
732 TREE_USED (block) = 1;
733 current_binding_level->blocks
734 = chainon (current_binding_level->blocks, block);
737 /* Set the BLOCK node for the innermost scope
738 (the one we are currently in). */
740 void
741 set_block (tree block ATTRIBUTE_UNUSED )
743 /* The RTL expansion machinery requires us to provide this callback,
744 but it is not applicable in function-at-a-time mode. */
747 /* Returns nonzero if T is a virtual function table. */
750 vtable_decl_p (tree t, void* data ATTRIBUTE_UNUSED )
752 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
755 /* Returns nonzero if T is a TYPE_DECL for a type with virtual
756 functions. */
759 vtype_decl_p (tree t, void *data ATTRIBUTE_UNUSED )
761 return (TREE_CODE (t) == TYPE_DECL
762 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
763 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
766 struct walk_globals_data {
767 walk_globals_pred p;
768 walk_globals_fn f;
769 void *data;
772 /* Walk the vtable declarations in NAMESPACE. Whenever one is found
773 for which P returns nonzero, call F with its address. If any call
774 to F returns a nonzero value, return a nonzero value. */
776 static int
777 walk_vtables_r (tree namespace, void* data)
779 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
780 walk_globals_fn f = wgd->f;
781 void *d = wgd->data;
782 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
783 int result = 0;
785 for (; decl ; decl = TREE_CHAIN (decl))
786 result |= (*f) (&decl, d);
788 return result;
791 /* Walk the vtable declarations. Whenever one is found for which P
792 returns nonzero, call F with its address. If any call to F
793 returns a nonzero value, return a nonzero value. */
794 bool
795 walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
797 struct walk_globals_data wgd;
798 wgd.p = p;
799 wgd.f = f;
800 wgd.data = data;
802 return walk_namespaces (walk_vtables_r, &wgd);
805 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
806 itself, calling F for each. The DATA is passed to F as well. */
808 static int
809 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
811 int result = 0;
812 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
814 result |= (*f) (namespace, data);
816 for (; current; current = TREE_CHAIN (current))
817 result |= walk_namespaces_r (current, f, data);
819 return result;
822 /* Walk all the namespaces, calling F for each. The DATA is passed to
823 F as well. */
826 walk_namespaces (walk_namespaces_fn f, void* data)
828 return walk_namespaces_r (global_namespace, f, data);
831 /* Walk the global declarations in NAMESPACE. Whenever one is found
832 for which P returns nonzero, call F with its address. If any call
833 to F returns a nonzero value, return a nonzero value. */
835 static int
836 walk_globals_r (tree namespace, void* data)
838 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
839 walk_globals_pred p = wgd->p;
840 walk_globals_fn f = wgd->f;
841 void *d = wgd->data;
842 tree *t;
843 int result = 0;
845 t = &NAMESPACE_LEVEL (namespace)->names;
847 while (*t)
849 tree glbl = *t;
851 if ((*p) (glbl, d))
852 result |= (*f) (t, d);
854 /* If F changed *T, then *T still points at the next item to
855 examine. */
856 if (*t == glbl)
857 t = &TREE_CHAIN (*t);
860 return result;
863 /* Walk the global declarations. Whenever one is found for which P
864 returns true, call F with its address. If any call to F
865 returns true, return true. */
867 bool
868 walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
870 struct walk_globals_data wgd;
871 wgd.p = p;
872 wgd.f = f;
873 wgd.data = data;
875 return walk_namespaces (walk_globals_r, &wgd);
878 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
879 DATA is non-NULL, this is the last time we will call
880 wrapup_global_declarations for this NAMESPACE. */
883 wrapup_globals_for_namespace (tree namespace, void* data)
885 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
886 varray_type statics = level->static_decls;
887 tree *vec = &VARRAY_TREE (statics, 0);
888 int len = VARRAY_ACTIVE_SIZE (statics);
889 int last_time = (data != 0);
891 if (last_time)
893 check_global_declarations (vec, len);
894 return 0;
897 /* Write out any globals that need to be output. */
898 return wrapup_global_declarations (vec, len);
902 /* In C++, you don't have to write `struct S' to refer to `S'; you
903 can just use `S'. We accomplish this by creating a TYPE_DECL as
904 if the user had written `typedef struct S S'. Create and return
905 the TYPE_DECL for TYPE. */
907 tree
908 create_implicit_typedef (tree name, tree type)
910 tree decl;
912 decl = build_decl (TYPE_DECL, name, type);
913 DECL_ARTIFICIAL (decl) = 1;
914 /* There are other implicit type declarations, like the one *within*
915 a class that allows you to write `S::S'. We must distinguish
916 amongst these. */
917 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
918 TYPE_NAME (type) = decl;
920 return decl;
923 /* Remember a local name for name-mangling purposes. */
925 static void
926 push_local_name (tree decl)
928 size_t i, nelts;
929 tree t, name;
931 timevar_push (TV_NAME_LOOKUP);
932 if (!local_names)
933 VARRAY_TREE_INIT (local_names, 8, "local_names");
935 name = DECL_NAME (decl);
937 nelts = VARRAY_ACTIVE_SIZE (local_names);
938 for (i = 0; i < nelts; i++)
940 t = VARRAY_TREE (local_names, i);
941 if (DECL_NAME (t) == name)
943 if (!DECL_LANG_SPECIFIC (decl))
944 retrofit_lang_decl (decl);
945 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
946 if (DECL_LANG_SPECIFIC (t))
947 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
948 else
949 DECL_DISCRIMINATOR (decl) = 1;
951 VARRAY_TREE (local_names, i) = decl;
952 timevar_pop (TV_NAME_LOOKUP);
953 return;
957 VARRAY_PUSH_TREE (local_names, decl);
958 timevar_pop (TV_NAME_LOOKUP);
961 /* Subroutine of duplicate_decls: return truthvalue of whether
962 or not types of these decls match.
964 For C++, we must compare the parameter list so that `int' can match
965 `int&' in a parameter position, but `int&' is not confused with
966 `const int&'. */
969 decls_match (tree newdecl, tree olddecl)
971 int types_match;
973 if (newdecl == olddecl)
974 return 1;
976 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
977 /* If the two DECLs are not even the same kind of thing, we're not
978 interested in their types. */
979 return 0;
981 if (TREE_CODE (newdecl) == FUNCTION_DECL)
983 tree f1 = TREE_TYPE (newdecl);
984 tree f2 = TREE_TYPE (olddecl);
985 tree p1 = TYPE_ARG_TYPES (f1);
986 tree p2 = TYPE_ARG_TYPES (f2);
988 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
989 && ! (DECL_EXTERN_C_P (newdecl)
990 && DECL_EXTERN_C_P (olddecl)))
991 return 0;
993 if (TREE_CODE (f1) != TREE_CODE (f2))
994 return 0;
996 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
998 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
999 && (DECL_BUILT_IN (olddecl)
1000 #ifndef NO_IMPLICIT_EXTERN_C
1001 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1002 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1003 #endif
1006 types_match = self_promoting_args_p (p1);
1007 if (p1 == void_list_node)
1008 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1010 #ifndef NO_IMPLICIT_EXTERN_C
1011 else if (p1 == NULL_TREE
1012 && (DECL_EXTERN_C_P (olddecl)
1013 && DECL_IN_SYSTEM_HEADER (olddecl)
1014 && !DECL_CLASS_SCOPE_P (olddecl))
1015 && (DECL_EXTERN_C_P (newdecl)
1016 && DECL_IN_SYSTEM_HEADER (newdecl)
1017 && !DECL_CLASS_SCOPE_P (newdecl)))
1019 types_match = self_promoting_args_p (p2);
1020 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1022 #endif
1023 else
1024 types_match = compparms (p1, p2);
1026 else
1027 types_match = 0;
1029 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1031 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1032 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1033 return 0;
1035 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1036 DECL_TEMPLATE_PARMS (olddecl)))
1037 return 0;
1039 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1040 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1041 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1042 else
1043 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1044 DECL_TEMPLATE_RESULT (newdecl));
1046 else
1048 if (TREE_TYPE (newdecl) == error_mark_node)
1049 types_match = TREE_TYPE (olddecl) == error_mark_node;
1050 else if (TREE_TYPE (olddecl) == NULL_TREE)
1051 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1052 else if (TREE_TYPE (newdecl) == NULL_TREE)
1053 types_match = 0;
1054 else
1055 types_match = comptypes (TREE_TYPE (newdecl),
1056 TREE_TYPE (olddecl),
1057 COMPARE_REDECLARATION);
1060 return types_match;
1063 /* If NEWDECL is `static' and an `extern' was seen previously,
1064 warn about it. OLDDECL is the previous declaration.
1066 Note that this does not apply to the C++ case of declaring
1067 a variable `extern const' and then later `const'.
1069 Don't complain about built-in functions, since they are beyond
1070 the user's control. */
1072 void
1073 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1075 tree name;
1077 if (TREE_CODE (newdecl) == TYPE_DECL
1078 || TREE_CODE (newdecl) == TEMPLATE_DECL
1079 || TREE_CODE (newdecl) == CONST_DECL
1080 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1081 return;
1083 /* Don't get confused by static member functions; that's a different
1084 use of `static'. */
1085 if (TREE_CODE (newdecl) == FUNCTION_DECL
1086 && DECL_STATIC_FUNCTION_P (newdecl))
1087 return;
1089 /* If the old declaration was `static', or the new one isn't, then
1090 then everything is OK. */
1091 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1092 return;
1094 /* It's OK to declare a builtin function as `static'. */
1095 if (TREE_CODE (olddecl) == FUNCTION_DECL
1096 && DECL_ARTIFICIAL (olddecl))
1097 return;
1099 name = DECL_ASSEMBLER_NAME (newdecl);
1100 pedwarn ("`%D' was declared `extern' and later `static'", newdecl);
1101 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
1104 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1105 If the redeclaration is invalid, a diagnostic is issued, and the
1106 error_mark_node is returned. Otherwise, OLDDECL is returned.
1108 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1109 returned. */
1111 tree
1112 duplicate_decls (tree newdecl, tree olddecl)
1114 unsigned olddecl_uid = DECL_UID (olddecl);
1115 int olddecl_friend = 0, types_match = 0;
1116 int new_defines_function = 0;
1118 if (newdecl == olddecl)
1119 return olddecl;
1121 types_match = decls_match (newdecl, olddecl);
1123 /* If either the type of the new decl or the type of the old decl is an
1124 error_mark_node, then that implies that we have already issued an
1125 error (earlier) for some bogus type specification, and in that case,
1126 it is rather pointless to harass the user with yet more error message
1127 about the same declaration, so just pretend the types match here. */
1128 if (TREE_TYPE (newdecl) == error_mark_node
1129 || TREE_TYPE (olddecl) == error_mark_node)
1130 types_match = 1;
1132 if (DECL_P (olddecl)
1133 && TREE_CODE (newdecl) == FUNCTION_DECL
1134 && TREE_CODE (olddecl) == FUNCTION_DECL
1135 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1137 if (DECL_DECLARED_INLINE_P (newdecl)
1138 && DECL_UNINLINABLE (newdecl)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1140 /* Already warned elsewhere. */;
1141 else if (DECL_DECLARED_INLINE_P (olddecl)
1142 && DECL_UNINLINABLE (olddecl)
1143 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1144 /* Already warned. */;
1145 else if (DECL_DECLARED_INLINE_P (newdecl)
1146 && DECL_UNINLINABLE (olddecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1149 warning ("%Jfunction '%D' redeclared as inline", newdecl, newdecl);
1150 warning ("%Jprevious declaration of '%D' with attribute noinline",
1151 olddecl, olddecl);
1153 else if (DECL_DECLARED_INLINE_P (olddecl)
1154 && DECL_UNINLINABLE (newdecl)
1155 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1157 warning ("%Jfunction '%D' redeclared with attribute noinline",
1158 newdecl, newdecl);
1159 warning ("%Jprevious declaration of '%D' was inline",
1160 olddecl, olddecl);
1164 /* Check for redeclaration and other discrepancies. */
1165 if (TREE_CODE (olddecl) == FUNCTION_DECL
1166 && DECL_ARTIFICIAL (olddecl))
1168 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1170 /* Avoid warnings redeclaring anticipated built-ins. */
1171 if (DECL_ANTICIPATED (olddecl))
1172 return NULL_TREE;
1174 /* If you declare a built-in or predefined function name as static,
1175 the old definition is overridden, but optionally warn this was a
1176 bad choice of name. */
1177 if (! TREE_PUBLIC (newdecl))
1179 if (warn_shadow)
1180 warning ("shadowing %s function `%#D'",
1181 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1182 olddecl);
1183 /* Discard the old built-in function. */
1184 return NULL_TREE;
1186 /* If the built-in is not ansi, then programs can override
1187 it even globally without an error. */
1188 else if (! DECL_BUILT_IN (olddecl))
1189 warning ("library function `%#D' redeclared as non-function `%#D'",
1190 olddecl, newdecl);
1191 else
1193 error ("declaration of `%#D'", newdecl);
1194 error ("conflicts with built-in declaration `%#D'",
1195 olddecl);
1197 return NULL_TREE;
1199 else if (!types_match)
1201 /* Avoid warnings redeclaring anticipated built-ins. */
1202 if (DECL_ANTICIPATED (olddecl))
1203 ; /* Do nothing yet. */
1204 else if ((DECL_EXTERN_C_P (newdecl)
1205 && DECL_EXTERN_C_P (olddecl))
1206 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1207 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1209 /* A near match; override the builtin. */
1211 if (TREE_PUBLIC (newdecl))
1213 warning ("new declaration `%#D'", newdecl);
1214 warning ("ambiguates built-in declaration `%#D'",
1215 olddecl);
1217 else if (warn_shadow)
1218 warning ("shadowing %s function `%#D'",
1219 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1220 olddecl);
1222 else
1223 /* Discard the old built-in function. */
1224 return NULL_TREE;
1226 /* Replace the old RTL to avoid problems with inlining. */
1227 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
1229 /* Even if the types match, prefer the new declarations type
1230 for anticipated built-ins, for exception lists, etc... */
1231 else if (DECL_ANTICIPATED (olddecl))
1233 tree type = TREE_TYPE (newdecl);
1234 tree attribs = (*targetm.merge_type_attributes)
1235 (TREE_TYPE (olddecl), type);
1237 type = cp_build_type_attribute_variant (type, attribs);
1238 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1241 /* Whether or not the builtin can throw exceptions has no
1242 bearing on this declarator. */
1243 TREE_NOTHROW (olddecl) = 0;
1245 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1247 /* If a builtin function is redeclared as `static', merge
1248 the declarations, but make the original one static. */
1249 DECL_THIS_STATIC (olddecl) = 1;
1250 TREE_PUBLIC (olddecl) = 0;
1252 /* Make the old declaration consistent with the new one so
1253 that all remnants of the builtin-ness of this function
1254 will be banished. */
1255 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1256 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
1259 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1261 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1262 && TREE_CODE (newdecl) != TYPE_DECL
1263 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1264 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1265 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1266 && TREE_CODE (olddecl) != TYPE_DECL
1267 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1268 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1269 == TYPE_DECL))))
1271 /* We do nothing special here, because C++ does such nasty
1272 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1273 get shadowed, and know that if we need to find a TYPE_DECL
1274 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1275 slot of the identifier. */
1276 return NULL_TREE;
1279 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1280 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1281 || (TREE_CODE (olddecl) == FUNCTION_DECL
1282 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1283 return NULL_TREE;
1285 error ("`%#D' redeclared as different kind of symbol", newdecl);
1286 if (TREE_CODE (olddecl) == TREE_LIST)
1287 olddecl = TREE_VALUE (olddecl);
1288 cp_error_at ("previous declaration of `%#D'", olddecl);
1290 return error_mark_node;
1292 else if (!types_match)
1294 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1295 /* These are certainly not duplicate declarations; they're
1296 from different scopes. */
1297 return NULL_TREE;
1299 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1301 /* The name of a class template may not be declared to refer to
1302 any other template, class, function, object, namespace, value,
1303 or type in the same scope. */
1304 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1305 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1307 error ("declaration of template `%#D'", newdecl);
1308 cp_error_at ("conflicts with previous declaration `%#D'",
1309 olddecl);
1311 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1312 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1313 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1314 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1315 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1316 DECL_TEMPLATE_PARMS (olddecl))
1317 /* Template functions can be disambiguated by
1318 return type. */
1319 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1320 TREE_TYPE (TREE_TYPE (olddecl))))
1322 error ("new declaration `%#D'", newdecl);
1323 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
1325 return NULL_TREE;
1327 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1329 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1331 error ("declaration of C function `%#D' conflicts with",
1332 newdecl);
1333 cp_error_at ("previous declaration `%#D' here", olddecl);
1335 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1336 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1338 error ("new declaration `%#D'", newdecl);
1339 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
1341 else
1342 return NULL_TREE;
1344 else
1346 error ("conflicting declaration '%#D'", newdecl);
1347 cp_error_at ("'%D' has a previous declaration as `%#D'",
1348 olddecl, olddecl);
1349 return NULL_TREE;
1352 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1353 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1354 && (!DECL_TEMPLATE_INFO (newdecl)
1355 || (DECL_TI_TEMPLATE (newdecl)
1356 != DECL_TI_TEMPLATE (olddecl))))
1357 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1358 && (!DECL_TEMPLATE_INFO (olddecl)
1359 || (DECL_TI_TEMPLATE (olddecl)
1360 != DECL_TI_TEMPLATE (newdecl))))))
1361 /* It's OK to have a template specialization and a non-template
1362 with the same type, or to have specializations of two
1363 different templates with the same type. Note that if one is a
1364 specialization, and the other is an instantiation of the same
1365 template, that we do not exit at this point. That situation
1366 can occur if we instantiate a template class, and then
1367 specialize one of its methods. This situation is valid, but
1368 the declarations must be merged in the usual way. */
1369 return NULL_TREE;
1370 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1371 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1372 && !DECL_USE_TEMPLATE (newdecl))
1373 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1374 && !DECL_USE_TEMPLATE (olddecl))))
1375 /* One of the declarations is a template instantiation, and the
1376 other is not a template at all. That's OK. */
1377 return NULL_TREE;
1378 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
1379 && DECL_NAMESPACE_ALIAS (newdecl)
1380 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
1381 /* In [namespace.alias] we have:
1383 In a declarative region, a namespace-alias-definition can be
1384 used to redefine a namespace-alias declared in that declarative
1385 region to refer only to the namespace to which it already
1386 refers.
1388 Therefore, if we encounter a second alias directive for the same
1389 alias, we can just ignore the second directive. */
1390 return olddecl;
1391 else
1393 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1394 if (errmsg)
1396 error (errmsg, newdecl);
1397 if (DECL_NAME (olddecl) != NULL_TREE)
1398 cp_error_at ((DECL_INITIAL (olddecl)
1399 && namespace_bindings_p ())
1400 ? "`%#D' previously defined here"
1401 : "`%#D' previously declared here", olddecl);
1402 return error_mark_node;
1404 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1405 && DECL_INITIAL (olddecl) != NULL_TREE
1406 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1407 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1409 /* Prototype decl follows defn w/o prototype. */
1410 cp_warning_at ("prototype for `%#D'", newdecl);
1411 warning ("%Jfollows non-prototype definition here", olddecl);
1413 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1414 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1416 /* extern "C" int foo ();
1417 int foo () { bar (); }
1418 is OK. */
1419 if (current_lang_depth () == 0)
1420 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1421 else
1423 cp_error_at ("previous declaration of `%#D' with %L linkage",
1424 olddecl, DECL_LANGUAGE (olddecl));
1425 error ("conflicts with new declaration with %L linkage",
1426 DECL_LANGUAGE (newdecl));
1430 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1432 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1434 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1435 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1436 int i = 1;
1438 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1439 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1441 for (; t1 && t1 != void_list_node;
1442 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1443 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1445 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1446 TREE_PURPOSE (t2)))
1448 pedwarn ("default argument given for parameter %d of `%#D'",
1449 i, newdecl);
1450 cp_pedwarn_at ("after previous specification in `%#D'",
1451 olddecl);
1453 else
1455 error ("default argument given for parameter %d of `%#D'",
1456 i, newdecl);
1457 cp_error_at ("after previous specification in `%#D'",
1458 olddecl);
1462 if (DECL_DECLARED_INLINE_P (newdecl)
1463 && ! DECL_DECLARED_INLINE_P (olddecl)
1464 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1466 warning ("`%#D' was used before it was declared inline", newdecl);
1467 warning ("%Jprevious non-inline declaration here", olddecl);
1472 /* Do not merge an implicit typedef with an explicit one. In:
1474 class A;
1476 typedef class A A __attribute__ ((foo));
1478 the attribute should apply only to the typedef. */
1479 if (TREE_CODE (olddecl) == TYPE_DECL
1480 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1481 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1482 return NULL_TREE;
1484 /* If new decl is `static' and an `extern' was seen previously,
1485 warn about it. */
1486 warn_extern_redeclared_static (newdecl, olddecl);
1488 /* We have committed to returning 1 at this point. */
1489 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1491 /* Now that functions must hold information normally held
1492 by field decls, there is extra work to do so that
1493 declaration information does not get destroyed during
1494 definition. */
1495 if (DECL_VINDEX (olddecl))
1496 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1497 if (DECL_CONTEXT (olddecl))
1498 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1499 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1500 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1501 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1502 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1503 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
1504 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1505 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1506 SET_OVERLOADED_OPERATOR_CODE
1507 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1508 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1510 /* Optionally warn about more than one declaration for the same
1511 name, but don't warn about a function declaration followed by a
1512 definition. */
1513 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1514 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1515 /* Don't warn about extern decl followed by definition. */
1516 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1517 /* Don't warn about friends, let add_friend take care of it. */
1518 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
1520 warning ("redundant redeclaration of `%D' in same scope", newdecl);
1521 cp_warning_at ("previous declaration of `%D'", olddecl);
1525 /* Deal with C++: must preserve virtual function table size. */
1526 if (TREE_CODE (olddecl) == TYPE_DECL)
1528 tree newtype = TREE_TYPE (newdecl);
1529 tree oldtype = TREE_TYPE (olddecl);
1531 if (newtype != error_mark_node && oldtype != error_mark_node
1532 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1533 CLASSTYPE_FRIEND_CLASSES (newtype)
1534 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1536 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1539 /* Copy all the DECL_... slots specified in the new decl
1540 except for any that we copy here from the old type. */
1541 DECL_ATTRIBUTES (newdecl)
1542 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1544 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1546 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
1547 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1548 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1549 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1551 /* If the new declaration is a definition, update the file and
1552 line information on the declaration. */
1553 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1554 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
1556 DECL_SOURCE_LOCATION (olddecl)
1557 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1558 = DECL_SOURCE_LOCATION (newdecl);
1559 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1560 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl))
1561 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl));
1564 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1566 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1567 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1568 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1569 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1572 return olddecl;
1575 if (types_match)
1577 /* Automatically handles default parameters. */
1578 tree oldtype = TREE_TYPE (olddecl);
1579 tree newtype;
1581 /* Merge the data types specified in the two decls. */
1582 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1584 /* If merge_types produces a non-typedef type, just use the old type. */
1585 if (TREE_CODE (newdecl) == TYPE_DECL
1586 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1587 newtype = oldtype;
1589 if (TREE_CODE (newdecl) == VAR_DECL)
1591 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1592 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1593 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1594 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1597 /* Do this after calling `merge_types' so that default
1598 parameters don't confuse us. */
1599 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1600 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1601 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1603 TREE_TYPE (newdecl) = build_exception_variant (newtype,
1604 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
1605 TREE_TYPE (olddecl) = build_exception_variant (newtype,
1606 TYPE_RAISES_EXCEPTIONS (oldtype));
1608 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
1609 && DECL_SOURCE_LINE (olddecl) != 0
1610 && flag_exceptions
1611 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1612 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
1614 error ("declaration of `%F' throws different exceptions",
1615 newdecl);
1616 cp_error_at ("than previous declaration `%F'", olddecl);
1619 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1621 /* Lay the type out, unless already done. */
1622 if (! same_type_p (newtype, oldtype)
1623 && TREE_TYPE (newdecl) != error_mark_node
1624 && !(processing_template_decl && uses_template_parms (newdecl)))
1625 layout_type (TREE_TYPE (newdecl));
1627 if ((TREE_CODE (newdecl) == VAR_DECL
1628 || TREE_CODE (newdecl) == PARM_DECL
1629 || TREE_CODE (newdecl) == RESULT_DECL
1630 || TREE_CODE (newdecl) == FIELD_DECL
1631 || TREE_CODE (newdecl) == TYPE_DECL)
1632 && !(processing_template_decl && uses_template_parms (newdecl)))
1633 layout_decl (newdecl, 0);
1635 /* Merge the type qualifiers. */
1636 if (TREE_READONLY (newdecl))
1637 TREE_READONLY (olddecl) = 1;
1638 if (TREE_THIS_VOLATILE (newdecl))
1639 TREE_THIS_VOLATILE (olddecl) = 1;
1641 /* Merge the initialization information. */
1642 if (DECL_INITIAL (newdecl) == NULL_TREE
1643 && DECL_INITIAL (olddecl) != NULL_TREE)
1645 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1646 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1647 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1648 && DECL_LANG_SPECIFIC (newdecl)
1649 && DECL_LANG_SPECIFIC (olddecl))
1651 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1652 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1656 /* Merge the section attribute.
1657 We want to issue an error if the sections conflict but that must be
1658 done later in decl_attributes since we are called before attributes
1659 are assigned. */
1660 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1661 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1663 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1665 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1666 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1667 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1668 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1669 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1670 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1671 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1672 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1673 /* Keep the old RTL. */
1674 COPY_DECL_RTL (olddecl, newdecl);
1676 else if (TREE_CODE (newdecl) == VAR_DECL
1677 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1679 /* Keep the old RTL. We cannot keep the old RTL if the old
1680 declaration was for an incomplete object and the new
1681 declaration is not since many attributes of the RTL will
1682 change. */
1683 COPY_DECL_RTL (olddecl, newdecl);
1686 /* If cannot merge, then use the new type and qualifiers,
1687 and don't preserve the old rtl. */
1688 else
1690 /* Clean out any memory we had of the old declaration. */
1691 tree oldstatic = value_member (olddecl, static_aggregates);
1692 if (oldstatic)
1693 TREE_VALUE (oldstatic) = error_mark_node;
1695 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1696 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1697 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1698 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1701 /* Merge the storage class information. */
1702 merge_weak (newdecl, olddecl);
1704 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1705 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1706 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1707 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1708 if (! DECL_EXTERNAL (olddecl))
1709 DECL_EXTERNAL (newdecl) = 0;
1711 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1713 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1714 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1715 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1716 DECL_TEMPLATE_INSTANTIATED (newdecl)
1717 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1718 /* Don't really know how much of the language-specific
1719 values we should copy from old to new. */
1720 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1721 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1722 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1723 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1724 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1725 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1726 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1727 olddecl_friend = DECL_FRIEND_P (olddecl);
1729 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1730 if (TREE_CODE (newdecl) == FUNCTION_DECL
1731 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1733 DECL_BEFRIENDING_CLASSES (newdecl)
1734 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1735 DECL_BEFRIENDING_CLASSES (olddecl));
1736 /* DECL_THUNKS is only valid for virtual functions,
1737 otherwise it is a DECL_FRIEND_CONTEXT. */
1738 if (DECL_VIRTUAL_P (newdecl))
1739 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1743 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1745 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1746 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1748 /* If newdecl is not a specialization, then it is not a
1749 template-related function at all. And that means that we
1750 should have exited above, returning 0. */
1751 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
1754 if (TREE_USED (olddecl))
1755 /* From [temp.expl.spec]:
1757 If a template, a member template or the member of a class
1758 template is explicitly specialized then that
1759 specialization shall be declared before the first use of
1760 that specialization that would cause an implicit
1761 instantiation to take place, in every translation unit in
1762 which such a use occurs. */
1763 error ("explicit specialization of %D after first use",
1764 olddecl);
1766 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1768 /* [temp.expl.spec/14] We don't inline explicit specialization
1769 just because the primary template says so. */
1771 else
1773 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1774 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1776 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1778 /* If either decl says `inline', this fn is inline, unless
1779 its definition was passed already. */
1780 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1781 DECL_INLINE (olddecl) = 1;
1782 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1784 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1785 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1788 /* Preserve abstractness on cloned [cd]tors. */
1789 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1791 if (! types_match)
1793 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1794 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1795 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
1797 if (! types_match || new_defines_function)
1799 /* These need to be copied so that the names are available.
1800 Note that if the types do match, we'll preserve inline
1801 info and other bits, but if not, we won't. */
1802 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1803 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1805 if (new_defines_function)
1806 /* If defining a function declared with other language
1807 linkage, use the previously declared language linkage. */
1808 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1809 else if (types_match)
1811 /* If redeclaring a builtin function, and not a definition,
1812 it stays built in. */
1813 if (DECL_BUILT_IN (olddecl))
1815 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1816 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1817 /* If we're keeping the built-in definition, keep the rtl,
1818 regardless of declaration matches. */
1819 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
1822 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1823 /* Don't clear out the arguments if we're redefining a function. */
1824 if (DECL_ARGUMENTS (olddecl))
1825 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1828 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1829 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1831 /* Now preserve various other info from the definition. */
1832 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1833 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1834 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1835 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1837 /* If either declaration has a nondefault visibility, use it. */
1838 if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT)
1840 if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT
1841 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1843 warning ("%J'%D': visibility attribute ignored because it",
1844 newdecl, newdecl);
1845 warning ("%Jconflicts with previous declaration here", olddecl);
1847 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1850 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852 int function_size;
1854 function_size = sizeof (struct tree_decl);
1856 memcpy ((char *) olddecl + sizeof (struct tree_common),
1857 (char *) newdecl + sizeof (struct tree_common),
1858 function_size - sizeof (struct tree_common));
1860 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
1861 /* If newdecl is a template instantiation, it is possible that
1862 the following sequence of events has occurred:
1864 o A friend function was declared in a class template. The
1865 class template was instantiated.
1867 o The instantiation of the friend declaration was
1868 recorded on the instantiation list, and is newdecl.
1870 o Later, however, instantiate_class_template called pushdecl
1871 on the newdecl to perform name injection. But, pushdecl in
1872 turn called duplicate_decls when it discovered that another
1873 declaration of a global function with the same name already
1874 existed.
1876 o Here, in duplicate_decls, we decided to clobber newdecl.
1878 If we're going to do that, we'd better make sure that
1879 olddecl, and not newdecl, is on the list of
1880 instantiations so that if we try to do the instantiation
1881 again we won't get the clobbered declaration. */
1882 reregister_specialization (newdecl,
1883 DECL_TI_TEMPLATE (newdecl),
1884 olddecl);
1886 else
1888 memcpy ((char *) olddecl + sizeof (struct tree_common),
1889 (char *) newdecl + sizeof (struct tree_common),
1890 sizeof (struct tree_decl) - sizeof (struct tree_common)
1891 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1894 DECL_UID (olddecl) = olddecl_uid;
1895 if (olddecl_friend)
1896 DECL_FRIEND_P (olddecl) = 1;
1898 /* NEWDECL contains the merged attribute lists.
1899 Update OLDDECL to be the same. */
1900 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1902 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1903 so that encode_section_info has a chance to look at the new decl
1904 flags and attributes. */
1905 if (DECL_RTL_SET_P (olddecl)
1906 && (TREE_CODE (olddecl) == FUNCTION_DECL
1907 || (TREE_CODE (olddecl) == VAR_DECL
1908 && TREE_STATIC (olddecl))))
1909 make_decl_rtl (olddecl, NULL);
1911 return olddecl;
1914 /* Return zero if the declaration NEWDECL is valid
1915 when the declaration OLDDECL (assumed to be for the same name)
1916 has already been seen.
1917 Otherwise return an error message format string with a %s
1918 where the identifier should go. */
1920 static const char *
1921 redeclaration_error_message (tree newdecl, tree olddecl)
1923 if (TREE_CODE (newdecl) == TYPE_DECL)
1925 /* Because C++ can put things into name space for free,
1926 constructs like "typedef struct foo { ... } foo"
1927 would look like an erroneous redeclaration. */
1928 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
1929 return 0;
1930 else
1931 return "redefinition of `%#D'";
1933 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1935 /* If this is a pure function, its olddecl will actually be
1936 the original initialization to `0' (which we force to call
1937 abort()). Don't complain about redefinition in this case. */
1938 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
1939 return 0;
1941 /* If both functions come from different namespaces, this is not
1942 a redeclaration - this is a conflict with a used function. */
1943 if (DECL_NAMESPACE_SCOPE_P (olddecl)
1944 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
1945 return "`%D' conflicts with used function";
1947 /* We'll complain about linkage mismatches in
1948 warn_extern_redeclared_static. */
1950 /* Defining the same name twice is no good. */
1951 if (DECL_INITIAL (olddecl) != NULL_TREE
1952 && DECL_INITIAL (newdecl) != NULL_TREE)
1954 if (DECL_NAME (olddecl) == NULL_TREE)
1955 return "`%#D' not declared in class";
1956 else
1957 return "redefinition of `%#D'";
1959 return 0;
1961 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1963 tree nt, ot;
1965 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1967 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
1968 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
1969 return "redefinition of `%#D'";
1970 return NULL;
1973 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
1974 || (DECL_TEMPLATE_RESULT (newdecl)
1975 == DECL_TEMPLATE_RESULT (olddecl)))
1976 return NULL;
1978 nt = DECL_TEMPLATE_RESULT (newdecl);
1979 if (DECL_TEMPLATE_INFO (nt))
1980 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
1981 ot = DECL_TEMPLATE_RESULT (olddecl);
1982 if (DECL_TEMPLATE_INFO (ot))
1983 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
1984 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
1985 return "redefinition of `%#D'";
1987 return NULL;
1989 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
1991 /* Objects declared at top level: */
1992 /* If at least one is a reference, it's ok. */
1993 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
1994 return 0;
1995 /* Reject two definitions. */
1996 return "redefinition of `%#D'";
1998 else
2000 /* Objects declared with block scope: */
2001 /* Reject two definitions, and reject a definition
2002 together with an external reference. */
2003 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2004 return "redeclaration of `%#D'";
2005 return 0;
2009 /* Create a new label, named ID. */
2011 static tree
2012 make_label_decl (tree id, int local_p)
2014 tree decl;
2016 decl = build_decl (LABEL_DECL, id, void_type_node);
2018 DECL_CONTEXT (decl) = current_function_decl;
2019 DECL_MODE (decl) = VOIDmode;
2020 C_DECLARED_LABEL_FLAG (decl) = local_p;
2022 /* Say where one reference is to the label, for the sake of the
2023 error if it is not defined. */
2024 DECL_SOURCE_LOCATION (decl) = input_location;
2026 /* Record the fact that this identifier is bound to this label. */
2027 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2029 return decl;
2032 /* Record this label on the list of used labels so that we can check
2033 at the end of the function to see whether or not the label was
2034 actually defined, and so we can check when the label is defined whether
2035 this use is valid. */
2037 static void
2038 use_label (tree decl)
2040 if (named_label_uses == NULL
2041 || named_label_uses->names_in_scope != current_binding_level->names
2042 || named_label_uses->label_decl != decl)
2044 struct named_label_use_list *new_ent;
2045 new_ent = ggc_alloc (sizeof (struct named_label_use_list));
2046 new_ent->label_decl = decl;
2047 new_ent->names_in_scope = current_binding_level->names;
2048 new_ent->binding_level = current_binding_level;
2049 new_ent->o_goto_locus = input_location;
2050 new_ent->next = named_label_uses;
2051 named_label_uses = new_ent;
2055 /* Look for a label named ID in the current function. If one cannot
2056 be found, create one. (We keep track of used, but undefined,
2057 labels, and complain about them at the end of a function.) */
2059 tree
2060 lookup_label (tree id)
2062 tree decl;
2063 struct named_label_list *ent;
2065 timevar_push (TV_NAME_LOOKUP);
2066 /* You can't use labels at global scope. */
2067 if (current_function_decl == NULL_TREE)
2069 error ("label `%s' referenced outside of any function",
2070 IDENTIFIER_POINTER (id));
2071 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2074 /* See if we've already got this label. */
2075 decl = IDENTIFIER_LABEL_VALUE (id);
2076 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2077 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2079 /* Record this label on the list of labels used in this function.
2080 We do this before calling make_label_decl so that we get the
2081 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2082 ent = ggc_alloc_cleared (sizeof (struct named_label_list));
2083 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2084 ent->next = named_labels;
2085 named_labels = ent;
2087 /* We need a new label. */
2088 decl = make_label_decl (id, /*local_p=*/0);
2090 /* Now fill in the information we didn't have before. */
2091 ent->label_decl = decl;
2093 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2096 /* Declare a local label named ID. */
2098 tree
2099 declare_local_label (tree id)
2101 tree decl;
2103 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2104 this scope we can restore the old value of
2105 IDENTIFIER_TYPE_VALUE. */
2106 current_binding_level->shadowed_labels
2107 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2108 current_binding_level->shadowed_labels);
2109 /* Look for the label. */
2110 decl = make_label_decl (id, /*local_p=*/1);
2111 /* Now fill in the information we didn't have before. */
2112 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
2114 return decl;
2117 /* Returns nonzero if it is ill-formed to jump past the declaration of
2118 DECL. Returns 2 if it's also a real problem. */
2120 static int
2121 decl_jump_unsafe (tree decl)
2123 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
2124 return 0;
2126 if (DECL_INITIAL (decl) == NULL_TREE
2127 && pod_type_p (TREE_TYPE (decl)))
2128 return 0;
2130 /* This is really only important if we're crossing an initialization.
2131 The POD stuff is just pedantry; why should it matter if the class
2132 contains a field of pointer to member type? */
2133 if (DECL_INITIAL (decl)
2134 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
2135 return 2;
2136 return 1;
2139 /* Check that a single previously seen jump to a newly defined label
2140 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2141 the jump context; NAMES are the names in scope in LEVEL at the jump
2142 context; FILE and LINE are the source position of the jump or 0. */
2144 static void
2145 check_previous_goto_1 (tree decl,
2146 struct cp_binding_level* level,
2147 tree names, const location_t *locus)
2149 int identified = 0;
2150 int saw_eh = 0;
2151 struct cp_binding_level *b = current_binding_level;
2152 for (; b; b = b->level_chain)
2154 tree new_decls = b->names;
2155 tree old_decls = (b == level ? names : NULL_TREE);
2156 for (; new_decls != old_decls;
2157 new_decls = TREE_CHAIN (new_decls))
2159 int problem = decl_jump_unsafe (new_decls);
2160 if (! problem)
2161 continue;
2163 if (! identified)
2165 if (decl)
2166 pedwarn ("jump to label `%D'", decl);
2167 else
2168 pedwarn ("jump to case label");
2170 if (locus)
2171 pedwarn ("%H from here", locus);
2172 identified = 1;
2175 if (problem > 1)
2176 cp_error_at (" crosses initialization of `%#D'",
2177 new_decls);
2178 else
2179 cp_pedwarn_at (" enters scope of non-POD `%#D'",
2180 new_decls);
2183 if (b == level)
2184 break;
2185 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
2187 if (! identified)
2189 if (decl)
2190 pedwarn ("jump to label `%D'", decl);
2191 else
2192 pedwarn ("jump to case label");
2194 if (locus)
2195 pedwarn ("%H from here", locus);
2196 identified = 1;
2198 if (b->kind == sk_try)
2199 error (" enters try block");
2200 else
2201 error (" enters catch block");
2202 saw_eh = 1;
2207 static void
2208 check_previous_goto (struct named_label_use_list* use)
2210 check_previous_goto_1 (use->label_decl, use->binding_level,
2211 use->names_in_scope, &use->o_goto_locus);
2214 static void
2215 check_switch_goto (struct cp_binding_level* level)
2217 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
2220 /* Check that any previously seen jumps to a newly defined label DECL
2221 are OK. Called by define_label. */
2223 static void
2224 check_previous_gotos (tree decl)
2226 struct named_label_use_list **usep;
2228 if (! TREE_USED (decl))
2229 return;
2231 for (usep = &named_label_uses; *usep; )
2233 struct named_label_use_list *use = *usep;
2234 if (use->label_decl == decl)
2236 check_previous_goto (use);
2237 *usep = use->next;
2239 else
2240 usep = &(use->next);
2244 /* Check that a new jump to a label DECL is OK. Called by
2245 finish_goto_stmt. */
2247 void
2248 check_goto (tree decl)
2250 int identified = 0;
2251 tree bad;
2252 struct named_label_list *lab;
2254 /* We can't know where a computed goto is jumping. So we assume
2255 that it's OK. */
2256 if (! DECL_P (decl))
2257 return;
2259 /* If the label hasn't been defined yet, defer checking. */
2260 if (! DECL_INITIAL (decl))
2262 use_label (decl);
2263 return;
2266 for (lab = named_labels; lab; lab = lab->next)
2267 if (decl == lab->label_decl)
2268 break;
2270 /* If the label is not on named_labels it's a gcc local label, so
2271 it must be in an outer scope, so jumping to it is always OK. */
2272 if (lab == 0)
2273 return;
2275 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2276 && !identified)
2278 cp_pedwarn_at ("jump to label `%D'", decl);
2279 pedwarn (" from here");
2280 identified = 1;
2283 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2285 tree b = TREE_VALUE (bad);
2286 int u = decl_jump_unsafe (b);
2288 if (u > 1 && DECL_ARTIFICIAL (b))
2289 /* Can't skip init of __exception_info. */
2290 error ("%J enters catch block", b);
2291 else if (u > 1)
2292 cp_error_at (" skips initialization of `%#D'", b);
2293 else
2294 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
2297 if (lab->in_try_scope)
2298 error (" enters try block");
2299 else if (lab->in_catch_scope)
2300 error (" enters catch block");
2303 /* Define a label, specifying the location in the source file.
2304 Return the LABEL_DECL node for the label. */
2306 tree
2307 define_label (location_t location, tree name)
2309 tree decl = lookup_label (name);
2310 struct named_label_list *ent;
2311 struct cp_binding_level *p;
2313 timevar_push (TV_NAME_LOOKUP);
2314 for (ent = named_labels; ent; ent = ent->next)
2315 if (ent->label_decl == decl)
2316 break;
2318 /* After labels, make any new cleanups in the function go into their
2319 own new (temporary) binding contour. */
2320 for (p = current_binding_level;
2321 p->kind != sk_function_parms;
2322 p = p->level_chain)
2323 p->more_cleanups_ok = 0;
2325 if (name == get_identifier ("wchar_t"))
2326 pedwarn ("label named wchar_t");
2328 if (DECL_INITIAL (decl) != NULL_TREE)
2329 error ("duplicate label `%D'", decl);
2330 else
2332 /* Mark label as having been defined. */
2333 DECL_INITIAL (decl) = error_mark_node;
2334 /* Say where in the source. */
2335 DECL_SOURCE_LOCATION (decl) = location;
2336 if (ent)
2338 ent->names_in_scope = current_binding_level->names;
2339 ent->binding_level = current_binding_level;
2341 check_previous_gotos (decl);
2344 timevar_pop (TV_NAME_LOOKUP);
2345 return decl;
2348 struct cp_switch
2350 struct cp_binding_level *level;
2351 struct cp_switch *next;
2352 /* The SWITCH_STMT being built. */
2353 tree switch_stmt;
2354 /* A splay-tree mapping the low element of a case range to the high
2355 element, or NULL_TREE if there is no high element. Used to
2356 determine whether or not a new case label duplicates an old case
2357 label. We need a tree, rather than simply a hash table, because
2358 of the GNU case range extension. */
2359 splay_tree cases;
2362 /* A stack of the currently active switch statements. The innermost
2363 switch statement is on the top of the stack. There is no need to
2364 mark the stack for garbage collection because it is only active
2365 during the processing of the body of a function, and we never
2366 collect at that point. */
2368 static struct cp_switch *switch_stack;
2370 /* Called right after a switch-statement condition is parsed.
2371 SWITCH_STMT is the switch statement being parsed. */
2373 void
2374 push_switch (tree switch_stmt)
2376 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
2377 p->level = current_binding_level;
2378 p->next = switch_stack;
2379 p->switch_stmt = switch_stmt;
2380 p->cases = splay_tree_new (case_compare, NULL, NULL);
2381 switch_stack = p;
2384 void
2385 pop_switch (void)
2387 struct cp_switch *cs = switch_stack;
2389 /* Emit warnings as needed. */
2390 c_do_switch_warnings (cs->cases, cs->switch_stmt);
2392 splay_tree_delete (cs->cases);
2393 switch_stack = switch_stack->next;
2394 free (cs);
2397 /* Note that we've seen a definition of a case label, and complain if this
2398 is a bad place for one. */
2400 tree
2401 finish_case_label (tree low_value, tree high_value)
2403 tree cond, r;
2404 struct cp_binding_level *p;
2406 if (processing_template_decl)
2408 tree label;
2410 /* For templates, just add the case label; we'll do semantic
2411 analysis at instantiation-time. */
2412 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2413 return add_stmt (build_case_label (low_value, high_value, label));
2416 /* Find the condition on which this switch statement depends. */
2417 cond = SWITCH_COND (switch_stack->switch_stmt);
2418 if (cond && TREE_CODE (cond) == TREE_LIST)
2419 cond = TREE_VALUE (cond);
2421 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
2423 check_switch_goto (switch_stack->level);
2425 /* After labels, make any new cleanups in the function go into their
2426 own new (temporary) binding contour. */
2427 for (p = current_binding_level;
2428 p->kind != sk_function_parms;
2429 p = p->level_chain)
2430 p->more_cleanups_ok = 0;
2432 return r;
2435 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2437 static hashval_t
2438 typename_hash (const void* k)
2440 hashval_t hash;
2441 tree t = (tree) k;
2443 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2444 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2446 return hash;
2449 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2451 static int
2452 typename_compare (const void * k1, const void * k2)
2454 tree t1;
2455 tree t2;
2456 tree d1;
2457 tree d2;
2459 t1 = (tree) k1;
2460 t2 = (tree) k2;
2461 d1 = TYPE_NAME (t1);
2462 d2 = TYPE_NAME (t2);
2464 return (DECL_NAME (d1) == DECL_NAME (d2)
2465 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
2466 && ((TREE_TYPE (t1) != NULL_TREE)
2467 == (TREE_TYPE (t2) != NULL_TREE))
2468 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2469 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
2472 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2473 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
2474 is non-NULL, this type is being created by the implicit typename
2475 extension, and BASE_TYPE is a type named `t' in some base class of
2476 `T' which depends on template parameters.
2478 Returns the new TYPENAME_TYPE. */
2480 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2482 static tree
2483 build_typename_type (tree context, tree name, tree fullname)
2485 tree t;
2486 tree d;
2487 void **e;
2489 if (typename_htab == NULL)
2491 typename_htab = htab_create_ggc (61, &typename_hash,
2492 &typename_compare, NULL);
2495 /* Build the TYPENAME_TYPE. */
2496 t = make_aggr_type (TYPENAME_TYPE);
2497 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2498 TYPENAME_TYPE_FULLNAME (t) = fullname;
2500 /* Build the corresponding TYPE_DECL. */
2501 d = build_decl (TYPE_DECL, name, t);
2502 TYPE_NAME (TREE_TYPE (d)) = d;
2503 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2504 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2505 DECL_ARTIFICIAL (d) = 1;
2507 /* See if we already have this type. */
2508 e = htab_find_slot (typename_htab, t, INSERT);
2509 if (*e)
2510 t = (tree) *e;
2511 else
2512 *e = t;
2514 return t;
2517 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
2518 unless an error occurs, in which case error_mark_node is returned.
2519 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
2520 set, we return that, rather than the _TYPE it corresponds to, in
2521 other cases we look through the type decl. If TF_ERROR is set,
2522 complain about errors, otherwise be quiet. */
2524 tree
2525 make_typename_type (tree context, tree name, tsubst_flags_t complain)
2527 tree fullname;
2529 if (name == error_mark_node
2530 || context == NULL_TREE
2531 || context == error_mark_node)
2532 return error_mark_node;
2534 if (TYPE_P (name))
2536 if (!(TYPE_LANG_SPECIFIC (name)
2537 && (CLASSTYPE_IS_TEMPLATE (name)
2538 || CLASSTYPE_USE_TEMPLATE (name))))
2539 name = TYPE_IDENTIFIER (name);
2540 else
2541 /* Create a TEMPLATE_ID_EXPR for the type. */
2542 name = build_nt (TEMPLATE_ID_EXPR,
2543 CLASSTYPE_TI_TEMPLATE (name),
2544 CLASSTYPE_TI_ARGS (name));
2546 else if (TREE_CODE (name) == TYPE_DECL)
2547 name = DECL_NAME (name);
2549 fullname = name;
2551 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2553 name = TREE_OPERAND (name, 0);
2554 if (TREE_CODE (name) == TEMPLATE_DECL)
2555 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2557 if (TREE_CODE (name) == TEMPLATE_DECL)
2559 error ("`%D' used without template parameters", name);
2560 return error_mark_node;
2562 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 20030802);
2564 if (TREE_CODE (context) == NAMESPACE_DECL)
2566 /* We can get here from typename_sub0 in the explicit_template_type
2567 expansion. Just fail. */
2568 if (complain & tf_error)
2569 error ("no class template named `%#T' in `%#T'",
2570 name, context);
2571 return error_mark_node;
2574 if (!dependent_type_p (context)
2575 || currently_open_class (context))
2577 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2579 tree tmpl = NULL_TREE;
2580 if (IS_AGGR_TYPE (context))
2581 tmpl = lookup_field (context, name, 0, false);
2582 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2584 if (complain & tf_error)
2585 error ("no class template named `%#T' in `%#T'",
2586 name, context);
2587 return error_mark_node;
2590 if (complain & tf_error)
2591 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2593 return lookup_template_class (tmpl,
2594 TREE_OPERAND (fullname, 1),
2595 NULL_TREE, context,
2596 /*entering_scope=*/0,
2597 tf_error | tf_warning | tf_user);
2599 else
2601 tree t;
2603 if (!IS_AGGR_TYPE (context))
2605 if (complain & tf_error)
2606 error ("no type named `%#T' in `%#T'", name, context);
2607 return error_mark_node;
2610 t = lookup_field (context, name, 0, true);
2611 if (t)
2613 if (TREE_CODE (t) != TYPE_DECL)
2615 if (complain & tf_error)
2616 error ("no type named `%#T' in `%#T'", name, context);
2617 return error_mark_node;
2620 if (complain & tf_error)
2621 perform_or_defer_access_check (TYPE_BINFO (context), t);
2623 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2624 t = TREE_TYPE (t);
2626 return t;
2631 /* If the CONTEXT is not a template type, then either the field is
2632 there now or its never going to be. */
2633 if (!dependent_type_p (context))
2635 if (complain & tf_error)
2636 error ("no type named `%#T' in `%#T'", name, context);
2637 return error_mark_node;
2640 return build_typename_type (context, name, fullname);
2643 /* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
2644 unless an error occurs, in which case error_mark_node is returned.
2645 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
2646 corresponds to. If COMPLAIN zero, don't complain about any errors
2647 that occur. */
2649 tree
2650 make_unbound_class_template (tree context, tree name, tsubst_flags_t complain)
2652 tree t;
2653 tree d;
2655 if (TYPE_P (name))
2656 name = TYPE_IDENTIFIER (name);
2657 else if (DECL_P (name))
2658 name = DECL_NAME (name);
2659 if (TREE_CODE (name) != IDENTIFIER_NODE)
2660 abort ();
2662 if (!dependent_type_p (context)
2663 || currently_open_class (context))
2665 tree tmpl = NULL_TREE;
2667 if (IS_AGGR_TYPE (context))
2668 tmpl = lookup_field (context, name, 0, false);
2670 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2672 if (complain & tf_error)
2673 error ("no class template named `%#T' in `%#T'", name, context);
2674 return error_mark_node;
2677 if (complain & tf_error)
2678 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2680 return tmpl;
2683 /* Build the UNBOUND_CLASS_TEMPLATE. */
2684 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2685 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2686 TREE_TYPE (t) = NULL_TREE;
2688 /* Build the corresponding TEMPLATE_DECL. */
2689 d = build_decl (TEMPLATE_DECL, name, t);
2690 TYPE_NAME (TREE_TYPE (d)) = d;
2691 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2692 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2693 DECL_ARTIFICIAL (d) = 1;
2695 return t;
2700 /* Push the declarations of builtin types into the namespace.
2701 RID_INDEX is the index of the builtin type in the array
2702 RID_POINTERS. NAME is the name used when looking up the builtin
2703 type. TYPE is the _TYPE node for the builtin type. */
2705 void
2706 record_builtin_type (enum rid rid_index,
2707 const char* name,
2708 tree type)
2710 tree rname = NULL_TREE, tname = NULL_TREE;
2711 tree tdecl = NULL_TREE;
2713 if ((int) rid_index < (int) RID_MAX)
2714 rname = ridpointers[(int) rid_index];
2715 if (name)
2716 tname = get_identifier (name);
2718 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2719 eliminated. Built-in types should not be looked up name; their
2720 names are keywords that the parser can recognize. However, there
2721 is code in c-common.c that uses identifier_global_value to look
2722 up built-in types by name. */
2723 if (tname)
2725 tdecl = build_decl (TYPE_DECL, tname, type);
2726 DECL_ARTIFICIAL (tdecl) = 1;
2727 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2729 if (rname)
2731 if (!tdecl)
2733 tdecl = build_decl (TYPE_DECL, rname, type);
2734 DECL_ARTIFICIAL (tdecl) = 1;
2736 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2739 if (!TYPE_NAME (type))
2740 TYPE_NAME (type) = tdecl;
2742 if (tdecl)
2743 debug_hooks->type_decl (tdecl, 0);
2746 /* Record one of the standard Java types.
2747 * Declare it as having the given NAME.
2748 * If SIZE > 0, it is the size of one of the integral types;
2749 * otherwise it is the negative of the size of one of the other types. */
2751 static tree
2752 record_builtin_java_type (const char* name, int size)
2754 tree type, decl;
2755 if (size > 0)
2756 type = make_signed_type (size);
2757 else if (size > -32)
2758 { /* "__java_char" or ""__java_boolean". */
2759 type = make_unsigned_type (-size);
2760 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2762 else
2763 { /* "__java_float" or ""__java_double". */
2764 type = make_node (REAL_TYPE);
2765 TYPE_PRECISION (type) = - size;
2766 layout_type (type);
2768 record_builtin_type (RID_MAX, name, type);
2769 decl = TYPE_NAME (type);
2771 /* Suppress generate debug symbol entries for these types,
2772 since for normal C++ they are just clutter.
2773 However, push_lang_context undoes this if extern "Java" is seen. */
2774 DECL_IGNORED_P (decl) = 1;
2776 TYPE_FOR_JAVA (type) = 1;
2777 return type;
2780 /* Push a type into the namespace so that the back-ends ignore it. */
2782 static void
2783 record_unknown_type (tree type, const char* name)
2785 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2786 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2787 DECL_IGNORED_P (decl) = 1;
2788 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2789 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2790 TYPE_ALIGN (type) = 1;
2791 TYPE_USER_ALIGN (type) = 0;
2792 TYPE_MODE (type) = TYPE_MODE (void_type_node);
2795 /* An string for which we should create an IDENTIFIER_NODE at
2796 startup. */
2798 typedef struct predefined_identifier
2800 /* The name of the identifier. */
2801 const char *const name;
2802 /* The place where the IDENTIFIER_NODE should be stored. */
2803 tree *const node;
2804 /* Nonzero if this is the name of a constructor or destructor. */
2805 const int ctor_or_dtor_p;
2806 } predefined_identifier;
2808 /* Create all the predefined identifiers. */
2810 static void
2811 initialize_predefined_identifiers (void)
2813 const predefined_identifier *pid;
2815 /* A table of identifiers to create at startup. */
2816 static const predefined_identifier predefined_identifiers[] = {
2817 { "C++", &lang_name_cplusplus, 0 },
2818 { "C", &lang_name_c, 0 },
2819 { "Java", &lang_name_java, 0 },
2820 { CTOR_NAME, &ctor_identifier, 1 },
2821 { "__base_ctor", &base_ctor_identifier, 1 },
2822 { "__comp_ctor", &complete_ctor_identifier, 1 },
2823 { DTOR_NAME, &dtor_identifier, 1 },
2824 { "__comp_dtor", &complete_dtor_identifier, 1 },
2825 { "__base_dtor", &base_dtor_identifier, 1 },
2826 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
2827 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
2828 { "nelts", &nelts_identifier, 0 },
2829 { THIS_NAME, &this_identifier, 0 },
2830 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
2831 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
2832 { "_vptr", &vptr_identifier, 0 },
2833 { "__vtt_parm", &vtt_parm_identifier, 0 },
2834 { "::", &global_scope_name, 0 },
2835 { "std", &std_identifier, 0 },
2836 { NULL, NULL, 0 }
2839 for (pid = predefined_identifiers; pid->name; ++pid)
2841 *pid->node = get_identifier (pid->name);
2842 if (pid->ctor_or_dtor_p)
2843 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2847 /* Create the predefined scalar types of C,
2848 and some nodes representing standard constants (0, 1, (void *)0).
2849 Initialize the global binding level.
2850 Make definitions for built-in primitive functions. */
2852 void
2853 cxx_init_decl_processing (void)
2855 tree void_ftype;
2856 tree void_ftype_ptr;
2858 /* Create all the identifiers we need. */
2859 initialize_predefined_identifiers ();
2861 /* Create the global variables. */
2862 push_to_top_level ();
2864 current_function_decl = NULL_TREE;
2865 current_binding_level = NULL;
2866 /* Enter the global namespace. */
2867 my_friendly_assert (global_namespace == NULL_TREE, 375);
2868 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2869 void_type_node);
2870 begin_scope (sk_namespace, global_namespace);
2872 current_lang_name = NULL_TREE;
2874 /* Adjust various flags based on command-line settings. */
2875 if (!flag_permissive)
2876 flag_pedantic_errors = 1;
2877 if (!flag_no_inline)
2879 flag_inline_trees = 1;
2880 flag_no_inline = 1;
2882 if (flag_inline_functions)
2884 flag_inline_trees = 2;
2885 flag_inline_functions = 0;
2888 /* Force minimum function alignment if using the least significant
2889 bit of function pointers to store the virtual bit. */
2890 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
2891 && force_align_functions_log < 1)
2892 force_align_functions_log = 1;
2894 /* Initially, C. */
2895 current_lang_name = lang_name_c;
2897 build_common_tree_nodes (flag_signed_char);
2899 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
2900 TREE_TYPE (error_mark_list) = error_mark_node;
2902 /* Create the `std' namespace. */
2903 push_namespace (std_identifier);
2904 std_node = current_namespace;
2905 pop_namespace ();
2907 c_common_nodes_and_builtins ();
2909 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
2910 java_short_type_node = record_builtin_java_type ("__java_short", 16);
2911 java_int_type_node = record_builtin_java_type ("__java_int", 32);
2912 java_long_type_node = record_builtin_java_type ("__java_long", 64);
2913 java_float_type_node = record_builtin_java_type ("__java_float", -32);
2914 java_double_type_node = record_builtin_java_type ("__java_double", -64);
2915 java_char_type_node = record_builtin_java_type ("__java_char", -16);
2916 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
2918 integer_two_node = build_int_2 (2, 0);
2919 TREE_TYPE (integer_two_node) = integer_type_node;
2920 integer_three_node = build_int_2 (3, 0);
2921 TREE_TYPE (integer_three_node) = integer_type_node;
2923 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
2924 truthvalue_type_node = boolean_type_node;
2925 truthvalue_false_node = boolean_false_node;
2926 truthvalue_true_node = boolean_true_node;
2928 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
2930 #if 0
2931 record_builtin_type (RID_MAX, NULL, string_type_node);
2932 #endif
2934 delta_type_node = ptrdiff_type_node;
2935 vtable_index_type = ptrdiff_type_node;
2937 vtt_parm_type = build_pointer_type (const_ptr_type_node);
2938 void_ftype = build_function_type (void_type_node, void_list_node);
2939 void_ftype_ptr = build_function_type (void_type_node,
2940 tree_cons (NULL_TREE,
2941 ptr_type_node,
2942 void_list_node));
2943 void_ftype_ptr
2944 = build_exception_variant (void_ftype_ptr, empty_except_spec);
2946 /* C++ extensions */
2948 unknown_type_node = make_node (UNKNOWN_TYPE);
2949 record_unknown_type (unknown_type_node, "unknown type");
2951 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
2952 TREE_TYPE (unknown_type_node) = unknown_type_node;
2954 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
2955 result. */
2956 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
2957 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
2960 /* Make sure we get a unique function type, so we can give
2961 its pointer type a name. (This wins for gdb.) */
2962 tree vfunc_type = make_node (FUNCTION_TYPE);
2963 TREE_TYPE (vfunc_type) = integer_type_node;
2964 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
2965 layout_type (vfunc_type);
2967 vtable_entry_type = build_pointer_type (vfunc_type);
2969 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
2971 vtbl_type_node
2972 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
2973 layout_type (vtbl_type_node);
2974 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
2975 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
2976 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
2977 layout_type (vtbl_ptr_type_node);
2978 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
2980 push_namespace (get_identifier ("__cxxabiv1"));
2981 abi_node = current_namespace;
2982 pop_namespace ();
2984 global_type_node = make_node (LANG_TYPE);
2985 record_unknown_type (global_type_node, "global type");
2987 /* Now, C++. */
2988 current_lang_name = lang_name_cplusplus;
2991 tree bad_alloc_id;
2992 tree bad_alloc_type_node;
2993 tree bad_alloc_decl;
2994 tree newtype, deltype;
2995 tree ptr_ftype_sizetype;
2997 push_namespace (std_identifier);
2998 bad_alloc_id = get_identifier ("bad_alloc");
2999 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3000 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3001 bad_alloc_decl
3002 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3003 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3004 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3005 pop_namespace ();
3007 ptr_ftype_sizetype
3008 = build_function_type (ptr_type_node,
3009 tree_cons (NULL_TREE,
3010 size_type_node,
3011 void_list_node));
3012 newtype = build_exception_variant
3013 (ptr_ftype_sizetype, add_exception_specifier
3014 (NULL_TREE, bad_alloc_type_node, -1));
3015 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3016 push_cp_library_fn (NEW_EXPR, newtype);
3017 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3018 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3019 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3022 abort_fndecl
3023 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3025 /* Perform other language dependent initializations. */
3026 init_class_processing ();
3027 init_search_processing ();
3028 init_rtti_processing ();
3030 if (flag_exceptions)
3031 init_exception_processing ();
3033 if (! supports_one_only ())
3034 flag_weak = 0;
3036 make_fname_decl = cp_make_fname_decl;
3037 start_fname_decls ();
3039 /* Show we use EH for cleanups. */
3040 if (flag_exceptions)
3041 using_eh_for_cleanups ();
3044 /* Generate an initializer for a function naming variable from
3045 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3046 filled in with the type of the init. */
3048 tree
3049 cp_fname_init (const char* name, tree *type_p)
3051 tree domain = NULL_TREE;
3052 tree type;
3053 tree init = NULL_TREE;
3054 size_t length = 0;
3056 if (name)
3058 length = strlen (name);
3059 domain = build_index_type (size_int (length));
3060 init = build_string (length + 1, name);
3063 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3064 type = build_cplus_array_type (type, domain);
3066 *type_p = type;
3068 if (init)
3069 TREE_TYPE (init) = type;
3070 else
3071 init = error_mark_node;
3073 return init;
3076 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3077 decl, NAME is the initialization string and TYPE_DEP indicates whether
3078 NAME depended on the type of the function. We make use of that to detect
3079 __PRETTY_FUNCTION__ inside a template fn. This is being done
3080 lazily at the point of first use, so we mustn't push the decl now. */
3082 static tree
3083 cp_make_fname_decl (tree id, int type_dep)
3085 const char *const name = (type_dep && processing_template_decl
3086 ? NULL : fname_as_string (type_dep));
3087 tree type;
3088 tree init = cp_fname_init (name, &type);
3089 tree decl = build_decl (VAR_DECL, id, type);
3091 /* As we're using pushdecl_with_scope, we must set the context. */
3092 DECL_CONTEXT (decl) = current_function_decl;
3093 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3095 TREE_STATIC (decl) = 1;
3096 TREE_READONLY (decl) = 1;
3097 DECL_ARTIFICIAL (decl) = 1;
3098 DECL_INITIAL (decl) = init;
3100 TREE_USED (decl) = 1;
3102 if (current_function_decl)
3104 struct cp_binding_level *b = current_binding_level;
3105 while (b->level_chain->kind != sk_function_parms)
3106 b = b->level_chain;
3107 pushdecl_with_scope (decl, b);
3108 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
3110 else
3111 pushdecl_top_level_and_finish (decl, init);
3113 return decl;
3116 /* Make a definition for a builtin function named NAME in the current
3117 namespace, whose data type is TYPE and whose context is CONTEXT.
3118 TYPE should be a function type with argument types.
3120 CLASS and CODE tell later passes how to compile calls to this function.
3121 See tree.h for possible values.
3123 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3124 the name to be called if we can't opencode the function.
3125 If ATTRS is nonzero, use that for the function's attribute
3126 list. */
3128 static tree
3129 builtin_function_1 (const char* name,
3130 tree type,
3131 tree context,
3132 int code,
3133 enum built_in_class class,
3134 const char* libname,
3135 tree attrs)
3137 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3138 DECL_BUILT_IN_CLASS (decl) = class;
3139 DECL_FUNCTION_CODE (decl) = code;
3140 DECL_CONTEXT (decl) = context;
3142 pushdecl (decl);
3144 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3145 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3146 function in the namespace. */
3147 if (libname)
3148 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3149 make_decl_rtl (decl, NULL);
3151 /* Warn if a function in the namespace for users
3152 is used without an occasion to consider it declared. */
3153 if (name[0] != '_' || name[1] != '_')
3154 DECL_ANTICIPATED (decl) = 1;
3156 /* Possibly apply some default attributes to this built-in function. */
3157 if (attrs)
3158 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3159 else
3160 decl_attributes (&decl, NULL_TREE, 0);
3162 return decl;
3165 /* Entry point for the benefit of c_common_nodes_and_builtins.
3167 Make a definition for a builtin function named NAME and whose data type
3168 is TYPE. TYPE should be a function type with argument types. This
3169 function places the anticipated declaration in the global namespace
3170 and additionally in the std namespace if appropriate.
3172 CLASS and CODE tell later passes how to compile calls to this function.
3173 See tree.h for possible values.
3175 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3176 the name to be called if we can't opencode the function.
3178 If ATTRS is nonzero, use that for the function's attribute
3179 list. */
3181 tree
3182 builtin_function (const char* name,
3183 tree type,
3184 int code,
3185 enum built_in_class class,
3186 const char* libname,
3187 tree attrs)
3189 /* All builtins that don't begin with an '_' should additionally
3190 go in the 'std' namespace. */
3191 if (name[0] != '_')
3193 push_namespace (std_identifier);
3194 builtin_function_1 (name, type, std_node, code, class, libname, attrs);
3195 pop_namespace ();
3198 return builtin_function_1 (name, type, NULL_TREE, code,
3199 class, libname, attrs);
3202 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3203 function. Not called directly. */
3205 static tree
3206 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3208 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3209 DECL_EXTERNAL (fn) = 1;
3210 TREE_PUBLIC (fn) = 1;
3211 DECL_ARTIFICIAL (fn) = 1;
3212 TREE_NOTHROW (fn) = 1;
3213 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3214 SET_DECL_LANGUAGE (fn, lang_c);
3215 return fn;
3218 /* Returns the _DECL for a library function with C linkage.
3219 We assume that such functions never throw; if this is incorrect,
3220 callers should unset TREE_NOTHROW. */
3222 tree
3223 build_library_fn (tree name, tree type)
3225 return build_library_fn_1 (name, ERROR_MARK, type);
3228 /* Returns the _DECL for a library function with C++ linkage. */
3230 static tree
3231 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3233 tree fn = build_library_fn_1 (name, operator_code, type);
3234 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3235 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3236 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3237 set_mangled_name_for_decl (fn);
3238 return fn;
3241 /* Like build_library_fn, but takes a C string instead of an
3242 IDENTIFIER_NODE. */
3244 tree
3245 build_library_fn_ptr (const char* name, tree type)
3247 return build_library_fn (get_identifier (name), type);
3250 /* Like build_cp_library_fn, but takes a C string instead of an
3251 IDENTIFIER_NODE. */
3253 tree
3254 build_cp_library_fn_ptr (const char* name, tree type)
3256 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3259 /* Like build_library_fn, but also pushes the function so that we will
3260 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3262 tree
3263 push_library_fn (tree name, tree type)
3265 tree fn = build_library_fn (name, type);
3266 pushdecl_top_level (fn);
3267 return fn;
3270 /* Like build_cp_library_fn, but also pushes the function so that it
3271 will be found by normal lookup. */
3273 static tree
3274 push_cp_library_fn (enum tree_code operator_code, tree type)
3276 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3277 operator_code,
3278 type);
3279 pushdecl (fn);
3280 return fn;
3283 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3284 a FUNCTION_TYPE. */
3286 tree
3287 push_void_library_fn (tree name, tree parmtypes)
3289 tree type = build_function_type (void_type_node, parmtypes);
3290 return push_library_fn (name, type);
3293 /* Like push_library_fn, but also note that this function throws
3294 and does not return. Used for __throw_foo and the like. */
3296 tree
3297 push_throw_library_fn (tree name, tree type)
3299 tree fn = push_library_fn (name, type);
3300 TREE_THIS_VOLATILE (fn) = 1;
3301 TREE_NOTHROW (fn) = 0;
3302 return fn;
3305 /* When we call finish_struct for an anonymous union, we create
3306 default copy constructors and such. But, an anonymous union
3307 shouldn't have such things; this function undoes the damage to the
3308 anonymous union type T.
3310 (The reason that we create the synthesized methods is that we don't
3311 distinguish `union { int i; }' from `typedef union { int i; } U'.
3312 The first is an anonymous union; the second is just an ordinary
3313 union type.) */
3315 void
3316 fixup_anonymous_aggr (tree t)
3318 tree *q;
3320 /* Wipe out memory of synthesized methods. */
3321 TYPE_HAS_CONSTRUCTOR (t) = 0;
3322 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3323 TYPE_HAS_INIT_REF (t) = 0;
3324 TYPE_HAS_CONST_INIT_REF (t) = 0;
3325 TYPE_HAS_ASSIGN_REF (t) = 0;
3326 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3328 /* Splice the implicitly generated functions out of the TYPE_METHODS
3329 list. */
3330 q = &TYPE_METHODS (t);
3331 while (*q)
3333 if (DECL_ARTIFICIAL (*q))
3334 *q = TREE_CHAIN (*q);
3335 else
3336 q = &TREE_CHAIN (*q);
3339 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3340 if (TYPE_METHODS (t))
3341 error ("%Jan anonymous union cannot have function members",
3342 TYPE_MAIN_DECL (t));
3344 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3345 assignment operators (because they cannot have these methods themselves).
3346 For anonymous unions this is already checked because they are not allowed
3347 in any union, otherwise we have to check it. */
3348 if (TREE_CODE (t) != UNION_TYPE)
3350 tree field, type;
3352 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3353 if (TREE_CODE (field) == FIELD_DECL)
3355 type = TREE_TYPE (field);
3356 if (CLASS_TYPE_P (type))
3358 if (TYPE_NEEDS_CONSTRUCTING (type))
3359 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
3360 field);
3361 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3362 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
3363 field);
3364 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3365 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
3366 field);
3372 /* Make sure that a declaration with no declarator is well-formed, i.e.
3373 just declares a tagged type or anonymous union.
3375 Returns the type declared; or NULL_TREE if none. */
3377 tree
3378 check_tag_decl (tree declspecs)
3380 int found_type = 0;
3381 int saw_friend = 0;
3382 int saw_typedef = 0;
3383 tree ob_modifier = NULL_TREE;
3384 tree link;
3385 /* If a class, struct, or enum type is declared by the DECLSPECS
3386 (i.e, if a class-specifier, enum-specifier, or non-typename
3387 elaborated-type-specifier appears in the DECLSPECS),
3388 DECLARED_TYPE is set to the corresponding type. */
3389 tree declared_type = NULL_TREE;
3390 bool error_p = false;
3392 for (link = declspecs; link; link = TREE_CHAIN (link))
3394 tree value = TREE_VALUE (link);
3396 if (TYPE_P (value) || TREE_CODE (value) == TYPE_DECL
3397 || (TREE_CODE (value) == IDENTIFIER_NODE
3398 && is_typename_at_global_scope (value)))
3400 ++found_type;
3402 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
3404 if (! in_system_header)
3405 pedwarn ("redeclaration of C++ built-in type `%T'", value);
3406 return NULL_TREE;
3409 if (TYPE_P (value)
3410 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
3411 || TREE_CODE (value) == ENUMERAL_TYPE))
3413 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
3414 declared_type = value;
3417 else if (value == ridpointers[(int) RID_TYPEDEF])
3418 saw_typedef = 1;
3419 else if (value == ridpointers[(int) RID_FRIEND])
3421 if (current_class_type == NULL_TREE
3422 || current_scope () != current_class_type)
3423 ob_modifier = value;
3424 else
3425 saw_friend = 1;
3427 else if (value == ridpointers[(int) RID_STATIC]
3428 || value == ridpointers[(int) RID_EXTERN]
3429 || value == ridpointers[(int) RID_AUTO]
3430 || value == ridpointers[(int) RID_REGISTER]
3431 || value == ridpointers[(int) RID_INLINE]
3432 || value == ridpointers[(int) RID_VIRTUAL]
3433 || value == ridpointers[(int) RID_CONST]
3434 || value == ridpointers[(int) RID_VOLATILE]
3435 || value == ridpointers[(int) RID_EXPLICIT]
3436 || value == ridpointers[(int) RID_THREAD])
3437 ob_modifier = value;
3438 else if (value == error_mark_node)
3439 error_p = true;
3442 if (found_type > 1)
3443 error ("multiple types in one declaration");
3445 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3446 pedwarn ("declaration does not declare anything");
3447 /* Check for an anonymous union. */
3448 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3449 && TYPE_ANONYMOUS_P (declared_type))
3451 /* 7/3 In a simple-declaration, the optional init-declarator-list
3452 can be omitted only when declaring a class (clause 9) or
3453 enumeration (7.2), that is, when the decl-specifier-seq contains
3454 either a class-specifier, an elaborated-type-specifier with
3455 a class-key (9.1), or an enum-specifier. In these cases and
3456 whenever a class-specifier or enum-specifier is present in the
3457 decl-specifier-seq, the identifiers in these specifiers are among
3458 the names being declared by the declaration (as class-name,
3459 enum-names, or enumerators, depending on the syntax). In such
3460 cases, and except for the declaration of an unnamed bit-field (9.6),
3461 the decl-specifier-seq shall introduce one or more names into the
3462 program, or shall redeclare a name introduced by a previous
3463 declaration. [Example:
3464 enum { }; // ill-formed
3465 typedef class { }; // ill-formed
3466 --end example] */
3467 if (saw_typedef)
3469 error ("missing type-name in typedef-declaration");
3470 return NULL_TREE;
3472 /* Anonymous unions are objects, so they can have specifiers. */;
3473 SET_ANON_AGGR_TYPE_P (declared_type);
3475 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3476 && !in_system_header)
3477 pedwarn ("ISO C++ prohibits anonymous structs");
3480 else if (ob_modifier)
3482 if (ob_modifier == ridpointers[(int) RID_INLINE]
3483 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
3484 error ("`%D' can only be specified for functions", ob_modifier);
3485 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
3486 error ("`%D' can only be specified inside a class", ob_modifier);
3487 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
3488 error ("`%D' can only be specified for constructors",
3489 ob_modifier);
3490 else
3491 error ("`%D' can only be specified for objects and functions",
3492 ob_modifier);
3495 return declared_type;
3498 /* Called when a declaration is seen that contains no names to declare.
3499 If its type is a reference to a structure, union or enum inherited
3500 from a containing scope, shadow that tag name for the current scope
3501 with a forward reference.
3502 If its type defines a new named structure or union
3503 or defines an enum, it is valid but we need not do anything here.
3504 Otherwise, it is an error.
3506 C++: may have to grok the declspecs to learn about static,
3507 complain for anonymous unions.
3509 Returns the TYPE declared -- or NULL_TREE if none. */
3511 tree
3512 shadow_tag (tree declspecs)
3514 tree t = check_tag_decl (declspecs);
3516 if (!t)
3517 return NULL_TREE;
3519 maybe_process_partial_specialization (t);
3521 /* This is where the variables in an anonymous union are
3522 declared. An anonymous union declaration looks like:
3523 union { ... } ;
3524 because there is no declarator after the union, the parser
3525 sends that declaration here. */
3526 if (ANON_AGGR_TYPE_P (t))
3528 fixup_anonymous_aggr (t);
3530 if (TYPE_FIELDS (t))
3532 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
3533 NULL);
3534 finish_anon_union (decl);
3538 return t;
3541 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3543 tree
3544 groktypename (tree typename)
3546 tree specs, attrs;
3547 tree type;
3548 if (TREE_CODE (typename) != TREE_LIST)
3549 return typename;
3550 split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
3551 type = grokdeclarator (TREE_VALUE (typename), specs,
3552 TYPENAME, 0, &attrs);
3553 if (attrs)
3554 cplus_decl_attributes (&type, attrs, 0);
3555 return type;
3558 /* Decode a declarator in an ordinary declaration or data definition.
3559 This is called as soon as the type information and variable name
3560 have been parsed, before parsing the initializer if any.
3561 Here we create the ..._DECL node, fill in its type,
3562 and put it on the list of decls for the current context.
3563 The ..._DECL node is returned as the value.
3565 Exception: for arrays where the length is not specified,
3566 the type is left null, to be filled in by `cp_finish_decl'.
3568 Function definitions do not come here; they go to start_function
3569 instead. However, external and forward declarations of functions
3570 do go through here. Structure field declarations are done by
3571 grokfield and not through here. */
3573 tree
3574 start_decl (tree declarator,
3575 tree declspecs,
3576 int initialized,
3577 tree attributes,
3578 tree prefix_attributes)
3580 tree decl;
3581 tree type, tem;
3582 tree context;
3584 /* This should only be done once on the top most decl. */
3585 if (have_extern_spec)
3587 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
3588 declspecs);
3589 have_extern_spec = false;
3592 /* An object declared as __attribute__((deprecated)) suppresses
3593 warnings of uses of other deprecated items. */
3594 if (lookup_attribute ("deprecated", attributes))
3595 deprecated_state = DEPRECATED_SUPPRESS;
3597 attributes = chainon (attributes, prefix_attributes);
3599 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3600 &attributes);
3602 deprecated_state = DEPRECATED_NORMAL;
3604 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
3605 return NULL_TREE;
3607 type = TREE_TYPE (decl);
3609 if (type == error_mark_node)
3610 return NULL_TREE;
3612 context = DECL_CONTEXT (decl);
3614 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
3615 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
3617 /* When parsing the initializer, lookup should use the object's
3618 namespace. */
3619 push_decl_namespace (context);
3622 /* We are only interested in class contexts, later. */
3623 if (context && TREE_CODE (context) == NAMESPACE_DECL)
3624 context = NULL_TREE;
3626 if (initialized)
3627 /* Is it valid for this decl to have an initializer at all?
3628 If not, set INITIALIZED to zero, which will indirectly
3629 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3630 switch (TREE_CODE (decl))
3632 case TYPE_DECL:
3633 error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
3634 initialized = 0;
3635 break;
3637 case FUNCTION_DECL:
3638 error ("function `%#D' is initialized like a variable", decl);
3639 initialized = 0;
3640 break;
3642 default:
3643 break;
3646 if (initialized)
3648 if (! toplevel_bindings_p ()
3649 && DECL_EXTERNAL (decl))
3650 warning ("declaration of `%#D' has `extern' and is initialized",
3651 decl);
3652 DECL_EXTERNAL (decl) = 0;
3653 if (toplevel_bindings_p ())
3654 TREE_STATIC (decl) = 1;
3656 /* Tell `pushdecl' this is an initialized decl
3657 even though we don't yet have the initializer expression.
3658 Also tell `cp_finish_decl' it may store the real initializer. */
3659 DECL_INITIAL (decl) = error_mark_node;
3662 /* Set attributes here so if duplicate decl, will have proper attributes. */
3663 cplus_decl_attributes (&decl, attributes, 0);
3665 /* If #pragma weak was used, mark the decl weak now. */
3666 if (global_scope_p (current_binding_level))
3667 maybe_apply_pragma_weak (decl);
3669 if (TREE_CODE (decl) == FUNCTION_DECL
3670 && DECL_DECLARED_INLINE_P (decl)
3671 && DECL_UNINLINABLE (decl)
3672 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3673 warning ("%Jinline function '%D' given attribute noinline", decl, decl);
3675 if (context && COMPLETE_TYPE_P (complete_type (context)))
3677 push_nested_class (context);
3679 if (TREE_CODE (decl) == VAR_DECL)
3681 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3682 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3683 error ("`%#D' is not a static member of `%#T'", decl, context);
3684 else
3686 if (DECL_CONTEXT (field) != context)
3688 if (!same_type_p (DECL_CONTEXT (field), context))
3689 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
3690 DECL_CONTEXT (field), DECL_NAME (decl),
3691 context, DECL_NAME (decl));
3692 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3694 /* Static data member are tricky; an in-class initialization
3695 still doesn't provide a definition, so the in-class
3696 declaration will have DECL_EXTERNAL set, but will have an
3697 initialization. Thus, duplicate_decls won't warn
3698 about this situation, and so we check here. */
3699 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
3700 error ("duplicate initialization of %D", decl);
3701 if (duplicate_decls (decl, field))
3702 decl = field;
3705 else
3707 tree field = check_classfn (context, decl,
3708 (processing_template_decl
3709 > template_class_depth (context))
3710 ? current_template_parms
3711 : NULL_TREE);
3712 if (field && duplicate_decls (decl, field))
3713 decl = field;
3716 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3717 DECL_IN_AGGR_P (decl) = 0;
3718 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3719 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
3721 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3722 /* [temp.expl.spec] An explicit specialization of a static data
3723 member of a template is a definition if the declaration
3724 includes an initializer; otherwise, it is a declaration.
3726 We check for processing_specialization so this only applies
3727 to the new specialization syntax. */
3728 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
3729 DECL_EXTERNAL (decl) = 1;
3732 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3733 pedwarn ("declaration of `%#D' outside of class is not definition",
3734 decl);
3737 /* Enter this declaration into the symbol table. */
3738 tem = maybe_push_decl (decl);
3740 if (processing_template_decl)
3741 tem = push_template_decl (tem);
3742 if (tem == error_mark_node)
3743 return error_mark_node;
3745 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3746 /* Tell the back-end to use or not use .common as appropriate. If we say
3747 -fconserve-space, we want this to save .data space, at the expense of
3748 wrong semantics. If we say -fno-conserve-space, we want this to
3749 produce errors about redefs; to do this we force variables into the
3750 data segment. */
3751 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3752 || !DECL_THREAD_LOCAL (tem))
3753 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3754 #endif
3756 if (! processing_template_decl)
3757 start_decl_1 (tem);
3759 return tem;
3762 void
3763 start_decl_1 (tree decl)
3765 tree type = TREE_TYPE (decl);
3766 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3768 if (type == error_mark_node)
3769 return;
3771 if (initialized)
3772 /* Is it valid for this decl to have an initializer at all?
3773 If not, set INITIALIZED to zero, which will indirectly
3774 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3776 /* Don't allow initializations for incomplete types except for
3777 arrays which might be completed by the initialization. */
3778 if (COMPLETE_TYPE_P (complete_type (type)))
3779 ; /* A complete type is ok. */
3780 else if (TREE_CODE (type) != ARRAY_TYPE)
3782 error ("variable `%#D' has initializer but incomplete type",
3783 decl);
3784 initialized = 0;
3785 type = TREE_TYPE (decl) = error_mark_node;
3787 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3789 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3790 error ("elements of array `%#D' have incomplete type", decl);
3791 /* else we already gave an error in start_decl. */
3792 initialized = 0;
3796 if (!initialized
3797 && TREE_CODE (decl) != TYPE_DECL
3798 && TREE_CODE (decl) != TEMPLATE_DECL
3799 && type != error_mark_node
3800 && IS_AGGR_TYPE (type)
3801 && ! DECL_EXTERNAL (decl))
3803 if ((! processing_template_decl || ! uses_template_parms (type))
3804 && !COMPLETE_TYPE_P (complete_type (type)))
3806 error ("aggregate `%#D' has incomplete type and cannot be defined",
3807 decl);
3808 /* Change the type so that assemble_variable will give
3809 DECL an rtl we can live with: (mem (const_int 0)). */
3810 type = TREE_TYPE (decl) = error_mark_node;
3812 else
3814 /* If any base type in the hierarchy of TYPE needs a constructor,
3815 then we set initialized to 1. This way any nodes which are
3816 created for the purposes of initializing this aggregate
3817 will live as long as it does. This is necessary for global
3818 aggregates which do not have their initializers processed until
3819 the end of the file. */
3820 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3824 if (! initialized)
3825 DECL_INITIAL (decl) = NULL_TREE;
3827 /* Create a new scope to hold this declaration if necessary.
3828 Whether or not a new scope is necessary cannot be determined
3829 until after the type has been completed; if the type is a
3830 specialization of a class template it is not until after
3831 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3832 will be set correctly. */
3833 maybe_push_cleanup_level (type);
3836 /* Handle initialization of references. DECL, TYPE, and INIT have the
3837 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3838 but will be set to a new CLEANUP_STMT if a temporary is created
3839 that must be destroyed subsequently.
3841 Returns an initializer expression to use to initialize DECL, or
3842 NULL if the initialization can be performed statically.
3844 Quotes on semantics can be found in ARM 8.4.3. */
3846 static tree
3847 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3849 tree tmp;
3851 if (init == NULL_TREE)
3853 if ((DECL_LANG_SPECIFIC (decl) == 0
3854 || DECL_IN_AGGR_P (decl) == 0)
3855 && ! DECL_THIS_EXTERN (decl))
3856 error ("`%D' declared as reference but not initialized", decl);
3857 return NULL_TREE;
3860 if (TREE_CODE (init) == CONSTRUCTOR)
3862 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
3863 return NULL_TREE;
3866 if (TREE_CODE (init) == TREE_LIST)
3867 init = build_x_compound_expr_from_list (init, "initializer");
3869 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
3870 init = convert_from_reference (init);
3872 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3873 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3874 /* Note: default conversion is only called in very special cases. */
3875 init = decay_conversion (init);
3877 /* Convert INIT to the reference type TYPE. This may involve the
3878 creation of a temporary, whose lifetime must be the same as that
3879 of the reference. If so, a DECL_STMT for the temporary will be
3880 added just after the DECL_STMT for DECL. That's why we don't set
3881 DECL_INITIAL for local references (instead assigning to them
3882 explicitly); we need to allow the temporary to be initialized
3883 first. */
3884 tmp = initialize_reference (type, init, decl, cleanup);
3886 if (tmp == error_mark_node)
3887 return NULL_TREE;
3888 else if (tmp == NULL_TREE)
3890 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
3891 return NULL_TREE;
3894 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3895 return tmp;
3897 DECL_INITIAL (decl) = tmp;
3899 return NULL_TREE;
3902 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3903 array until we finish parsing the initializer. If that's the
3904 situation we're in, update DECL accordingly. */
3906 static void
3907 maybe_deduce_size_from_array_init (tree decl, tree init)
3909 tree type = TREE_TYPE (decl);
3911 if (TREE_CODE (type) == ARRAY_TYPE
3912 && TYPE_DOMAIN (type) == NULL_TREE
3913 && TREE_CODE (decl) != TYPE_DECL)
3915 /* do_default is really a C-ism to deal with tentative definitions.
3916 But let's leave it here to ease the eventual merge. */
3917 int do_default = !DECL_EXTERNAL (decl);
3918 tree initializer = init ? init : DECL_INITIAL (decl);
3919 int failure = complete_array_type (type, initializer, do_default);
3921 if (failure == 1)
3922 error ("initializer fails to determine size of `%D'", decl);
3924 if (failure == 2)
3926 if (do_default)
3927 error ("array size missing in `%D'", decl);
3928 /* If a `static' var's size isn't known, make it extern as
3929 well as static, so it does not get allocated. If it's not
3930 `static', then don't mark it extern; finish_incomplete_decl
3931 will give it a default size and it will get allocated. */
3932 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3933 DECL_EXTERNAL (decl) = 1;
3936 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
3937 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
3938 integer_zero_node))
3939 error ("zero-size array `%D'", decl);
3941 layout_decl (decl, 0);
3945 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
3946 any appropriate error messages regarding the layout. */
3948 static void
3949 layout_var_decl (tree decl)
3951 tree type = TREE_TYPE (decl);
3952 #if 0
3953 tree ttype = target_type (type);
3954 #endif
3956 /* If we haven't already layed out this declaration, do so now.
3957 Note that we must not call complete type for an external object
3958 because it's type might involve templates that we are not
3959 supposed to instantiate yet. (And it's perfectly valid to say
3960 `extern X x' for some incomplete type `X'.) */
3961 if (!DECL_EXTERNAL (decl))
3962 complete_type (type);
3963 if (!DECL_SIZE (decl)
3964 && TREE_TYPE (decl) != error_mark_node
3965 && (COMPLETE_TYPE_P (type)
3966 || (TREE_CODE (type) == ARRAY_TYPE
3967 && !TYPE_DOMAIN (type)
3968 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
3969 layout_decl (decl, 0);
3971 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
3973 /* An automatic variable with an incomplete type: that is an error.
3974 Don't talk about array types here, since we took care of that
3975 message in grokdeclarator. */
3976 error ("storage size of `%D' isn't known", decl);
3977 TREE_TYPE (decl) = error_mark_node;
3979 #if 0
3980 /* Keep this code around in case we later want to control debug info
3981 based on whether a type is "used". (jason 1999-11-11) */
3983 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
3984 /* Let debugger know it should output info for this type. */
3985 note_debug_info_needed (ttype);
3987 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
3988 note_debug_info_needed (DECL_CONTEXT (decl));
3989 #endif
3991 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3992 && DECL_SIZE (decl) != NULL_TREE
3993 && ! TREE_CONSTANT (DECL_SIZE (decl)))
3995 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3996 constant_expression_warning (DECL_SIZE (decl));
3997 else
3998 error ("storage size of `%D' isn't constant", decl);
4001 if (TREE_STATIC (decl)
4002 && !DECL_ARTIFICIAL (decl)
4003 && current_function_decl
4004 && DECL_CONTEXT (decl) == current_function_decl)
4005 push_local_name (decl);
4008 /* If a local static variable is declared in an inline function, or if
4009 we have a weak definition, we must endeavor to create only one
4010 instance of the variable at link-time. */
4012 static void
4013 maybe_commonize_var (tree decl)
4015 /* Static data in a function with comdat linkage also has comdat
4016 linkage. */
4017 if (TREE_STATIC (decl)
4018 /* Don't mess with __FUNCTION__. */
4019 && ! DECL_ARTIFICIAL (decl)
4020 && DECL_FUNCTION_SCOPE_P (decl)
4021 /* Unfortunately, import_export_decl has not always been called
4022 before the function is processed, so we cannot simply check
4023 DECL_COMDAT. */
4024 && (DECL_COMDAT (DECL_CONTEXT (decl))
4025 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4026 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4027 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4029 if (flag_weak)
4031 /* With weak symbols, we simply make the variable COMDAT;
4032 that will cause copies in multiple translations units to
4033 be merged. */
4034 comdat_linkage (decl);
4036 else
4038 if (DECL_INITIAL (decl) == NULL_TREE
4039 || DECL_INITIAL (decl) == error_mark_node)
4041 /* Without weak symbols, we can use COMMON to merge
4042 uninitialized variables. */
4043 TREE_PUBLIC (decl) = 1;
4044 DECL_COMMON (decl) = 1;
4046 else
4048 /* While for initialized variables, we must use internal
4049 linkage -- which means that multiple copies will not
4050 be merged. */
4051 TREE_PUBLIC (decl) = 0;
4052 DECL_COMMON (decl) = 0;
4053 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
4054 warning ("%J you can work around this by removing the initializer",
4055 decl);
4059 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4060 /* Set it up again; we might have set DECL_INITIAL since the last
4061 time. */
4062 comdat_linkage (decl);
4065 /* Issue an error message if DECL is an uninitialized const variable. */
4067 static void
4068 check_for_uninitialized_const_var (tree decl)
4070 tree type = TREE_TYPE (decl);
4072 /* ``Unless explicitly declared extern, a const object does not have
4073 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4074 7.1.6 */
4075 if (TREE_CODE (decl) == VAR_DECL
4076 && TREE_CODE (type) != REFERENCE_TYPE
4077 && CP_TYPE_CONST_P (type)
4078 && !TYPE_NEEDS_CONSTRUCTING (type)
4079 && !DECL_INITIAL (decl))
4080 error ("uninitialized const `%D'", decl);
4083 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4084 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4085 initialized. If there are no more such fields, the return value
4086 will be NULL. */
4088 static tree
4089 next_initializable_field (tree field)
4091 while (field
4092 && (TREE_CODE (field) != FIELD_DECL
4093 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4094 || DECL_ARTIFICIAL (field)))
4095 field = TREE_CHAIN (field);
4097 return field;
4100 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4101 brace-enclosed aggregate initializer.
4103 *INITP is one of a list of initializers describing a brace-enclosed
4104 initializer for an entity of the indicated aggregate TYPE. It may
4105 not presently match the shape of the TYPE; for example:
4107 struct S { int a; int b; };
4108 struct S a[] = { 1, 2, 3, 4 };
4110 Here *INITP will point to TREE_LIST of four elements, rather than a
4111 list of two elements, each itself a list of two elements. This
4112 routine transforms INIT from the former form into the latter. The
4113 revised initializer is returned. */
4115 static tree
4116 reshape_init (tree type, tree *initp)
4118 tree inits;
4119 tree old_init;
4120 tree old_init_value;
4121 tree new_init;
4122 bool brace_enclosed_p;
4124 old_init = *initp;
4125 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4126 ? TREE_VALUE (*initp) : old_init);
4128 my_friendly_assert (old_init_value, 20030723);
4130 /* If the initializer is brace-enclosed, pull initializers from the
4131 enclosed elements. Advance past the brace-enclosed initializer
4132 now. */
4133 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4134 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value))
4136 *initp = TREE_CHAIN (old_init);
4137 TREE_CHAIN (old_init) = NULL_TREE;
4138 inits = CONSTRUCTOR_ELTS (old_init_value);
4139 initp = &inits;
4140 brace_enclosed_p = true;
4142 else
4144 inits = NULL_TREE;
4145 brace_enclosed_p = false;
4148 /* A non-aggregate type is always initialized with a single
4149 initializer. */
4150 if (!CP_AGGREGATE_TYPE_P (type))
4152 *initp = TREE_CHAIN (old_init);
4153 TREE_CHAIN (old_init) = NULL_TREE;
4154 /* It is invalid to initialize a non-aggregate type with a
4155 brace-enclosed initializer. */
4156 if (brace_enclosed_p)
4158 error ("brace-enclosed initializer used to initialize `%T'",
4159 type);
4160 if (TREE_CODE (old_init) == TREE_LIST)
4161 TREE_VALUE (old_init) = error_mark_node;
4162 else
4163 old_init = error_mark_node;
4166 return old_init;
4169 /* [dcl.init.aggr]
4171 All implicit type conversions (clause _conv_) are considered when
4172 initializing the aggregate member with an initializer from an
4173 initializer-list. If the initializer can initialize a member,
4174 the member is initialized. Otherwise, if the member is itself a
4175 non-empty subaggregate, brace elision is assumed and the
4176 initializer is considered for the initialization of the first
4177 member of the subaggregate. */
4178 if (!brace_enclosed_p
4179 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4181 *initp = TREE_CHAIN (old_init);
4182 TREE_CHAIN (old_init) = NULL_TREE;
4183 return old_init;
4186 if (TREE_CODE (old_init_value) == STRING_CST
4187 && TREE_CODE (type) == ARRAY_TYPE
4188 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4190 /* [dcl.init.string]
4192 A char array (whether plain char, signed char, or unsigned char)
4193 can be initialized by a string-literal (optionally enclosed in
4194 braces); a wchar_t array can be initialized by a wide
4195 string-literal (optionally enclosed in braces). */
4196 new_init = old_init;
4197 /* Move past the initializer. */
4198 *initp = TREE_CHAIN (old_init);
4199 TREE_CHAIN (old_init) = NULL_TREE;
4201 else
4203 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4204 new_init = build_constructor (NULL_TREE, NULL_TREE);
4206 if (CLASS_TYPE_P (type))
4208 tree field;
4210 field = next_initializable_field (TYPE_FIELDS (type));
4212 if (!field)
4214 /* [dcl.init.aggr]
4216 An initializer for an aggregate member that is an
4217 empty class shall have the form of an empty
4218 initializer-list {}. */
4219 if (!brace_enclosed_p)
4221 error ("initializer for `%T' must be brace-enclosed",
4222 type);
4223 return error_mark_node;
4226 else
4228 /* Loop through the initializable fields, gathering
4229 initializers. */
4230 while (*initp)
4232 tree field_init;
4234 /* Handle designated initializers, as an extension. */
4235 if (TREE_PURPOSE (*initp))
4237 if (pedantic)
4238 pedwarn ("ISO C++ does not allow designated initializers");
4239 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4240 /*want_type=*/false);
4241 if (!field || TREE_CODE (field) != FIELD_DECL)
4242 error ("`%T' has no non-static data member named `%D'",
4243 type, TREE_PURPOSE (*initp));
4245 if (!field)
4246 break;
4248 field_init = reshape_init (TREE_TYPE (field), initp);
4249 if (field_init == error_mark_node)
4250 return error_mark_node;
4251 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4252 CONSTRUCTOR_ELTS (new_init) = field_init;
4253 /* [dcl.init.aggr]
4255 When a union is initialized with a brace-enclosed
4256 initializer, the braces shall only contain an
4257 initializer for the first member of the union. */
4258 if (TREE_CODE (type) == UNION_TYPE)
4259 break;
4260 field = next_initializable_field (TREE_CHAIN (field));
4264 else if (TREE_CODE (type) == ARRAY_TYPE
4265 || TREE_CODE (type) == VECTOR_TYPE)
4267 tree index;
4268 tree max_index;
4270 /* If the bound of the array is known, take no more initializers
4271 than are allowed. */
4272 max_index = NULL_TREE;
4273 if (TREE_CODE (type) == ARRAY_TYPE)
4275 if (TYPE_DOMAIN (type))
4276 max_index = array_type_nelts (type);
4278 else
4280 /* For a vector, the representation type is a struct
4281 containing a single member which is an array of the
4282 appropriate size. */
4283 tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4284 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4285 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4288 /* Loop through the array elements, gathering initializers. */
4289 for (index = size_zero_node;
4290 *initp && (!max_index || !tree_int_cst_lt (max_index, index));
4291 index = size_binop (PLUS_EXPR, index, size_one_node))
4293 tree element_init;
4295 element_init = reshape_init (TREE_TYPE (type), initp);
4296 if (element_init == error_mark_node)
4297 return error_mark_node;
4298 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4299 CONSTRUCTOR_ELTS (new_init) = element_init;
4300 if (TREE_PURPOSE (element_init))
4302 tree next_index = TREE_PURPOSE (element_init);
4303 if (TREE_CODE (next_index) == IDENTIFIER_NODE)
4305 error ("name `%D' used in a GNU-style designated "
4306 "initializer for an array", next_index);
4307 TREE_PURPOSE (element_init) = NULL_TREE;
4309 else
4310 index = next_index;
4314 else
4315 abort ();
4317 /* The initializers were placed in reverse order in the
4318 CONSTRUCTOR. */
4319 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4321 if (TREE_CODE (old_init) == TREE_LIST)
4322 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4325 /* If this was a brace-enclosed initializer and all of the
4326 initializers were not used up, there is a problem. */
4327 if (brace_enclosed_p && *initp)
4328 error ("too many initializers for `%T'", type);
4330 return new_init;
4333 /* Verify INIT (the initializer for DECL), and record the
4334 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4335 grok_reference_init.
4337 If the return value is non-NULL, it is an expression that must be
4338 evaluated dynamically to initialize DECL. */
4340 static tree
4341 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4343 tree type = TREE_TYPE (decl);
4344 tree init_code = NULL;
4346 /* If `start_decl' didn't like having an initialization, ignore it now. */
4347 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4348 init = NULL_TREE;
4350 /* If an initializer is present, DECL_INITIAL has been
4351 error_mark_node, to indicate that an as-of-yet unevaluated
4352 initialization will occur. From now on, DECL_INITIAL reflects
4353 the static initialization -- if any -- of DECL. */
4354 DECL_INITIAL (decl) = NULL_TREE;
4356 /* Things that are going to be initialized need to have complete
4357 type. */
4358 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4360 if (type == error_mark_node)
4361 /* We will have already complained. */
4362 init = NULL_TREE;
4363 else if (init && COMPLETE_TYPE_P (type)
4364 && !TREE_CONSTANT (TYPE_SIZE (type)))
4366 error ("variable-sized object `%D' may not be initialized", decl);
4367 init = NULL_TREE;
4369 else if (TREE_CODE (type) == ARRAY_TYPE
4370 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4372 error ("elements of array `%#D' have incomplete type", decl);
4373 init = NULL_TREE;
4375 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4377 error ("`%D' has incomplete type", decl);
4378 TREE_TYPE (decl) = error_mark_node;
4379 init = NULL_TREE;
4382 if (TREE_CODE (decl) == CONST_DECL)
4384 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
4386 DECL_INITIAL (decl) = init;
4388 my_friendly_assert (init != NULL_TREE, 149);
4389 init = NULL_TREE;
4391 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4392 init = grok_reference_init (decl, type, init, cleanup);
4393 else if (init)
4395 if (TREE_CODE (init) == CONSTRUCTOR
4396 && BRACE_ENCLOSED_INITIALIZER_P (init))
4398 /* [dcl.init] paragraph 13,
4399 If T is a scalar type, then a declaration of the form
4400 T x = { a };
4401 is equivalent to
4402 T x = a;
4404 reshape_init will complain about the extra braces,
4405 and doesn't do anything useful in the case where TYPE is
4406 scalar, so just don't call it. */
4407 if (CP_AGGREGATE_TYPE_P (type))
4408 init = reshape_init (type, &init);
4410 if ((*targetm.vector_opaque_p) (type))
4412 error ("opaque vector types cannot be initialized");
4413 init = error_mark_node;
4417 /* If DECL has an array type without a specific bound, deduce the
4418 array size from the initializer. */
4419 maybe_deduce_size_from_array_init (decl, init);
4420 type = TREE_TYPE (decl);
4422 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4424 if (TREE_CODE (type) == ARRAY_TYPE)
4425 goto initialize_aggr;
4426 else if (TREE_CODE (init) == CONSTRUCTOR
4427 && BRACE_ENCLOSED_INITIALIZER_P (init))
4429 if (TYPE_NON_AGGREGATE_CLASS (type))
4431 error ("`%D' must be initialized by constructor, not by `{...}'",
4432 decl);
4433 init = error_mark_node;
4435 else
4436 goto dont_use_constructor;
4438 else
4440 int saved_stmts_are_full_exprs_p;
4442 initialize_aggr:
4443 saved_stmts_are_full_exprs_p = 0;
4444 if (building_stmt_tree ())
4446 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4447 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4449 init = build_aggr_init (decl, init, flags);
4450 if (building_stmt_tree ())
4451 current_stmt_tree ()->stmts_are_full_exprs_p =
4452 saved_stmts_are_full_exprs_p;
4453 return init;
4456 else
4458 dont_use_constructor:
4459 if (TREE_CODE (init) != TREE_VEC)
4461 init_code = store_init_value (decl, init);
4462 init = NULL;
4466 else if (DECL_EXTERNAL (decl))
4468 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4469 goto initialize_aggr;
4470 else if (IS_AGGR_TYPE (type))
4472 tree core_type = strip_array_types (type);
4474 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4475 error ("structure `%D' with uninitialized const members", decl);
4476 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4477 error ("structure `%D' with uninitialized reference members",
4478 decl);
4480 check_for_uninitialized_const_var (decl);
4482 else
4483 check_for_uninitialized_const_var (decl);
4485 if (init && init != error_mark_node)
4486 init_code = build (INIT_EXPR, type, decl, init);
4488 return init_code;
4491 /* If DECL is not a local variable, give it RTL. */
4493 static void
4494 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4496 int toplev = toplevel_bindings_p ();
4497 int defer_p;
4499 /* Handle non-variables up front. */
4500 if (TREE_CODE (decl) != VAR_DECL)
4502 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
4503 return;
4506 /* If we see a class member here, it should be a static data
4507 member. */
4508 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4510 my_friendly_assert (TREE_STATIC (decl), 19990828);
4511 /* An in-class declaration of a static data member should be
4512 external; it is only a declaration, and not a definition. */
4513 if (init == NULL_TREE)
4514 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
4517 /* Set the DECL_ASSEMBLER_NAME for the variable. */
4518 if (asmspec)
4520 change_decl_assembler_name (decl, get_identifier (asmspec));
4521 /* The `register' keyword, when used together with an
4522 asm-specification, indicates that the variable should be
4523 placed in a particular register. */
4524 if (DECL_REGISTER (decl))
4525 DECL_HARD_REGISTER (decl) = 1;
4528 /* We don't create any RTL for local variables. */
4529 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4530 return;
4532 /* We defer emission of local statics until the corresponding
4533 DECL_STMT is expanded. */
4534 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4536 /* We try to defer namespace-scope static constants so that they are
4537 not emitted into the object file unnecessarily. */
4538 if (!DECL_VIRTUAL_P (decl)
4539 && TREE_READONLY (decl)
4540 && DECL_INITIAL (decl) != NULL_TREE
4541 && DECL_INITIAL (decl) != error_mark_node
4542 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4543 && toplev
4544 && !TREE_PUBLIC (decl))
4546 /* Fool with the linkage of static consts according to #pragma
4547 interface. */
4548 if (!interface_unknown && !TREE_PUBLIC (decl))
4550 TREE_PUBLIC (decl) = 1;
4551 DECL_EXTERNAL (decl) = interface_only;
4554 defer_p = 1;
4556 /* Likewise for template instantiations. */
4557 else if (DECL_COMDAT (decl))
4558 defer_p = 1;
4560 /* If we're deferring the variable, we only need to make RTL if
4561 there's an ASMSPEC. Otherwise, we'll lazily create it later when
4562 we need it. (There's no way to lazily create RTL for things that
4563 have assembly specs because the information about the specifier
4564 isn't stored in the tree, yet) */
4565 if (defer_p && asmspec)
4566 make_decl_rtl (decl, asmspec);
4567 /* If we're not deferring, go ahead and assemble the variable. */
4568 else if (!defer_p)
4569 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
4572 /* Generate code to initialize DECL (a local variable). */
4574 static void
4575 initialize_local_var (tree decl, tree init)
4577 tree type = TREE_TYPE (decl);
4578 tree cleanup;
4580 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
4581 || TREE_CODE (decl) == RESULT_DECL,
4582 20021010);
4583 my_friendly_assert (!TREE_STATIC (decl), 20021010);
4585 if (DECL_SIZE (decl) == NULL_TREE)
4587 /* If we used it already as memory, it must stay in memory. */
4588 DECL_INITIAL (decl) = NULL_TREE;
4589 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4592 if (DECL_SIZE (decl) && type != error_mark_node)
4594 int already_used;
4596 /* Compute and store the initial value. */
4597 already_used = TREE_USED (decl) || TREE_USED (type);
4599 /* Perform the initialization. */
4600 if (init)
4602 int saved_stmts_are_full_exprs_p;
4604 my_friendly_assert (building_stmt_tree (), 20000906);
4605 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4606 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4607 finish_expr_stmt (init);
4608 current_stmt_tree ()->stmts_are_full_exprs_p =
4609 saved_stmts_are_full_exprs_p;
4612 /* Set this to 0 so we can tell whether an aggregate which was
4613 initialized was ever used. Don't do this if it has a
4614 destructor, so we don't complain about the 'resource
4615 allocation is initialization' idiom. Now set
4616 attribute((unused)) on types so decls of that type will be
4617 marked used. (see TREE_USED, above.) */
4618 if (TYPE_NEEDS_CONSTRUCTING (type)
4619 && ! already_used
4620 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4621 && DECL_NAME (decl))
4622 TREE_USED (decl) = 0;
4623 else if (already_used)
4624 TREE_USED (decl) = 1;
4627 /* Generate a cleanup, if necessary. */
4628 cleanup = cxx_maybe_build_cleanup (decl);
4629 if (DECL_SIZE (decl) && cleanup)
4630 finish_decl_cleanup (decl, cleanup);
4633 /* Finish processing of a declaration;
4634 install its line number and initial value.
4635 If the length of an array type is not known before,
4636 it must be determined now, from the initial value, or it is an error.
4638 INIT holds the value of an initializer that should be allowed to escape
4639 the normal rules.
4641 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4642 if the (init) syntax was used. */
4644 void
4645 cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
4647 tree type;
4648 tree ttype = NULL_TREE;
4649 tree cleanup;
4650 const char *asmspec = NULL;
4651 int was_readonly = 0;
4653 if (decl == error_mark_node)
4654 return;
4655 else if (! decl)
4657 if (init)
4658 error ("assignment (not initialization) in declaration");
4659 return;
4662 my_friendly_assert (TREE_CODE (decl) != RESULT_DECL, 20030619);
4664 /* Assume no cleanup is required. */
4665 cleanup = NULL_TREE;
4667 /* If a name was specified, get the string. */
4668 if (global_scope_p (current_binding_level))
4669 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4670 if (asmspec_tree)
4671 asmspec = TREE_STRING_POINTER (asmspec_tree);
4673 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4675 error ("cannot initialize `%D' to namespace `%D'",
4676 decl, init);
4677 init = NULL_TREE;
4680 if (current_class_type
4681 && CP_DECL_CONTEXT (decl) == current_class_type
4682 && TYPE_BEING_DEFINED (current_class_type)
4683 && (DECL_INITIAL (decl) || init))
4684 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
4686 if (TREE_CODE (decl) == VAR_DECL
4687 && DECL_CONTEXT (decl)
4688 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
4689 && DECL_CONTEXT (decl) != current_namespace
4690 && init)
4692 /* Leave the namespace of the object. */
4693 pop_decl_namespace ();
4696 type = TREE_TYPE (decl);
4698 if (type == error_mark_node)
4699 goto finish_end0;
4701 if (TYPE_HAS_MUTABLE_P (type))
4702 TREE_READONLY (decl) = 0;
4704 if (processing_template_decl)
4706 /* Add this declaration to the statement-tree. */
4707 if (at_function_scope_p ())
4708 add_decl_stmt (decl);
4710 if (init && DECL_INITIAL (decl))
4711 DECL_INITIAL (decl) = init;
4712 if (TREE_CODE (decl) == VAR_DECL
4713 && !DECL_PRETTY_FUNCTION_P (decl)
4714 && !dependent_type_p (TREE_TYPE (decl)))
4715 maybe_deduce_size_from_array_init (decl, init);
4716 goto finish_end0;
4719 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4720 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
4722 /* Take care of TYPE_DECLs up front. */
4723 if (TREE_CODE (decl) == TYPE_DECL)
4725 if (type != error_mark_node
4726 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
4728 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
4729 warning ("shadowing previous type declaration of `%#D'", decl);
4730 set_identifier_type_value (DECL_NAME (decl), decl);
4733 /* If we have installed this as the canonical typedef for this
4734 type, and that type has not been defined yet, delay emitting
4735 the debug information for it, as we will emit it later. */
4736 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4737 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
4738 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4740 rest_of_decl_compilation (decl, NULL,
4741 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
4742 goto finish_end;
4745 if (TREE_CODE (decl) != FUNCTION_DECL)
4746 ttype = target_type (type);
4749 /* Currently, GNU C++ puts constants in text space, making them
4750 impossible to initialize. In the future, one would hope for
4751 an operating system which understood the difference between
4752 initialization and the running of a program. */
4753 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl))
4755 was_readonly = 1;
4756 if (TYPE_NEEDS_CONSTRUCTING (type)
4757 || TREE_CODE (type) == REFERENCE_TYPE)
4758 TREE_READONLY (decl) = 0;
4761 if (TREE_CODE (decl) == VAR_DECL)
4763 /* Only PODs can have thread-local storage. Other types may require
4764 various kinds of non-trivial initialization. */
4765 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4766 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
4767 decl, TREE_TYPE (decl));
4768 /* Convert the initializer to the type of DECL, if we have not
4769 already initialized DECL. */
4770 if (!DECL_INITIALIZED_P (decl)
4771 /* If !DECL_EXTERNAL then DECL is being defined. In the
4772 case of a static data member initialized inside the
4773 class-specifier, there can be an initializer even if DECL
4774 is *not* defined. */
4775 && (!DECL_EXTERNAL (decl) || init))
4777 init = check_initializer (decl, init, flags, &cleanup);
4778 /* Thread-local storage cannot be dynamically initialized. */
4779 if (DECL_THREAD_LOCAL (decl) && init)
4781 error ("`%D' is thread-local and so cannot be dynamically "
4782 "initialized", decl);
4783 init = NULL_TREE;
4785 /* Handle:
4787 [dcl.init]
4789 The memory occupied by any object of static storage
4790 duration is zero-initialized at program startup before
4791 any other initialization takes place.
4793 We cannot create an appropriate initializer until after
4794 the type of DECL is finalized. If DECL_INITIAL is set,
4795 then the DECL is statically initialized, and any
4796 necessary zero-initialization has already been performed. */
4797 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4798 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
4799 /*nelts=*/NULL_TREE,
4800 /*static_storage_p=*/true);
4801 /* Remember that the initialization for this variable has
4802 taken place. */
4803 DECL_INITIALIZED_P (decl) = 1;
4805 /* If the variable has an array type, lay out the type, even if
4806 there is no initializer. It is valid to index through the
4807 array, and we must get TYPE_ALIGN set correctly on the array
4808 type. */
4809 else if (TREE_CODE (type) == ARRAY_TYPE)
4810 layout_type (type);
4813 /* Add this declaration to the statement-tree. This needs to happen
4814 after the call to check_initializer so that the DECL_STMT for a
4815 reference temp is added before the DECL_STMT for the reference itself. */
4816 if (at_function_scope_p ())
4817 add_decl_stmt (decl);
4819 if (TREE_CODE (decl) == VAR_DECL)
4820 layout_var_decl (decl);
4822 /* Output the assembler code and/or RTL code for variables and functions,
4823 unless the type is an undefined structure or union.
4824 If not, it will get done when the type is completed. */
4825 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4827 if (TREE_CODE (decl) == VAR_DECL)
4828 maybe_commonize_var (decl);
4830 make_rtl_for_nonlocal_decl (decl, init, asmspec);
4832 if (TREE_CODE (type) == FUNCTION_TYPE
4833 || TREE_CODE (type) == METHOD_TYPE)
4834 abstract_virtuals_error (decl,
4835 strip_array_types (TREE_TYPE (type)));
4836 else if (POINTER_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
4838 /* If it's either a pointer or an array type, strip through all
4839 of them but the last one. If the last is an array type, issue
4840 an error if the element type is abstract. */
4841 while (POINTER_TYPE_P (TREE_TYPE (type))
4842 || TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE)
4843 type = TREE_TYPE (type);
4844 if (TREE_CODE (type) == ARRAY_TYPE)
4845 abstract_virtuals_error (decl, TREE_TYPE (type));
4847 else
4848 abstract_virtuals_error (decl, type);
4850 if (TREE_CODE (decl) == FUNCTION_DECL
4851 || TREE_TYPE (decl) == error_mark_node)
4852 /* No initialization required. */
4854 else if (DECL_EXTERNAL (decl)
4855 && ! (DECL_LANG_SPECIFIC (decl)
4856 && DECL_NOT_REALLY_EXTERN (decl)))
4858 if (init)
4859 DECL_INITIAL (decl) = init;
4861 else
4863 /* A variable definition. */
4864 if (DECL_FUNCTION_SCOPE_P (decl))
4866 /* This is a local declaration. */
4867 maybe_inject_for_scope_var (decl);
4868 /* Initialize the local variable. */
4869 if (processing_template_decl)
4871 if (init || DECL_INITIAL (decl) == error_mark_node)
4872 DECL_INITIAL (decl) = init;
4874 else if (!TREE_STATIC (decl))
4875 initialize_local_var (decl, init);
4878 if (TREE_STATIC (decl))
4879 expand_static_init (decl, init);
4881 finish_end0:
4883 /* Undo call to `pushclass' that was done in `start_decl'
4884 due to initialization of qualified member variable.
4885 I.e., Foo::x = 10; */
4887 tree context = CP_DECL_CONTEXT (decl);
4888 if (context
4889 && TYPE_P (context)
4890 && (TREE_CODE (decl) == VAR_DECL
4891 /* We also have a pushclass done that we need to undo here
4892 if we're at top level and declare a method. */
4893 || TREE_CODE (decl) == FUNCTION_DECL)
4894 /* If size hasn't been set, we're still defining it,
4895 and therefore inside the class body; don't pop
4896 the binding level.. */
4897 && COMPLETE_TYPE_P (context)
4898 && context == current_class_type)
4899 pop_nested_class ();
4903 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4904 reference, insert it in the statement-tree now. */
4905 if (cleanup)
4906 add_stmt (cleanup);
4908 finish_end:
4910 if (was_readonly)
4911 TREE_READONLY (decl) = 1;
4913 /* If this was marked 'used', be sure it will be output. */
4914 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4915 mark_referenced (DECL_ASSEMBLER_NAME (decl));
4918 /* This is here for a midend callback from c-common.c. */
4920 void
4921 finish_decl (tree decl, tree init, tree asmspec_tree)
4923 cp_finish_decl (decl, init, asmspec_tree, 0);
4926 /* Returns a declaration for a VAR_DECL as if:
4928 extern "C" TYPE NAME;
4930 had been seen. Used to create compiler-generated global
4931 variables. */
4933 tree
4934 declare_global_var (tree name, tree type)
4936 tree decl;
4938 push_to_top_level ();
4939 decl = build_decl (VAR_DECL, name, type);
4940 TREE_PUBLIC (decl) = 1;
4941 DECL_EXTERNAL (decl) = 1;
4942 DECL_ARTIFICIAL (decl) = 1;
4943 pushdecl (decl);
4944 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
4945 pop_from_top_level ();
4947 return decl;
4950 /* Returns a pointer to the `atexit' function. Note that if
4951 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
4952 `__cxa_atexit' function specified in the IA64 C++ ABI. */
4954 static tree
4955 get_atexit_node (void)
4957 tree atexit_fndecl;
4958 tree arg_types;
4959 tree fn_type;
4960 tree fn_ptr_type;
4961 const char *name;
4963 if (atexit_node)
4964 return atexit_node;
4966 if (flag_use_cxa_atexit)
4968 /* The declaration for `__cxa_atexit' is:
4970 int __cxa_atexit (void (*)(void *), void *, void *)
4972 We build up the argument types and then then function type
4973 itself. */
4975 /* First, build the pointer-to-function type for the first
4976 argument. */
4977 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
4978 fn_type = build_function_type (void_type_node, arg_types);
4979 fn_ptr_type = build_pointer_type (fn_type);
4980 /* Then, build the rest of the argument types. */
4981 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
4982 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
4983 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
4984 /* And the final __cxa_atexit type. */
4985 fn_type = build_function_type (integer_type_node, arg_types);
4986 fn_ptr_type = build_pointer_type (fn_type);
4987 name = "__cxa_atexit";
4989 else
4991 /* The declaration for `atexit' is:
4993 int atexit (void (*)());
4995 We build up the argument types and then then function type
4996 itself. */
4997 fn_type = build_function_type (void_type_node, void_list_node);
4998 fn_ptr_type = build_pointer_type (fn_type);
4999 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5000 /* Build the final atexit type. */
5001 fn_type = build_function_type (integer_type_node, arg_types);
5002 name = "atexit";
5005 /* Now, build the function declaration. */
5006 push_lang_context (lang_name_c);
5007 atexit_fndecl = build_library_fn_ptr (name, fn_type);
5008 mark_used (atexit_fndecl);
5009 pop_lang_context ();
5010 atexit_node = decay_conversion (atexit_fndecl);
5012 return atexit_node;
5015 /* Returns the __dso_handle VAR_DECL. */
5017 static tree
5018 get_dso_handle_node (void)
5020 if (dso_handle_node)
5021 return dso_handle_node;
5023 /* Declare the variable. */
5024 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5025 ptr_type_node);
5027 return dso_handle_node;
5030 /* Begin a new function with internal linkage whose job will be simply
5031 to destroy some particular variable. */
5033 static GTY(()) int start_cleanup_cnt;
5035 static tree
5036 start_cleanup_fn (void)
5038 int old_interface_only = interface_only;
5039 int old_interface_unknown = interface_unknown;
5040 char name[32];
5041 tree parmtypes;
5042 tree fntype;
5043 tree fndecl;
5045 push_to_top_level ();
5047 /* No need to mangle this. */
5048 push_lang_context (lang_name_c);
5050 interface_only = 0;
5051 interface_unknown = 1;
5053 /* Build the parameter-types. */
5054 parmtypes = void_list_node;
5055 /* Functions passed to __cxa_atexit take an additional parameter.
5056 We'll just ignore it. After we implement the new calling
5057 convention for destructors, we can eliminate the use of
5058 additional cleanup functions entirely in the -fnew-abi case. */
5059 if (flag_use_cxa_atexit)
5060 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5061 /* Build the function type itself. */
5062 fntype = build_function_type (void_type_node, parmtypes);
5063 /* Build the name of the function. */
5064 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5065 /* Build the function declaration. */
5066 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5067 /* It's a function with internal linkage, generated by the
5068 compiler. */
5069 TREE_PUBLIC (fndecl) = 0;
5070 DECL_ARTIFICIAL (fndecl) = 1;
5071 /* Make the function `inline' so that it is only emitted if it is
5072 actually needed. It is unlikely that it will be inlined, since
5073 it is only called via a function pointer, but we avoid unnecessary
5074 emissions this way. */
5075 DECL_INLINE (fndecl) = 1;
5076 DECL_DECLARED_INLINE_P (fndecl) = 1;
5077 DECL_INTERFACE_KNOWN (fndecl) = 1;
5078 /* Build the parameter. */
5079 if (flag_use_cxa_atexit)
5081 tree parmdecl;
5083 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5084 DECL_CONTEXT (parmdecl) = fndecl;
5085 TREE_USED (parmdecl) = 1;
5086 DECL_ARGUMENTS (fndecl) = parmdecl;
5089 pushdecl (fndecl);
5090 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
5092 interface_unknown = old_interface_unknown;
5093 interface_only = old_interface_only;
5095 pop_lang_context ();
5097 return current_function_decl;
5100 /* Finish the cleanup function begun by start_cleanup_fn. */
5102 static void
5103 end_cleanup_fn (void)
5105 expand_or_defer_fn (finish_function (0));
5107 pop_from_top_level ();
5110 /* Generate code to handle the destruction of DECL, an object with
5111 static storage duration. */
5113 void
5114 register_dtor_fn (tree decl)
5116 tree cleanup;
5117 tree compound_stmt;
5118 tree args;
5119 tree fcall;
5121 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5122 return;
5124 /* Call build_cleanup before we enter the anonymous function so that
5125 any access checks will be done relative to the current scope,
5126 rather than the scope of the anonymous function. */
5127 build_cleanup (decl);
5129 /* Now start the function. */
5130 cleanup = start_cleanup_fn ();
5132 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5133 to the original function, rather than the anonymous one. That
5134 will make the back-end think that nested functions are in use,
5135 which causes confusion. */
5137 push_deferring_access_checks (dk_no_check);
5138 fcall = build_cleanup (decl);
5139 pop_deferring_access_checks ();
5141 /* Create the body of the anonymous function. */
5142 compound_stmt = begin_compound_stmt (/*has_no_scope=*/false);
5143 finish_expr_stmt (fcall);
5144 finish_compound_stmt (compound_stmt);
5145 end_cleanup_fn ();
5147 /* Call atexit with the cleanup function. */
5148 cxx_mark_addressable (cleanup);
5149 mark_used (cleanup);
5150 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5151 if (flag_use_cxa_atexit)
5153 args = tree_cons (NULL_TREE,
5154 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5155 NULL_TREE);
5156 args = tree_cons (NULL_TREE, null_pointer_node, args);
5157 args = tree_cons (NULL_TREE, cleanup, args);
5159 else
5160 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5161 finish_expr_stmt (build_function_call (get_atexit_node (), args));
5164 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5165 is its initializer. Generate code to handle the construction
5166 and destruction of DECL. */
5168 static void
5169 expand_static_init (tree decl, tree init)
5171 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
5172 my_friendly_assert (TREE_STATIC (decl), 20021010);
5174 /* Some variables require no initialization. */
5175 if (!init
5176 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5177 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5178 return;
5180 if (! toplevel_bindings_p ())
5182 /* Emit code to perform this initialization but once. */
5183 tree if_stmt;
5184 tree then_clause;
5185 tree assignment;
5186 tree guard;
5187 tree guard_init;
5189 /* Emit code to perform this initialization but once. This code
5190 looks like:
5192 static int guard = 0;
5193 if (!guard) {
5194 // Do initialization.
5195 guard = 1;
5196 // Register variable for destruction at end of program.
5199 Note that the `temp' variable is only set to 1 *after* the
5200 initialization is complete. This ensures that an exception,
5201 thrown during the construction, will cause the variable to
5202 reinitialized when we pass through this code again, as per:
5204 [stmt.dcl]
5206 If the initialization exits by throwing an exception, the
5207 initialization is not complete, so it will be tried again
5208 the next time control enters the declaration.
5210 In theory, this process should be thread-safe, too; multiple
5211 threads should not be able to initialize the variable more
5212 than once. We don't yet attempt to ensure thread-safety. */
5214 /* Create the guard variable. */
5215 guard = get_guard (decl);
5217 /* Begin the conditional initialization. */
5218 if_stmt = begin_if_stmt ();
5219 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5220 then_clause = begin_compound_stmt (/*has_no_scope=*/false);
5222 /* Do the initialization itself. */
5223 assignment = init ? init : NULL_TREE;
5225 /* Once the assignment is complete, set TEMP to 1. Since the
5226 construction of the static object is complete at this point,
5227 we want to make sure TEMP is set to 1 even if a temporary
5228 constructed during the initialization throws an exception
5229 when it is destroyed. So, we combine the initialization and
5230 the assignment to TEMP into a single expression, ensuring
5231 that when we call finish_expr_stmt the cleanups will not be
5232 run until after TEMP is set to 1. */
5233 guard_init = set_guard (guard);
5234 if (assignment)
5235 assignment = build_compound_expr (assignment, guard_init);
5236 else
5237 assignment = guard_init;
5238 finish_expr_stmt (assignment);
5240 /* Use atexit to register a function for destroying this static
5241 variable. */
5242 register_dtor_fn (decl);
5244 finish_compound_stmt (then_clause);
5245 finish_then_clause (if_stmt);
5246 finish_if_stmt ();
5248 else
5249 static_aggregates = tree_cons (init, decl, static_aggregates);
5252 /* Finish the declaration of a catch-parameter. */
5254 tree
5255 start_handler_parms (tree declspecs, tree declarator)
5257 tree decl;
5258 if (declspecs)
5260 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
5261 1, NULL);
5262 if (decl == NULL_TREE)
5263 error ("invalid catch parameter");
5265 else
5266 decl = NULL_TREE;
5268 return decl;
5272 /* Make TYPE a complete type based on INITIAL_VALUE.
5273 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5274 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
5277 complete_array_type (tree type, tree initial_value, int do_default)
5279 tree maxindex = NULL_TREE;
5280 int value = 0;
5282 if (initial_value)
5284 /* An array of character type can be initialized from a
5285 brace-enclosed string constant. */
5286 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
5287 && TREE_CODE (initial_value) == CONSTRUCTOR
5288 && CONSTRUCTOR_ELTS (initial_value)
5289 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5290 == STRING_CST)
5291 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5292 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5294 /* Note MAXINDEX is really the maximum index, one less than the
5295 size. */
5296 if (TREE_CODE (initial_value) == STRING_CST)
5298 int eltsize
5299 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
5300 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
5301 / eltsize) - 1, 0);
5303 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
5305 tree elts = CONSTRUCTOR_ELTS (initial_value);
5307 maxindex = ssize_int (-1);
5308 for (; elts; elts = TREE_CHAIN (elts))
5310 if (TREE_PURPOSE (elts))
5311 maxindex = TREE_PURPOSE (elts);
5312 else
5313 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
5315 maxindex = copy_node (maxindex);
5317 else
5319 /* Make an error message unless that happened already. */
5320 if (initial_value != error_mark_node)
5321 value = 1;
5322 else
5323 initial_value = NULL_TREE;
5325 /* Prevent further error messages. */
5326 maxindex = build_int_2 (0, 0);
5330 if (!maxindex)
5332 if (do_default)
5333 maxindex = build_int_2 (0, 0);
5334 value = 2;
5337 if (maxindex)
5339 tree itype;
5340 tree domain;
5342 domain = build_index_type (maxindex);
5343 TYPE_DOMAIN (type) = domain;
5345 if (! TREE_TYPE (maxindex))
5346 TREE_TYPE (maxindex) = domain;
5347 if (initial_value)
5348 itype = TREE_TYPE (initial_value);
5349 else
5350 itype = NULL;
5351 if (itype && !TYPE_DOMAIN (itype))
5352 TYPE_DOMAIN (itype) = domain;
5353 /* The type of the main variant should never be used for arrays
5354 of different sizes. It should only ever be completed with the
5355 size of the array. */
5356 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
5357 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
5360 /* Lay out the type now that we can get the real answer. */
5362 layout_type (type);
5364 return value;
5367 /* Return zero if something is declared to be a member of type
5368 CTYPE when in the context of CUR_TYPE. STRING is the error
5369 message to print in that case. Otherwise, quietly return 1. */
5371 static int
5372 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5374 if (ctype && ctype != cur_type)
5376 if (flags == DTOR_FLAG)
5377 error ("destructor for alien class `%T' cannot be a member",
5378 ctype);
5379 else
5380 error ("constructor for alien class `%T' cannot be a member",
5381 ctype);
5382 return 0;
5384 return 1;
5387 /* Subroutine of `grokdeclarator'. */
5389 /* Generate errors possibly applicable for a given set of specifiers.
5390 This is for ARM $7.1.2. */
5392 static void
5393 bad_specifiers (tree object,
5394 const char* type,
5395 int virtualp,
5396 int quals,
5397 int inlinep,
5398 int friendp,
5399 int raises)
5401 if (virtualp)
5402 error ("`%D' declared as a `virtual' %s", object, type);
5403 if (inlinep)
5404 error ("`%D' declared as an `inline' %s", object, type);
5405 if (quals)
5406 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
5407 object, type);
5408 if (friendp)
5409 cp_error_at ("`%D' declared as a friend", object);
5410 if (raises
5411 && (TREE_CODE (object) == TYPE_DECL
5412 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5413 && !TYPE_REFFN_P (TREE_TYPE (object))
5414 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5415 cp_error_at ("`%D' declared with an exception specification", object);
5418 /* CTYPE is class type, or null if non-class.
5419 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5420 or METHOD_TYPE.
5421 DECLARATOR is the function's name.
5422 PARMS is a chain of PARM_DECLs for the function.
5423 VIRTUALP is truthvalue of whether the function is virtual or not.
5424 FLAGS are to be passed through to `grokclassfn'.
5425 QUALS are qualifiers indicating whether the function is `const'
5426 or `volatile'.
5427 RAISES is a list of exceptions that this function can raise.
5428 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5429 not look, and -1 if we should not call `grokclassfn' at all.
5431 Returns `NULL_TREE' if something goes wrong, after issuing
5432 applicable error messages. */
5434 static tree
5435 grokfndecl (tree ctype,
5436 tree type,
5437 tree declarator,
5438 tree parms,
5439 tree orig_declarator,
5440 int virtualp,
5441 enum overload_flags flags,
5442 tree quals,
5443 tree raises,
5444 int check,
5445 int friendp,
5446 int publicp,
5447 int inlinep,
5448 int funcdef_flag,
5449 int template_count,
5450 tree in_namespace)
5452 tree decl;
5453 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5454 int has_default_arg = 0;
5455 tree t;
5457 if (raises)
5458 type = build_exception_variant (type, raises);
5460 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5461 DECL_ARGUMENTS (decl) = parms;
5462 /* Propagate volatile out from type to decl. */
5463 if (TYPE_VOLATILE (type))
5464 TREE_THIS_VOLATILE (decl) = 1;
5466 /* If this decl has namespace scope, set that up. */
5467 if (in_namespace)
5468 set_decl_namespace (decl, in_namespace, friendp);
5469 else if (!ctype)
5470 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5472 /* `main' and builtins have implicit 'C' linkage. */
5473 if ((MAIN_NAME_P (declarator)
5474 || (IDENTIFIER_LENGTH (declarator) > 10
5475 && IDENTIFIER_POINTER (declarator)[0] == '_'
5476 && IDENTIFIER_POINTER (declarator)[1] == '_'
5477 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5478 && current_lang_name == lang_name_cplusplus
5479 && ctype == NULL_TREE
5480 /* NULL_TREE means global namespace. */
5481 && DECL_CONTEXT (decl) == NULL_TREE)
5482 SET_DECL_LANGUAGE (decl, lang_c);
5484 /* Should probably propagate const out from type to decl I bet (mrs). */
5485 if (staticp)
5487 DECL_STATIC_FUNCTION_P (decl) = 1;
5488 DECL_CONTEXT (decl) = ctype;
5491 if (ctype)
5492 DECL_CONTEXT (decl) = ctype;
5494 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5496 if (processing_template_decl)
5497 error ("cannot declare `::main' to be a template");
5498 if (inlinep)
5499 error ("cannot declare `::main' to be inline");
5500 if (!publicp)
5501 error ("cannot declare `::main' to be static");
5502 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5503 integer_type_node))
5504 error ("`main' must return `int'");
5505 inlinep = 0;
5506 publicp = 1;
5509 /* Members of anonymous types and local classes have no linkage; make
5510 them internal. If a typedef is made later, this will be changed. */
5511 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5512 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5513 publicp = 0;
5515 if (publicp)
5517 /* [basic.link]: A name with no linkage (notably, the name of a class
5518 or enumeration declared in a local scope) shall not be used to
5519 declare an entity with linkage.
5521 Only check this for public decls for now. See core 319, 389. */
5522 t = no_linkage_check (TREE_TYPE (decl));
5523 if (t)
5525 if (TYPE_ANONYMOUS_P (t))
5527 if (DECL_EXTERN_C_P (decl))
5528 /* Allow this; it's pretty common in C. */;
5529 else
5531 pedwarn ("non-local function `%#D' uses anonymous type",
5532 decl);
5533 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5534 cp_pedwarn_at ("\
5535 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5536 TYPE_NAME (t));
5539 else
5540 pedwarn ("non-local function `%#D' uses local type `%T'",
5541 decl, t);
5545 TREE_PUBLIC (decl) = publicp;
5546 if (! publicp)
5548 DECL_INTERFACE_KNOWN (decl) = 1;
5549 DECL_NOT_REALLY_EXTERN (decl) = 1;
5552 /* If the declaration was declared inline, mark it as such. */
5553 if (inlinep)
5554 DECL_DECLARED_INLINE_P (decl) = 1;
5555 /* We inline functions that are explicitly declared inline, or, when
5556 the user explicitly asks us to, all functions. */
5557 if (DECL_DECLARED_INLINE_P (decl)
5558 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5559 DECL_INLINE (decl) = 1;
5561 DECL_EXTERNAL (decl) = 1;
5562 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
5564 error ("%smember function `%D' cannot have `%T' method qualifier",
5565 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
5566 quals = NULL_TREE;
5569 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5570 grok_op_properties (decl, friendp, /*complain=*/true);
5572 if (ctype && decl_function_context (decl))
5573 DECL_NO_STATIC_CHAIN (decl) = 1;
5575 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5576 if (TREE_PURPOSE (t)
5577 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5579 has_default_arg = 1;
5580 break;
5583 if (friendp
5584 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5586 if (funcdef_flag)
5587 error
5588 ("defining explicit specialization `%D' in friend declaration",
5589 orig_declarator);
5590 else
5592 tree fns = TREE_OPERAND (orig_declarator, 0);
5593 tree args = TREE_OPERAND (orig_declarator, 1);
5595 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5597 /* Something like `template <class T> friend void f<T>()'. */
5598 error ("invalid use of template-id `%D' in declaration of primary template",
5599 orig_declarator);
5600 return NULL_TREE;
5604 /* A friend declaration of the form friend void f<>(). Record
5605 the information in the TEMPLATE_ID_EXPR. */
5606 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5608 if (TREE_CODE (fns) == COMPONENT_REF)
5610 /* Due to bison parser ickiness, we will have already looked
5611 up an operator_name or PFUNCNAME within the current class
5612 (see template_id in parse.y). If the current class contains
5613 such a name, we'll get a COMPONENT_REF here. Undo that. */
5615 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5616 == current_class_type, 20001120);
5617 fns = TREE_OPERAND (fns, 1);
5619 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5620 || TREE_CODE (fns) == OVERLOAD, 20001120);
5621 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5623 if (has_default_arg)
5625 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
5626 decl);
5627 return NULL_TREE;
5630 if (inlinep)
5632 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
5633 decl);
5634 return NULL_TREE;
5639 if (funcdef_flag)
5640 /* Make the init_value nonzero so pushdecl knows this is not
5641 tentative. error_mark_node is replaced later with the BLOCK. */
5642 DECL_INITIAL (decl) = error_mark_node;
5644 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5645 TREE_NOTHROW (decl) = 1;
5647 /* Caller will do the rest of this. */
5648 if (check < 0)
5649 return decl;
5651 if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
5652 DECL_CONSTRUCTOR_P (decl) = 1;
5654 /* Function gets the ugly name, field gets the nice one. This call
5655 may change the type of the function (because of default
5656 parameters)! */
5657 if (ctype != NULL_TREE)
5658 grokclassfn (ctype, decl, flags, quals);
5660 decl = check_explicit_specialization (orig_declarator, decl,
5661 template_count,
5662 2 * (funcdef_flag != 0) +
5663 4 * (friendp != 0));
5664 if (decl == error_mark_node)
5665 return NULL_TREE;
5667 if (ctype != NULL_TREE
5668 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5669 && check)
5671 tree old_decl;
5673 old_decl = check_classfn (ctype, decl,
5674 (processing_template_decl
5675 > template_class_depth (ctype))
5676 ? current_template_parms
5677 : NULL_TREE);
5679 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5680 /* Because grokfndecl is always supposed to return a
5681 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5682 here. We depend on our callers to figure out that its
5683 really a template that's being returned. */
5684 old_decl = DECL_TEMPLATE_RESULT (old_decl);
5686 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5687 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5688 /* Remove the `this' parm added by grokclassfn.
5689 XXX Isn't this done in start_function, too? */
5690 revert_static_member_fn (decl);
5691 if (old_decl && DECL_ARTIFICIAL (old_decl))
5692 error ("definition of implicitly-declared `%D'", old_decl);
5694 if (old_decl)
5696 tree ok;
5697 bool pop_p;
5699 /* Since we've smashed OLD_DECL to its
5700 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5701 if (TREE_CODE (decl) == TEMPLATE_DECL)
5702 decl = DECL_TEMPLATE_RESULT (decl);
5704 /* Attempt to merge the declarations. This can fail, in
5705 the case of some invalid specialization declarations. */
5706 pop_p = push_scope (ctype);
5707 ok = duplicate_decls (decl, old_decl);
5708 if (pop_p)
5709 pop_scope (ctype);
5710 if (!ok)
5712 error ("no `%#D' member function declared in class `%T'",
5713 decl, ctype);
5714 return NULL_TREE;
5716 return old_decl;
5720 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5721 return NULL_TREE;
5723 if (ctype == NULL_TREE || check)
5724 return decl;
5726 if (virtualp)
5727 DECL_VIRTUAL_P (decl) = 1;
5729 return decl;
5732 /* Create a VAR_DECL named NAME with the indicated TYPE.
5734 If SCOPE is non-NULL, it is the class type or namespace containing
5735 the variable. If SCOPE is NULL, the variable should is created in
5736 the innermost enclosings scope. */
5738 static tree
5739 grokvardecl (tree type,
5740 tree name,
5741 RID_BIT_TYPE * specbits_in,
5742 int initialized,
5743 int constp,
5744 tree scope)
5746 tree decl;
5747 RID_BIT_TYPE specbits;
5749 my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE,
5750 20020808);
5752 specbits = *specbits_in;
5754 /* Compute the scope in which to place the variable. */
5755 if (!scope)
5757 /* An explicit "extern" specifier indicates a namespace-scope
5758 variable. */
5759 if (RIDBIT_SETP (RID_EXTERN, specbits))
5760 scope = current_namespace;
5761 else if (!at_function_scope_p ())
5763 scope = current_scope ();
5764 if (!scope)
5765 scope = current_namespace;
5769 if (scope
5770 && (/* If the variable is a namespace-scope variable declared in a
5771 template, we need DECL_LANG_SPECIFIC. */
5772 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5773 /* Similarly for namespace-scope variables with language linkage
5774 other than C++. */
5775 || (TREE_CODE (scope) == NAMESPACE_DECL
5776 && current_lang_name != lang_name_cplusplus)
5777 /* Similarly for static data members. */
5778 || TYPE_P (scope)))
5779 decl = build_lang_decl (VAR_DECL, name, type);
5780 else
5781 decl = build_decl (VAR_DECL, name, type);
5783 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
5784 set_decl_namespace (decl, scope, 0);
5785 else
5786 DECL_CONTEXT (decl) = scope;
5788 if (name && scope && current_lang_name != lang_name_c)
5789 /* We can't mangle lazily here because we don't have any
5790 way to recover whether or not a variable was `extern
5791 "C"' later. */
5792 mangle_decl (decl);
5794 if (RIDBIT_SETP (RID_EXTERN, specbits))
5796 DECL_THIS_EXTERN (decl) = 1;
5797 DECL_EXTERNAL (decl) = !initialized;
5800 /* In class context, static means one per class,
5801 public access, and static storage. */
5802 if (DECL_CLASS_SCOPE_P (decl))
5804 TREE_PUBLIC (decl) = 1;
5805 TREE_STATIC (decl) = 1;
5806 DECL_EXTERNAL (decl) = 0;
5808 /* At top level, either `static' or no s.c. makes a definition
5809 (perhaps tentative), and absence of `static' makes it public. */
5810 else if (toplevel_bindings_p ())
5812 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
5813 && (DECL_THIS_EXTERN (decl) || ! constp));
5814 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5816 /* Not at top level, only `static' makes a static definition. */
5817 else
5819 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
5820 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5823 if (RIDBIT_SETP (RID_THREAD, specbits))
5825 if (targetm.have_tls)
5826 DECL_THREAD_LOCAL (decl) = 1;
5827 else
5828 /* A mere warning is sure to result in improper semantics
5829 at runtime. Don't bother to allow this to compile. */
5830 error ("thread-local storage not supported for this target");
5833 if (TREE_PUBLIC (decl))
5835 /* [basic.link]: A name with no linkage (notably, the name of a class
5836 or enumeration declared in a local scope) shall not be used to
5837 declare an entity with linkage.
5839 Only check this for public decls for now. */
5840 tree t = no_linkage_check (TREE_TYPE (decl));
5841 if (t)
5843 if (TYPE_ANONYMOUS_P (t))
5845 if (DECL_EXTERN_C_P (decl))
5846 /* Allow this; it's pretty common in C. */;
5847 else
5849 pedwarn ("non-local variable `%#D' uses anonymous type",
5850 decl);
5851 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5852 cp_pedwarn_at ("\
5853 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5854 TYPE_NAME (t));
5857 else
5858 pedwarn ("non-local variable `%#D' uses local type `%T'",
5859 decl, t);
5863 return decl;
5866 /* Create and return a canonical pointer to member function type, for
5867 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5869 tree
5870 build_ptrmemfunc_type (tree type)
5872 tree field, fields;
5873 tree t;
5874 tree unqualified_variant = NULL_TREE;
5876 if (type == error_mark_node)
5877 return type;
5879 /* If a canonical type already exists for this type, use it. We use
5880 this method instead of type_hash_canon, because it only does a
5881 simple equality check on the list of field members. */
5883 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5884 return t;
5886 /* Make sure that we always have the unqualified pointer-to-member
5887 type first. */
5888 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5889 unqualified_variant
5890 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5892 t = make_aggr_type (RECORD_TYPE);
5893 /* Let the front-end know this is a pointer to member function... */
5894 TYPE_PTRMEMFUNC_FLAG (t) = 1;
5895 /* ... and not really an aggregate. */
5896 SET_IS_AGGR_TYPE (t, 0);
5898 field = build_decl (FIELD_DECL, pfn_identifier, type);
5899 fields = field;
5901 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5902 TREE_CHAIN (field) = fields;
5903 fields = field;
5905 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
5907 /* Zap out the name so that the back-end will give us the debugging
5908 information for this anonymous RECORD_TYPE. */
5909 TYPE_NAME (t) = NULL_TREE;
5911 /* If this is not the unqualified form of this pointer-to-member
5912 type, set the TYPE_MAIN_VARIANT for this type to be the
5913 unqualified type. Since they are actually RECORD_TYPEs that are
5914 not variants of each other, we must do this manually. */
5915 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5917 t = build_qualified_type (t, cp_type_quals (type));
5918 TYPE_MAIN_VARIANT (t) = unqualified_variant;
5919 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5920 TYPE_NEXT_VARIANT (unqualified_variant) = t;
5923 /* Cache this pointer-to-member type so that we can find it again
5924 later. */
5925 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5927 return t;
5930 /* Create and return a pointer to data member type. */
5932 tree
5933 build_ptrmem_type (tree class_type, tree member_type)
5935 if (TREE_CODE (member_type) == METHOD_TYPE)
5937 tree arg_types;
5939 arg_types = TYPE_ARG_TYPES (member_type);
5940 class_type = (cp_build_qualified_type
5941 (class_type,
5942 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
5943 member_type
5944 = build_method_type_directly (class_type,
5945 TREE_TYPE (member_type),
5946 TREE_CHAIN (arg_types));
5947 return build_ptrmemfunc_type (build_pointer_type (member_type));
5949 else
5951 my_friendly_assert (TREE_CODE (member_type) != FUNCTION_TYPE,
5952 20030716);
5953 return build_offset_type (class_type, member_type);
5957 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
5958 Check to see that the definition is valid. Issue appropriate error
5959 messages. Return 1 if the definition is particularly bad, or 0
5960 otherwise. */
5963 check_static_variable_definition (tree decl, tree type)
5965 /* Motion 10 at San Diego: If a static const integral data member is
5966 initialized with an integral constant expression, the initializer
5967 may appear either in the declaration (within the class), or in
5968 the definition, but not both. If it appears in the class, the
5969 member is a member constant. The file-scope definition is always
5970 required. */
5971 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
5973 error ("invalid in-class initialization of static data member of non-integral type `%T'",
5974 type);
5975 /* If we just return the declaration, crashes will sometimes
5976 occur. We therefore return void_type_node, as if this were a
5977 friend declaration, to cause callers to completely ignore
5978 this declaration. */
5979 return 1;
5981 else if (!CP_TYPE_CONST_P (type))
5982 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
5983 decl);
5984 else if (pedantic && !INTEGRAL_TYPE_P (type))
5985 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
5987 return 0;
5990 /* Given the SIZE (i.e., number of elements) in an array, compute an
5991 appropriate index type for the array. If non-NULL, NAME is the
5992 name of the thing being declared. */
5994 tree
5995 compute_array_index_type (tree name, tree size)
5997 tree type = TREE_TYPE (size);
5998 tree itype;
6000 /* The array bound must be an integer type. */
6001 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6003 if (name)
6004 error ("size of array `%D' has non-integral type `%T'", name, type);
6005 else
6006 error ("size of array has non-integral type `%T'", type);
6007 size = integer_one_node;
6008 type = TREE_TYPE (size);
6011 if (abi_version_at_least (2)
6012 /* We should only handle value dependent expressions specially. */
6013 ? value_dependent_expression_p (size)
6014 /* But for abi-1, we handled all instances in templates. This
6015 effects the manglings produced. */
6016 : processing_template_decl)
6017 return build_index_type (build_min (MINUS_EXPR, sizetype,
6018 size, integer_one_node));
6020 /* The size might be the result of a cast. */
6021 STRIP_TYPE_NOPS (size);
6023 /* It might be a const variable or enumeration constant. */
6024 size = decl_constant_value (size);
6026 /* Normally, the array-bound will be a constant. */
6027 if (TREE_CODE (size) == INTEGER_CST)
6029 /* Check to see if the array bound overflowed. Make that an
6030 error, no matter how generous we're being. */
6031 int old_flag_pedantic_errors = flag_pedantic_errors;
6032 int old_pedantic = pedantic;
6033 pedantic = flag_pedantic_errors = 1;
6034 constant_expression_warning (size);
6035 pedantic = old_pedantic;
6036 flag_pedantic_errors = old_flag_pedantic_errors;
6038 /* An array must have a positive number of elements. */
6039 if (INT_CST_LT (size, integer_zero_node))
6041 if (name)
6042 error ("size of array `%D' is negative", name);
6043 else
6044 error ("size of array is negative");
6045 size = integer_one_node;
6047 /* As an extension we allow zero-sized arrays. We always allow
6048 them in system headers because glibc uses them. */
6049 else if (integer_zerop (size) && pedantic && !in_system_header)
6051 if (name)
6052 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
6053 else
6054 pedwarn ("ISO C++ forbids zero-size array");
6057 else if (TREE_CONSTANT (size))
6059 /* `(int) &fn' is not a valid array bound. */
6060 if (name)
6061 error ("size of array `%D' is not an integral constant-expression",
6062 name);
6063 else
6064 error ("size of array is not an integral constant-expression");
6066 else if (pedantic)
6068 if (name)
6069 pedwarn ("ISO C++ forbids variable-size array `%D'", name);
6070 else
6071 pedwarn ("ISO C++ forbids variable-size array");
6074 if (processing_template_decl && !TREE_CONSTANT (size))
6075 /* A variable sized array. */
6076 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6077 else
6079 /* Compute the index of the largest element in the array. It is
6080 one less than the number of elements in the array. */
6081 itype
6082 = fold (cp_build_binary_op (MINUS_EXPR,
6083 cp_convert (ssizetype, size),
6084 cp_convert (ssizetype, integer_one_node)));
6085 if (!TREE_CONSTANT (itype))
6086 /* A variable sized array. */
6087 itype = variable_size (itype);
6088 /* Make sure that there was no overflow when creating to a signed
6089 index type. (For example, on a 32-bit machine, an array with
6090 size 2^32 - 1 is too big.) */
6091 else if (TREE_OVERFLOW (itype))
6093 error ("overflow in array dimension");
6094 TREE_OVERFLOW (itype) = 0;
6098 /* Create and return the appropriate index type. */
6099 return build_index_type (itype);
6102 /* Returns the scope (if any) in which the entity declared by
6103 DECLARATOR will be located. If the entity was declared with an
6104 unqualified name, NULL_TREE is returned. */
6106 tree
6107 get_scope_of_declarator (tree declarator)
6109 if (!declarator)
6110 return NULL_TREE;
6112 switch (TREE_CODE (declarator))
6114 case CALL_EXPR:
6115 case ARRAY_REF:
6116 case INDIRECT_REF:
6117 case ADDR_EXPR:
6118 /* For any of these, the main declarator is the first operand. */
6119 return get_scope_of_declarator (TREE_OPERAND
6120 (declarator, 0));
6122 case SCOPE_REF:
6123 /* For a pointer-to-member, continue descending. */
6124 if (TREE_CODE (TREE_OPERAND (declarator, 1))
6125 == INDIRECT_REF)
6126 return get_scope_of_declarator (TREE_OPERAND
6127 (declarator, 1));
6128 /* Otherwise, if the declarator-id is a SCOPE_REF, the scope in
6129 which the declaration occurs is the first operand. */
6130 return TREE_OPERAND (declarator, 0);
6132 case TREE_LIST:
6133 /* Attributes to be applied. The declarator is TREE_VALUE. */
6134 return get_scope_of_declarator (TREE_VALUE (declarator));
6136 default:
6137 /* Otherwise, we have a declarator-id which is not a qualified
6138 name; the entity will be declared in the current scope. */
6139 return NULL_TREE;
6143 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6144 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6145 with this type. */
6147 static tree
6148 create_array_type_for_decl (tree name, tree type, tree size)
6150 tree itype = NULL_TREE;
6151 const char* error_msg;
6153 /* If things have already gone awry, bail now. */
6154 if (type == error_mark_node || size == error_mark_node)
6155 return error_mark_node;
6157 /* Assume that everything will go OK. */
6158 error_msg = NULL;
6160 /* There are some types which cannot be array elements. */
6161 switch (TREE_CODE (type))
6163 case VOID_TYPE:
6164 error_msg = "array of void";
6165 break;
6167 case FUNCTION_TYPE:
6168 error_msg = "array of functions";
6169 break;
6171 case REFERENCE_TYPE:
6172 error_msg = "array of references";
6173 break;
6175 case METHOD_TYPE:
6176 error_msg = "array of function members";
6177 break;
6179 default:
6180 break;
6183 /* If something went wrong, issue an error-message and return. */
6184 if (error_msg)
6186 if (name)
6187 error ("declaration of `%D' as %s", name, error_msg);
6188 else
6189 error ("creating %s", error_msg);
6191 return error_mark_node;
6194 /* [dcl.array]
6196 The constant expressions that specify the bounds of the arrays
6197 can be omitted only for the first member of the sequence. */
6198 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6200 if (name)
6201 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
6202 name);
6203 else
6204 error ("multidimensional array must have bounds for all dimensions except the first");
6206 return error_mark_node;
6209 /* Figure out the index type for the array. */
6210 if (size)
6211 itype = compute_array_index_type (name, size);
6213 return build_cplus_array_type (type, itype);
6216 /* Check that it's OK to declare a function with the indicated TYPE.
6217 SFK indicates the kind of special function (if any) that this
6218 function is. OPTYPE is the type given in a conversion operator
6219 declaration. Returns the actual return type of the function; that
6220 may be different than TYPE if an error occurs, or for certain
6221 special functions. */
6223 static tree
6224 check_special_function_return_type (special_function_kind sfk,
6225 tree type,
6226 tree optype)
6228 switch (sfk)
6230 case sfk_constructor:
6231 if (type)
6232 error ("return type specification for constructor invalid");
6234 type = void_type_node;
6235 break;
6237 case sfk_destructor:
6238 if (type)
6239 error ("return type specification for destructor invalid");
6240 type = void_type_node;
6241 break;
6243 case sfk_conversion:
6244 if (type && !same_type_p (type, optype))
6245 error ("operator `%T' declared to return `%T'", optype, type);
6246 else if (type)
6247 pedwarn ("return type specified for `operator %T'", optype);
6248 type = optype;
6249 break;
6251 default:
6252 abort ();
6253 break;
6256 return type;
6259 /* Given declspecs and a declarator (abstract or otherwise), determine
6260 the name and type of the object declared and construct a DECL node
6261 for it.
6263 DECLSPECS is a chain of tree_list nodes whose value fields
6264 are the storage classes and type specifiers.
6266 DECL_CONTEXT says which syntactic context this declaration is in:
6267 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6268 FUNCDEF for a function definition. Like NORMAL but a few different
6269 error messages in each case. Return value may be zero meaning
6270 this definition is too screwy to try to parse.
6271 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6272 handle member functions (which have FIELD context).
6273 Return value may be zero meaning this definition is too screwy to
6274 try to parse.
6275 PARM for a parameter declaration (either within a function prototype
6276 or before a function body). Make a PARM_DECL, or return void_type_node.
6277 CATCHPARM for a parameter declaration before a catch clause.
6278 TYPENAME if for a typename (in a cast or sizeof).
6279 Don't make a DECL node; just return the ..._TYPE node.
6280 FIELD for a struct or union field; make a FIELD_DECL.
6281 BITFIELD for a field with specified width.
6282 INITIALIZED is 1 if the decl has an initializer.
6284 ATTRLIST is a pointer to the list of attributes, which may be NULL
6285 if there are none; *ATTRLIST may be modified if attributes from inside
6286 the declarator should be applied to the declaration.
6288 When this function is called, scoping variables (such as
6289 CURRENT_CLASS_TYPE) should reflect the scope in which the
6290 declaration occurs, not the scope in which the new declaration will
6291 be placed. For example, on:
6293 void S::f() { ... }
6295 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6296 should not be `S'. */
6298 tree
6299 grokdeclarator (tree declarator,
6300 tree declspecs,
6301 enum decl_context decl_context,
6302 int initialized,
6303 tree* attrlist)
6305 RID_BIT_TYPE specbits;
6306 int nclasses = 0;
6307 tree spec;
6308 tree type = NULL_TREE;
6309 int longlong = 0;
6310 int type_quals;
6311 int virtualp, explicitp, friendp, inlinep, staticp;
6312 int explicit_int = 0;
6313 int explicit_char = 0;
6314 int defaulted_int = 0;
6315 int extern_langp = 0;
6316 tree dependant_name = NULL_TREE;
6318 tree typedef_decl = NULL_TREE;
6319 const char *name;
6320 tree typedef_type = NULL_TREE;
6321 int funcdef_flag = 0;
6322 enum tree_code innermost_code = ERROR_MARK;
6323 int bitfield = 0;
6324 #if 0
6325 /* See the code below that used this. */
6326 tree decl_attr = NULL_TREE;
6327 #endif
6329 /* Keep track of what sort of function is being processed
6330 so that we can warn about default return values, or explicit
6331 return values which do not match prescribed defaults. */
6332 special_function_kind sfk = sfk_none;
6334 tree dname = NULL_TREE;
6335 tree ctype = current_class_type;
6336 tree ctor_return_type = NULL_TREE;
6337 enum overload_flags flags = NO_SPECIAL;
6338 tree quals = NULL_TREE;
6339 tree raises = NULL_TREE;
6340 int template_count = 0;
6341 tree in_namespace = NULL_TREE;
6342 tree returned_attrs = NULL_TREE;
6343 tree scope = NULL_TREE;
6344 tree parms = NULL_TREE;
6346 RIDBIT_RESET_ALL (specbits);
6347 if (decl_context == FUNCDEF)
6348 funcdef_flag = 1, decl_context = NORMAL;
6349 else if (decl_context == MEMFUNCDEF)
6350 funcdef_flag = -1, decl_context = FIELD;
6351 else if (decl_context == BITFIELD)
6352 bitfield = 1, decl_context = FIELD;
6354 /* Look inside a declarator for the name being declared
6355 and get it as a string, for an error message. */
6357 tree *next = &declarator;
6358 tree decl;
6359 name = NULL;
6361 while (next && *next)
6363 decl = *next;
6364 switch (TREE_CODE (decl))
6366 case TREE_LIST:
6367 /* For attributes. */
6368 next = &TREE_VALUE (decl);
6369 break;
6371 case COND_EXPR:
6372 ctype = NULL_TREE;
6373 next = &TREE_OPERAND (decl, 0);
6374 break;
6376 case BIT_NOT_EXPR: /* For C++ destructors! */
6378 tree name = TREE_OPERAND (decl, 0);
6379 tree rename = NULL_TREE;
6381 my_friendly_assert (flags == NO_SPECIAL, 152);
6382 flags = DTOR_FLAG;
6383 sfk = sfk_destructor;
6384 if (TYPE_P (name))
6385 TREE_OPERAND (decl, 0) = name = constructor_name (name);
6386 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
6387 if (ctype == NULL_TREE)
6389 if (current_class_type == NULL_TREE)
6391 error ("destructors must be member functions");
6392 flags = NO_SPECIAL;
6394 else
6396 tree t = constructor_name (current_class_type);
6397 if (t != name)
6398 rename = t;
6401 else
6403 tree t = constructor_name (ctype);
6404 if (t != name)
6405 rename = t;
6408 if (rename)
6410 error ("destructor `%T' must match class name `%T'",
6411 name, rename);
6412 TREE_OPERAND (decl, 0) = rename;
6414 next = &name;
6416 break;
6418 case ADDR_EXPR: /* C++ reference declaration */
6419 /* Fall through. */
6420 case ARRAY_REF:
6421 case INDIRECT_REF:
6422 ctype = NULL_TREE;
6423 innermost_code = TREE_CODE (decl);
6424 next = &TREE_OPERAND (decl, 0);
6425 break;
6427 case CALL_EXPR:
6428 innermost_code = TREE_CODE (decl);
6429 if (decl_context == FIELD && ctype == NULL_TREE)
6430 ctype = current_class_type;
6431 if (ctype
6432 && TREE_OPERAND (decl, 0)
6433 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
6434 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 0)),
6435 ctype)))
6436 TREE_OPERAND (decl, 0) = constructor_name (ctype);
6437 next = &TREE_OPERAND (decl, 0);
6438 decl = *next;
6439 if (ctype != NULL_TREE
6440 && decl != NULL_TREE && flags != DTOR_FLAG
6441 && constructor_name_p (decl, ctype))
6443 sfk = sfk_constructor;
6444 ctor_return_type = ctype;
6446 ctype = NULL_TREE;
6447 break;
6449 case TEMPLATE_ID_EXPR:
6451 tree fns = TREE_OPERAND (decl, 0);
6453 dname = fns;
6454 if (TREE_CODE (dname) == COMPONENT_REF)
6455 dname = TREE_OPERAND (dname, 1);
6456 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6458 my_friendly_assert (is_overloaded_fn (dname),
6459 19990331);
6460 dname = DECL_NAME (get_first_fn (dname));
6463 /* Fall through. */
6465 case IDENTIFIER_NODE:
6466 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6467 dname = decl;
6469 next = 0;
6471 if (C_IS_RESERVED_WORD (dname))
6473 error ("declarator-id missing; using reserved word `%D'",
6474 dname);
6475 name = IDENTIFIER_POINTER (dname);
6477 else if (!IDENTIFIER_TYPENAME_P (dname))
6478 name = IDENTIFIER_POINTER (dname);
6479 else
6481 my_friendly_assert (flags == NO_SPECIAL, 154);
6482 flags = TYPENAME_FLAG;
6483 ctor_return_type = TREE_TYPE (dname);
6484 sfk = sfk_conversion;
6485 if (is_typename_at_global_scope (dname))
6486 name = IDENTIFIER_POINTER (dname);
6487 else
6488 name = "<invalid operator>";
6490 break;
6492 /* C++ extension */
6493 case SCOPE_REF:
6495 /* Perform error checking, and decide on a ctype. */
6496 tree cname = TREE_OPERAND (decl, 0);
6497 if (cname == NULL_TREE)
6498 ctype = NULL_TREE;
6499 else if (TREE_CODE (cname) == NAMESPACE_DECL)
6501 ctype = NULL_TREE;
6502 in_namespace = TREE_OPERAND (decl, 0);
6504 else if (! is_aggr_type (cname, 1))
6505 ctype = NULL_TREE;
6506 /* Must test TREE_OPERAND (decl, 1), in case user gives
6507 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
6508 else if (TREE_OPERAND (decl, 1)
6509 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
6510 ctype = cname;
6511 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
6512 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
6514 /* This might be declaring a member of a template
6515 parm to be a friend. */
6516 ctype = cname;
6517 dependant_name = TREE_OPERAND (decl, 1);
6519 else if (ctype == NULL_TREE)
6520 ctype = cname;
6521 else if (TREE_COMPLEXITY (decl) == current_class_depth)
6523 else
6525 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
6527 error ("type `%T' is not derived from type `%T'",
6528 cname, ctype);
6529 ctype = NULL_TREE;
6531 else
6532 ctype = cname;
6535 /* It is valid to write:
6537 class C { void f(); };
6538 typedef C D;
6539 void D::f();
6541 The standard is not clear about whether `typedef const C D' is
6542 legal; as of 2002-09-15 the committee is considering
6543 that question. EDG 3.0 allows that syntax.
6544 Therefore, we do as well. */
6545 if (ctype)
6546 ctype = TYPE_MAIN_VARIANT (ctype);
6547 /* Update the declarator so that when we process it
6548 again the correct type is present. */
6549 TREE_OPERAND (decl, 0) = ctype;
6551 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
6552 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 1)),
6553 ctype))
6554 TREE_OPERAND (decl, 1) = constructor_name (ctype);
6555 next = &TREE_OPERAND (decl, 1);
6556 decl = *next;
6557 if (ctype)
6559 tree name = decl;
6561 if (TREE_CODE (name) == BIT_NOT_EXPR)
6562 name = TREE_OPERAND (name, 0);
6564 if (!constructor_name_p (decl, ctype))
6566 else if (decl == name)
6568 sfk = sfk_constructor;
6569 ctor_return_type = ctype;
6571 else
6573 sfk = sfk_destructor;
6574 ctor_return_type = ctype;
6575 flags = DTOR_FLAG;
6576 TREE_OPERAND (decl, 0) = constructor_name (ctype);
6577 next = &TREE_OPERAND (decl, 0);
6581 break;
6583 case ERROR_MARK:
6584 next = 0;
6585 break;
6587 case TYPE_DECL:
6588 /* Parse error puts this typespec where
6589 a declarator should go. */
6590 error ("`%T' specified as declarator-id", DECL_NAME (decl));
6591 if (TREE_TYPE (decl) == current_class_type)
6592 error (" perhaps you want `%T' for a constructor",
6593 current_class_name);
6594 dname = DECL_NAME (decl);
6595 name = IDENTIFIER_POINTER (dname);
6597 /* Avoid giving two errors for this. */
6598 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
6600 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
6601 *next = dname;
6602 next = 0;
6603 break;
6605 case BASELINK:
6606 next = &BASELINK_FUNCTIONS (decl);
6607 break;
6609 case TEMPLATE_DECL:
6610 /* Sometimes, we see a template-name used as part of a
6611 decl-specifier like in
6612 std::allocator alloc;
6613 Handle that gracefully. */
6614 error ("invalid use of template-name '%E' in a declarator", decl);
6615 return error_mark_node;
6616 break;
6618 default:
6619 my_friendly_assert (0, 20020917);
6624 /* A function definition's declarator must have the form of
6625 a function declarator. */
6627 if (funcdef_flag && innermost_code != CALL_EXPR)
6628 return 0;
6630 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6631 && innermost_code != CALL_EXPR
6632 && ! (ctype && declspecs == NULL_TREE))
6634 error ("declaration of `%D' as non-function", dname);
6635 return void_type_node;
6638 /* Anything declared one level down from the top level
6639 must be one of the parameters of a function
6640 (because the body is at least two levels down). */
6642 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6643 by not allowing C++ class definitions to specify their parameters
6644 with xdecls (must be spec.d in the parmlist).
6646 Since we now wait to push a class scope until we are sure that
6647 we are in a legitimate method context, we must set oldcname
6648 explicitly (since current_class_name is not yet alive).
6650 We also want to avoid calling this a PARM if it is in a namespace. */
6652 if (decl_context == NORMAL && !toplevel_bindings_p ())
6654 struct cp_binding_level *b = current_binding_level;
6655 current_binding_level = b->level_chain;
6656 if (current_binding_level != 0 && toplevel_bindings_p ())
6657 decl_context = PARM;
6658 current_binding_level = b;
6661 if (name == NULL)
6662 name = decl_context == PARM ? "parameter" : "type name";
6664 /* Look through the decl specs and record which ones appear.
6665 Some typespecs are defined as built-in typenames.
6666 Others, the ones that are modifiers of other types,
6667 are represented by bits in SPECBITS: set the bits for
6668 the modifiers that appear. Storage class keywords are also in SPECBITS.
6670 If there is a typedef name or a type, store the type in TYPE.
6671 This includes builtin typedefs such as `int'.
6673 Set EXPLICIT_INT if the type is `int' or `char' and did not
6674 come from a user typedef.
6676 Set LONGLONG if `long' is mentioned twice.
6678 For C++, constructors and destructors have their own fast treatment. */
6680 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
6682 int i;
6683 tree id;
6685 /* Certain parse errors slip through. For example,
6686 `int class;' is not caught by the parser. Try
6687 weakly to recover here. */
6688 if (TREE_CODE (spec) != TREE_LIST)
6689 return 0;
6691 id = TREE_VALUE (spec);
6693 /* If the entire declaration is itself tagged as deprecated then
6694 suppress reports of deprecated items. */
6695 if (!adding_implicit_members && id && TREE_DEPRECATED (id))
6697 if (deprecated_state != DEPRECATED_SUPPRESS)
6698 warn_deprecated_use (id);
6701 if (TREE_CODE (id) == IDENTIFIER_NODE)
6703 if (id == ridpointers[(int) RID_INT]
6704 || id == ridpointers[(int) RID_CHAR]
6705 || id == ridpointers[(int) RID_BOOL]
6706 || id == ridpointers[(int) RID_WCHAR])
6708 if (type)
6710 if (id == ridpointers[(int) RID_BOOL])
6711 error ("`bool' is now a keyword");
6712 else
6713 error ("extraneous `%T' ignored", id);
6715 else
6717 if (id == ridpointers[(int) RID_INT])
6718 explicit_int = 1;
6719 else if (id == ridpointers[(int) RID_CHAR])
6720 explicit_char = 1;
6721 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
6723 goto found;
6725 /* C++ aggregate types. */
6726 if (IDENTIFIER_HAS_TYPE_VALUE (id))
6728 if (type)
6729 error ("multiple declarations `%T' and `%T'", type, id);
6730 else
6731 type = IDENTIFIER_TYPE_VALUE (id);
6732 goto found;
6735 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
6737 if (ridpointers[i] == id)
6739 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
6741 if (pedantic && ! in_system_header && warn_long_long)
6742 pedwarn ("ISO C++ does not support `long long'");
6743 if (longlong)
6744 error ("`long long long' is too long for GCC");
6745 else
6746 longlong = 1;
6748 else if (RIDBIT_SETP (i, specbits))
6749 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
6751 /* Diagnose "__thread extern" or "__thread static". */
6752 if (RIDBIT_SETP (RID_THREAD, specbits))
6754 if (i == (int)RID_EXTERN)
6755 error ("`__thread' before `extern'");
6756 else if (i == (int)RID_STATIC)
6757 error ("`__thread' before `static'");
6760 if (i == (int)RID_EXTERN
6761 && TREE_PURPOSE (spec) == error_mark_node)
6762 /* This extern was part of a language linkage. */
6763 extern_langp = 1;
6765 RIDBIT_SET (i, specbits);
6766 goto found;
6770 else if (TREE_CODE (id) == TYPE_DECL)
6772 if (type)
6773 error ("multiple declarations `%T' and `%T'", type,
6774 TREE_TYPE (id));
6775 else
6777 type = TREE_TYPE (id);
6778 TREE_VALUE (spec) = type;
6779 typedef_decl = id;
6781 goto found;
6783 if (type)
6784 error ("two or more data types in declaration of `%s'", name);
6785 else if (TREE_CODE (id) == IDENTIFIER_NODE)
6787 tree t = lookup_name (id, 1);
6788 if (!t || TREE_CODE (t) != TYPE_DECL)
6789 error ("`%s' fails to be a typedef or built in type",
6790 IDENTIFIER_POINTER (id));
6791 else
6793 type = TREE_TYPE (t);
6794 typedef_decl = t;
6797 else if (id != error_mark_node)
6798 /* Can't change CLASS nodes into RECORD nodes here! */
6799 type = id;
6801 found: ;
6804 #if 0
6805 /* See the code below that used this. */
6806 if (typedef_decl)
6807 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6808 #endif
6809 typedef_type = type;
6811 /* No type at all: default to `int', and set DEFAULTED_INT
6812 because it was not a user-defined typedef. */
6814 if (type == NULL_TREE
6815 && (RIDBIT_SETP (RID_SIGNED, specbits)
6816 || RIDBIT_SETP (RID_UNSIGNED, specbits)
6817 || RIDBIT_SETP (RID_LONG, specbits)
6818 || RIDBIT_SETP (RID_SHORT, specbits)))
6820 /* These imply 'int'. */
6821 type = integer_type_node;
6822 defaulted_int = 1;
6825 if (sfk != sfk_none)
6826 type = check_special_function_return_type (sfk, type,
6827 ctor_return_type);
6828 else if (type == NULL_TREE)
6830 int is_main;
6832 explicit_int = -1;
6834 /* We handle `main' specially here, because 'main () { }' is so
6835 common. With no options, it is allowed. With -Wreturn-type,
6836 it is a warning. It is only an error with -pedantic-errors. */
6837 is_main = (funcdef_flag
6838 && dname && MAIN_NAME_P (dname)
6839 && ctype == NULL_TREE
6840 && in_namespace == NULL_TREE
6841 && current_namespace == global_namespace);
6843 if (in_system_header || flag_ms_extensions)
6844 /* Allow it, sigh. */;
6845 else if (pedantic || ! is_main)
6846 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
6847 name);
6848 else if (warn_return_type)
6849 warning ("ISO C++ forbids declaration of `%s' with no type",
6850 name);
6852 type = integer_type_node;
6855 ctype = NULL_TREE;
6857 /* Now process the modifiers that were specified
6858 and check for invalid combinations. */
6860 /* Long double is a special combination. */
6862 if (RIDBIT_SETP (RID_LONG, specbits)
6863 && TYPE_MAIN_VARIANT (type) == double_type_node)
6865 RIDBIT_RESET (RID_LONG, specbits);
6866 type = build_qualified_type (long_double_type_node,
6867 cp_type_quals (type));
6870 /* Check all other uses of type modifiers. */
6872 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
6873 || RIDBIT_SETP (RID_SIGNED, specbits)
6874 || RIDBIT_SETP (RID_LONG, specbits)
6875 || RIDBIT_SETP (RID_SHORT, specbits))
6877 int ok = 0;
6879 if (TREE_CODE (type) == REAL_TYPE)
6880 error ("short, signed or unsigned invalid for `%s'", name);
6881 else if (TREE_CODE (type) != INTEGER_TYPE)
6882 error ("long, short, signed or unsigned invalid for `%s'", name);
6883 else if (RIDBIT_SETP (RID_LONG, specbits)
6884 && RIDBIT_SETP (RID_SHORT, specbits))
6885 error ("long and short specified together for `%s'", name);
6886 else if ((RIDBIT_SETP (RID_LONG, specbits)
6887 || RIDBIT_SETP (RID_SHORT, specbits))
6888 && explicit_char)
6889 error ("long or short specified with char for `%s'", name);
6890 else if ((RIDBIT_SETP (RID_LONG, specbits)
6891 || RIDBIT_SETP (RID_SHORT, specbits))
6892 && TREE_CODE (type) == REAL_TYPE)
6893 error ("long or short specified with floating type for `%s'", name);
6894 else if (RIDBIT_SETP (RID_SIGNED, specbits)
6895 && RIDBIT_SETP (RID_UNSIGNED, specbits))
6896 error ("signed and unsigned given together for `%s'", name);
6897 else
6899 ok = 1;
6900 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6902 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
6903 name);
6904 if (flag_pedantic_errors)
6905 ok = 0;
6909 /* Discard the type modifiers if they are invalid. */
6910 if (! ok)
6912 RIDBIT_RESET (RID_UNSIGNED, specbits);
6913 RIDBIT_RESET (RID_SIGNED, specbits);
6914 RIDBIT_RESET (RID_LONG, specbits);
6915 RIDBIT_RESET (RID_SHORT, specbits);
6916 longlong = 0;
6920 if (RIDBIT_SETP (RID_COMPLEX, specbits)
6921 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6923 error ("complex invalid for `%s'", name);
6924 RIDBIT_RESET (RID_COMPLEX, specbits);
6927 /* Decide whether an integer type is signed or not.
6928 Optionally treat bitfields as signed by default. */
6929 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
6930 /* [class.bit]
6932 It is implementation-defined whether a plain (neither
6933 explicitly signed or unsigned) char, short, int, or long
6934 bit-field is signed or unsigned.
6936 Naturally, we extend this to long long as well. Note that
6937 this does not include wchar_t. */
6938 || (bitfield && !flag_signed_bitfields
6939 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
6940 /* A typedef for plain `int' without `signed' can be
6941 controlled just like plain `int', but a typedef for
6942 `signed int' cannot be so controlled. */
6943 && !(typedef_decl
6944 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6945 && (TREE_CODE (type) == INTEGER_TYPE
6946 || TREE_CODE (type) == CHAR_TYPE)
6947 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6949 if (longlong)
6950 type = long_long_unsigned_type_node;
6951 else if (RIDBIT_SETP (RID_LONG, specbits))
6952 type = long_unsigned_type_node;
6953 else if (RIDBIT_SETP (RID_SHORT, specbits))
6954 type = short_unsigned_type_node;
6955 else if (type == char_type_node)
6956 type = unsigned_char_type_node;
6957 else if (typedef_decl)
6958 type = c_common_unsigned_type (type);
6959 else
6960 type = unsigned_type_node;
6962 else if (RIDBIT_SETP (RID_SIGNED, specbits)
6963 && type == char_type_node)
6964 type = signed_char_type_node;
6965 else if (longlong)
6966 type = long_long_integer_type_node;
6967 else if (RIDBIT_SETP (RID_LONG, specbits))
6968 type = long_integer_type_node;
6969 else if (RIDBIT_SETP (RID_SHORT, specbits))
6970 type = short_integer_type_node;
6972 if (RIDBIT_SETP (RID_COMPLEX, specbits))
6974 /* If we just have "complex", it is equivalent to
6975 "complex double", but if any modifiers at all are specified it is
6976 the complex form of TYPE. E.g, "complex short" is
6977 "complex short int". */
6979 if (defaulted_int && ! longlong
6980 && ! (RIDBIT_SETP (RID_LONG, specbits)
6981 || RIDBIT_SETP (RID_SHORT, specbits)
6982 || RIDBIT_SETP (RID_SIGNED, specbits)
6983 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
6984 type = complex_double_type_node;
6985 else if (type == integer_type_node)
6986 type = complex_integer_type_node;
6987 else if (type == float_type_node)
6988 type = complex_float_type_node;
6989 else if (type == double_type_node)
6990 type = complex_double_type_node;
6991 else if (type == long_double_type_node)
6992 type = complex_long_double_type_node;
6993 else
6994 type = build_complex_type (type);
6997 type_quals = TYPE_UNQUALIFIED;
6998 if (RIDBIT_SETP (RID_CONST, specbits))
6999 type_quals |= TYPE_QUAL_CONST;
7000 if (RIDBIT_SETP (RID_VOLATILE, specbits))
7001 type_quals |= TYPE_QUAL_VOLATILE;
7002 if (RIDBIT_SETP (RID_RESTRICT, specbits))
7003 type_quals |= TYPE_QUAL_RESTRICT;
7004 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7005 error ("qualifiers are not allowed on declaration of `operator %T'",
7006 ctor_return_type);
7008 type_quals |= cp_type_quals (type);
7009 type = cp_build_qualified_type_real
7010 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7011 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
7012 /* We might have ignored or rejected some of the qualifiers. */
7013 type_quals = cp_type_quals (type);
7015 staticp = 0;
7016 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
7017 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
7018 RIDBIT_RESET (RID_VIRTUAL, specbits);
7019 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
7020 RIDBIT_RESET (RID_EXPLICIT, specbits);
7022 if (RIDBIT_SETP (RID_STATIC, specbits))
7023 staticp = 1 + (decl_context == FIELD);
7025 if (virtualp && staticp == 2)
7027 error ("member `%D' cannot be declared both virtual and static",
7028 dname);
7029 staticp = 0;
7031 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
7032 RIDBIT_RESET (RID_FRIEND, specbits);
7034 if (dependant_name && !friendp)
7036 error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
7037 return void_type_node;
7040 /* Warn if two storage classes are given. Default to `auto'. */
7042 if (RIDBIT_ANY_SET (specbits))
7044 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
7045 if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
7046 if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
7047 if (decl_context == PARM && nclasses > 0)
7048 error ("storage class specifiers invalid in parameter declarations");
7049 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7051 if (decl_context == PARM)
7052 error ("typedef declaration invalid in parameter declaration");
7053 nclasses++;
7055 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
7056 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
7057 if (!nclasses && !friendp && extern_langp)
7058 nclasses++;
7061 /* Give error if `virtual' is used outside of class declaration. */
7062 if (virtualp
7063 && (current_class_name == NULL_TREE || decl_context != FIELD))
7065 error ("virtual outside class declaration");
7066 virtualp = 0;
7069 /* Static anonymous unions are dealt with here. */
7070 if (staticp && decl_context == TYPENAME
7071 && TREE_CODE (declspecs) == TREE_LIST
7072 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
7073 decl_context = FIELD;
7075 /* Warn about storage classes that are invalid for certain
7076 kinds of declarations (parameters, typenames, etc.). */
7078 /* "static __thread" and "extern __thread" are allowed. */
7079 if (nclasses == 2
7080 && RIDBIT_SETP (RID_THREAD, specbits)
7081 && (RIDBIT_SETP (RID_EXTERN, specbits)
7082 || RIDBIT_SETP (RID_STATIC, specbits)))
7083 nclasses = 1;
7085 if (nclasses > 1)
7086 error ("multiple storage classes in declaration of `%s'", name);
7087 else if (decl_context != NORMAL && nclasses > 0)
7089 if ((decl_context == PARM || decl_context == CATCHPARM)
7090 && (RIDBIT_SETP (RID_REGISTER, specbits)
7091 || RIDBIT_SETP (RID_AUTO, specbits)))
7093 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7095 else if (decl_context == FIELD
7096 /* C++ allows static class elements. */
7097 && RIDBIT_SETP (RID_STATIC, specbits))
7098 /* C++ also allows inlines and signed and unsigned elements,
7099 but in those cases we don't come in here. */
7101 else
7103 if (decl_context == FIELD)
7105 tree tmp = NULL_TREE;
7106 int op = 0;
7108 if (declarator)
7110 /* Avoid trying to get an operand off an identifier node. */
7111 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
7112 tmp = declarator;
7113 else
7114 tmp = TREE_OPERAND (declarator, 0);
7115 op = IDENTIFIER_OPNAME_P (tmp);
7116 if (IDENTIFIER_TYPENAME_P (tmp))
7118 if (is_typename_at_global_scope (tmp))
7119 name = IDENTIFIER_POINTER (tmp);
7120 else
7121 name = "<invalid operator>";
7124 error ("storage class specified for %s `%s'",
7125 op ? "member operator" : "field",
7126 name);
7128 else
7130 if (decl_context == PARM || decl_context == CATCHPARM)
7131 error ("storage class specified for parameter `%s'", name);
7132 else
7133 error ("storage class specified for typename");
7135 RIDBIT_RESET (RID_REGISTER, specbits);
7136 RIDBIT_RESET (RID_AUTO, specbits);
7137 RIDBIT_RESET (RID_EXTERN, specbits);
7138 RIDBIT_RESET (RID_THREAD, specbits);
7141 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
7143 if (toplevel_bindings_p ())
7145 /* It's common practice (and completely valid) to have a const
7146 be initialized and declared extern. */
7147 if (!(type_quals & TYPE_QUAL_CONST))
7148 warning ("`%s' initialized and declared `extern'", name);
7150 else
7151 error ("`%s' has both `extern' and initializer", name);
7153 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
7154 && ! toplevel_bindings_p ())
7155 error ("nested function `%s' declared `extern'", name);
7156 else if (toplevel_bindings_p ())
7158 if (RIDBIT_SETP (RID_AUTO, specbits))
7159 error ("top-level declaration of `%s' specifies `auto'", name);
7161 else if (RIDBIT_SETP (RID_THREAD, specbits)
7162 && !RIDBIT_SETP (RID_EXTERN, specbits)
7163 && !RIDBIT_SETP (RID_STATIC, specbits))
7165 error ("function-scope `%s' implicitly auto and declared `__thread'",
7166 name);
7167 RIDBIT_RESET (RID_THREAD, specbits);
7170 if (nclasses > 0 && friendp)
7171 error ("storage class specifiers invalid in friend function declarations");
7173 scope = get_scope_of_declarator (declarator);
7175 /* Now figure out the structure of the declarator proper.
7176 Descend through it, creating more complex types, until we reach
7177 the declared identifier (or NULL_TREE, in an abstract declarator). */
7179 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
7180 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
7182 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
7183 an INDIRECT_REF (for *...),
7184 a CALL_EXPR (for ...(...)),
7185 an identifier (for the name being declared)
7186 or a null pointer (for the place in an absolute declarator
7187 where the name was omitted).
7188 For the last two cases, we have just exited the loop.
7190 For C++ it could also be
7191 a SCOPE_REF (for class :: ...). In this case, we have converted
7192 sensible names to types, and those are the values we use to
7193 qualify the member name.
7194 an ADDR_EXPR (for &...),
7195 a BIT_NOT_EXPR (for destructors)
7197 At this point, TYPE is the type of elements of an array,
7198 or for a function to return, or for a pointer to point to.
7199 After this sequence of ifs, TYPE is the type of the
7200 array or function or pointer, and DECLARATOR has had its
7201 outermost layer removed. */
7203 if (type == error_mark_node)
7205 if (declarator == error_mark_node)
7206 return error_mark_node;
7207 else if (TREE_CODE (declarator) == SCOPE_REF)
7208 declarator = TREE_OPERAND (declarator, 1);
7209 else
7210 declarator = TREE_OPERAND (declarator, 0);
7211 continue;
7213 if (quals != NULL_TREE
7214 && (declarator == NULL_TREE
7215 || TREE_CODE (declarator) != SCOPE_REF))
7217 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
7218 ctype = TYPE_METHOD_BASETYPE (type);
7219 if (ctype != NULL_TREE)
7221 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7222 grok_method_quals (ctype, dummy, quals);
7223 type = TREE_TYPE (dummy);
7224 quals = NULL_TREE;
7228 switch (TREE_CODE (declarator))
7230 case TREE_LIST:
7232 /* We encode a declarator with embedded attributes using
7233 a TREE_LIST. */
7234 tree attrs = TREE_PURPOSE (declarator);
7235 tree inner_decl;
7236 int attr_flags;
7238 declarator = TREE_VALUE (declarator);
7239 inner_decl = declarator;
7240 while (inner_decl != NULL_TREE
7241 && TREE_CODE (inner_decl) == TREE_LIST)
7242 inner_decl = TREE_VALUE (inner_decl);
7243 attr_flags = 0;
7244 if (inner_decl == NULL_TREE
7245 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
7246 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7247 if (TREE_CODE (inner_decl) == CALL_EXPR)
7248 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7249 if (TREE_CODE (inner_decl) == ARRAY_REF)
7250 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7251 returned_attrs = decl_attributes (&type,
7252 chainon (returned_attrs, attrs),
7253 attr_flags);
7255 break;
7257 case ARRAY_REF:
7259 tree size = TREE_OPERAND (declarator, 1);
7260 declarator = TREE_OPERAND (declarator, 0);
7262 type = create_array_type_for_decl (dname, type, size);
7264 if (declarator
7265 && (TREE_CODE (declarator) == INDIRECT_REF
7266 || TREE_CODE (declarator) == ADDR_EXPR))
7267 /* We can never complete an array type which is the target of a
7268 pointer, so go ahead and lay it out. */
7269 layout_type (type);
7271 ctype = NULL_TREE;
7273 break;
7275 case CALL_EXPR:
7277 tree arg_types;
7278 int funcdecl_p;
7279 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
7280 tree inner_decl = TREE_OPERAND (declarator, 0);
7282 /* Declaring a function type.
7283 Make sure we have a valid type for the function to return. */
7285 /* We now know that the TYPE_QUALS don't apply to the
7286 decl, but to its return type. */
7287 type_quals = TYPE_UNQUALIFIED;
7289 /* Warn about some types functions can't return. */
7291 if (TREE_CODE (type) == FUNCTION_TYPE)
7293 error ("`%s' declared as function returning a function", name);
7294 type = integer_type_node;
7296 if (TREE_CODE (type) == ARRAY_TYPE)
7298 error ("`%s' declared as function returning an array", name);
7299 type = integer_type_node;
7302 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
7303 inner_decl = TREE_OPERAND (inner_decl, 1);
7305 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
7306 inner_decl = dname;
7308 /* Pick up type qualifiers which should be applied to `this'. */
7309 quals = CALL_DECLARATOR_QUALS (declarator);
7311 /* Pick up the exception specifications. */
7312 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
7314 /* Say it's a definition only for the CALL_EXPR
7315 closest to the identifier. */
7316 funcdecl_p
7317 = inner_decl
7318 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
7319 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
7320 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
7322 if (ctype == NULL_TREE
7323 && decl_context == FIELD
7324 && funcdecl_p
7325 && (friendp == 0 || dname == current_class_name))
7326 ctype = current_class_type;
7328 if (ctype && sfk == sfk_conversion)
7329 TYPE_HAS_CONVERSION (ctype) = 1;
7330 if (ctype && constructor_name_p (dname, ctype))
7332 /* We are within a class's scope. If our declarator name
7333 is the same as the class name, and we are defining
7334 a function, then it is a constructor/destructor, and
7335 therefore returns a void type. */
7337 if (flags == DTOR_FLAG)
7339 /* ISO C++ 12.4/2. A destructor may not be
7340 declared const or volatile. A destructor may
7341 not be static. */
7342 if (staticp == 2)
7343 error ("destructor cannot be static member function");
7344 if (quals)
7346 error ("destructors may not be `%s'",
7347 IDENTIFIER_POINTER (TREE_VALUE (quals)));
7348 quals = NULL_TREE;
7350 if (decl_context == FIELD)
7352 if (! member_function_or_else (ctype,
7353 current_class_type,
7354 flags))
7355 return void_type_node;
7358 else /* It's a constructor. */
7360 if (explicitp == 1)
7361 explicitp = 2;
7362 /* ISO C++ 12.1. A constructor may not be
7363 declared const or volatile. A constructor may
7364 not be virtual. A constructor may not be
7365 static. */
7366 if (staticp == 2)
7367 error ("constructor cannot be static member function");
7368 if (virtualp)
7370 pedwarn ("constructors cannot be declared virtual");
7371 virtualp = 0;
7373 if (quals)
7375 error ("constructors may not be `%s'",
7376 IDENTIFIER_POINTER (TREE_VALUE (quals)));
7377 quals = NULL_TREE;
7380 RID_BIT_TYPE tmp_bits;
7381 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
7382 RIDBIT_RESET (RID_INLINE, tmp_bits);
7383 RIDBIT_RESET (RID_STATIC, tmp_bits);
7384 if (RIDBIT_ANY_SET (tmp_bits))
7385 error ("return value type specifier for constructor ignored");
7387 if (decl_context == FIELD)
7389 if (! member_function_or_else (ctype,
7390 current_class_type,
7391 flags))
7392 return void_type_node;
7393 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7394 if (sfk != sfk_constructor)
7395 return NULL_TREE;
7398 if (decl_context == FIELD)
7399 staticp = 0;
7401 else if (friendp)
7403 if (initialized)
7404 error ("can't initialize friend function `%s'", name);
7405 if (virtualp)
7407 /* Cannot be both friend and virtual. */
7408 error ("virtual functions cannot be friends");
7409 RIDBIT_RESET (RID_FRIEND, specbits);
7410 friendp = 0;
7412 if (decl_context == NORMAL)
7413 error ("friend declaration not in class definition");
7414 if (current_function_decl && funcdef_flag)
7415 error ("can't define friend function `%s' in a local class definition",
7416 name);
7419 /* Construct the function type and go to the next
7420 inner layer of declarator. */
7422 declarator = TREE_OPERAND (declarator, 0);
7424 arg_types = grokparms (inner_parms, &parms);
7426 if (declarator && flags == DTOR_FLAG)
7428 /* A destructor declared in the body of a class will
7429 be represented as a BIT_NOT_EXPR. But, we just
7430 want the underlying IDENTIFIER. */
7431 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
7432 declarator = TREE_OPERAND (declarator, 0);
7434 if (arg_types != void_list_node)
7436 error ("destructors may not have parameters");
7437 arg_types = void_list_node;
7438 parms = NULL_TREE;
7442 /* ANSI says that `const int foo ();'
7443 does not make the function foo const. */
7444 type = build_function_type (type, arg_types);
7446 break;
7448 case ADDR_EXPR:
7449 case INDIRECT_REF:
7450 /* Filter out pointers-to-references and references-to-references.
7451 We can get these if a TYPE_DECL is used. */
7453 if (TREE_CODE (type) == REFERENCE_TYPE)
7455 error (TREE_CODE (declarator) == ADDR_EXPR
7456 ? "cannot declare reference to `%#T'"
7457 : "cannot declare pointer to `%#T'", type);
7458 type = TREE_TYPE (type);
7460 else if (VOID_TYPE_P (type)
7461 && (ctype || TREE_CODE (declarator) == ADDR_EXPR))
7462 error (ctype ? "cannot declare pointer to `%#T' member"
7463 : "cannot declare reference to `%#T'", type);
7465 /* Merge any constancy or volatility into the target type
7466 for the pointer. */
7468 /* We now know that the TYPE_QUALS don't apply to the decl,
7469 but to the target of the pointer. */
7470 type_quals = TYPE_UNQUALIFIED;
7472 if (TREE_CODE (declarator) == ADDR_EXPR)
7474 if (!VOID_TYPE_P (type))
7475 type = build_reference_type (type);
7477 else if (TREE_CODE (type) == METHOD_TYPE)
7478 type = build_ptrmemfunc_type (build_pointer_type (type));
7479 else if (ctype)
7480 type = build_ptrmem_type (ctype, type);
7481 else
7482 type = build_pointer_type (type);
7484 /* Process a list of type modifier keywords (such as
7485 const or volatile) that were given inside the `*' or `&'. */
7487 if (TREE_TYPE (declarator))
7489 tree typemodlist;
7490 int erred = 0;
7491 int constp = 0;
7492 int volatilep = 0;
7493 int restrictp = 0;
7495 for (typemodlist = TREE_TYPE (declarator); typemodlist;
7496 typemodlist = TREE_CHAIN (typemodlist))
7498 tree qualifier = TREE_VALUE (typemodlist);
7500 if (qualifier == ridpointers[(int) RID_CONST])
7502 constp++;
7503 type_quals |= TYPE_QUAL_CONST;
7505 else if (qualifier == ridpointers[(int) RID_VOLATILE])
7507 volatilep++;
7508 type_quals |= TYPE_QUAL_VOLATILE;
7510 else if (qualifier == ridpointers[(int) RID_RESTRICT])
7512 restrictp++;
7513 type_quals |= TYPE_QUAL_RESTRICT;
7515 else if (!erred)
7517 erred = 1;
7518 error ("invalid type modifier within pointer declarator");
7521 if (constp > 1)
7522 pedwarn ("duplicate `const'");
7523 if (volatilep > 1)
7524 pedwarn ("duplicate `volatile'");
7525 if (restrictp > 1)
7526 pedwarn ("duplicate `restrict'");
7527 type = cp_build_qualified_type (type, type_quals);
7528 type_quals = cp_type_quals (type);
7530 declarator = TREE_OPERAND (declarator, 0);
7531 ctype = NULL_TREE;
7532 break;
7534 case SCOPE_REF:
7536 /* We have converted type names to NULL_TREE if the
7537 name was bogus, or to a _TYPE node, if not.
7539 The variable CTYPE holds the type we will ultimately
7540 resolve to. The code here just needs to build
7541 up appropriate member types. */
7542 tree sname = TREE_OPERAND (declarator, 1);
7543 tree t;
7545 /* Destructors can have their visibilities changed as well. */
7546 if (TREE_CODE (sname) == BIT_NOT_EXPR)
7547 sname = TREE_OPERAND (sname, 0);
7549 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
7551 /* We had a reference to a global decl, or
7552 perhaps we were given a non-aggregate typedef,
7553 in which case we cleared this out, and should just
7554 keep going as though it wasn't there. */
7555 declarator = sname;
7556 continue;
7558 ctype = TREE_OPERAND (declarator, 0);
7560 t = ctype;
7561 while (t != NULL_TREE && CLASS_TYPE_P (t))
7563 /* You're supposed to have one `template <...>'
7564 for every template class, but you don't need one
7565 for a full specialization. For example:
7567 template <class T> struct S{};
7568 template <> struct S<int> { void f(); };
7569 void S<int>::f () {}
7571 is correct; there shouldn't be a `template <>' for
7572 the definition of `S<int>::f'. */
7573 if (CLASSTYPE_TEMPLATE_INFO (t)
7574 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7575 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7576 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7577 template_count += 1;
7579 t = TYPE_MAIN_DECL (t);
7580 t = DECL_CONTEXT (t);
7583 if (sname == NULL_TREE)
7584 goto done_scoping;
7586 if (TREE_CODE (sname) == IDENTIFIER_NODE)
7588 /* This is the `standard' use of the scoping operator:
7589 basetype :: member . */
7591 if (ctype == current_class_type)
7593 /* class A {
7594 void A::f ();
7597 Is this ill-formed? */
7599 if (pedantic)
7600 pedwarn ("extra qualification `%T::' on member `%s' ignored",
7601 ctype, name);
7603 else if (TREE_CODE (type) == FUNCTION_TYPE)
7605 if (NEW_DELETE_OPNAME_P (sname))
7606 /* Overloaded operator new and operator delete
7607 are always static functions. */
7609 else if (current_class_type == NULL_TREE || friendp)
7610 type
7611 = build_method_type_directly (ctype,
7612 TREE_TYPE (type),
7613 TYPE_ARG_TYPES (type));
7614 else
7616 error ("cannot declare member function `%T::%s' within `%T'",
7617 ctype, name, current_class_type);
7618 return error_mark_node;
7621 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
7622 || COMPLETE_TYPE_P (complete_type (ctype)))
7624 /* Have to move this code elsewhere in this function.
7625 this code is used for i.e., typedef int A::M; M *pm;
7627 It is? How? jason 10/2/94 */
7629 if (current_class_type)
7631 error ("cannot declare member `%T::%s' within `%T'",
7632 ctype, name, current_class_type);
7633 return void_type_node;
7636 else
7638 cxx_incomplete_type_error (NULL_TREE, ctype);
7639 return error_mark_node;
7642 declarator = sname;
7644 else if (TREE_CODE (sname) == SCOPE_REF)
7645 abort ();
7646 else
7648 done_scoping:
7649 declarator = TREE_OPERAND (declarator, 1);
7650 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
7651 /* In this case, we will deal with it later. */
7653 else if (TREE_CODE (type) == FUNCTION_TYPE)
7654 type = build_method_type_directly (ctype,
7655 TREE_TYPE (type),
7656 TYPE_ARG_TYPES (type));
7659 break;
7661 case BIT_NOT_EXPR:
7662 declarator = TREE_OPERAND (declarator, 0);
7663 break;
7665 case BASELINK:
7666 declarator = BASELINK_FUNCTIONS (declarator);
7667 break;
7669 case RECORD_TYPE:
7670 case UNION_TYPE:
7671 case ENUMERAL_TYPE:
7672 declarator = NULL_TREE;
7673 break;
7675 case ERROR_MARK:
7676 declarator = NULL_TREE;
7677 break;
7679 default:
7680 abort ();
7684 if (returned_attrs)
7686 if (attrlist)
7687 *attrlist = chainon (returned_attrs, *attrlist);
7688 else
7689 attrlist = &returned_attrs;
7692 /* Now TYPE has the actual type. */
7694 /* Did array size calculations overflow? */
7696 if (TREE_CODE (type) == ARRAY_TYPE
7697 && COMPLETE_TYPE_P (type)
7698 && TREE_OVERFLOW (TYPE_SIZE (type)))
7700 error ("size of array `%s' is too large", name);
7701 /* If we proceed with the array type as it is, we'll eventually
7702 crash in tree_low_cst(). */
7703 type = error_mark_node;
7706 if ((decl_context == FIELD || decl_context == PARM)
7707 && !processing_template_decl
7708 && variably_modified_type_p (type))
7710 if (decl_context == FIELD)
7711 error ("data member may not have variably modified type `%T'", type);
7712 else
7713 error ("parameter may not have variably modified type `%T'", type);
7714 type = error_mark_node;
7717 if (explicitp == 1 || (explicitp && friendp))
7719 /* [dcl.fct.spec] The explicit specifier shall only be used in
7720 declarations of constructors within a class definition. */
7721 error ("only declarations of constructors can be `explicit'");
7722 explicitp = 0;
7725 if (RIDBIT_SETP (RID_MUTABLE, specbits))
7727 if (decl_context != FIELD || friendp)
7729 error ("non-member `%s' cannot be declared `mutable'", name);
7730 RIDBIT_RESET (RID_MUTABLE, specbits);
7732 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
7734 error ("non-object member `%s' cannot be declared `mutable'", name);
7735 RIDBIT_RESET (RID_MUTABLE, specbits);
7737 else if (TREE_CODE (type) == FUNCTION_TYPE
7738 || TREE_CODE (type) == METHOD_TYPE)
7740 error ("function `%s' cannot be declared `mutable'", name);
7741 RIDBIT_RESET (RID_MUTABLE, specbits);
7743 else if (staticp)
7745 error ("static `%s' cannot be declared `mutable'", name);
7746 RIDBIT_RESET (RID_MUTABLE, specbits);
7748 else if (type_quals & TYPE_QUAL_CONST)
7750 error ("const `%s' cannot be declared `mutable'", name);
7751 RIDBIT_RESET (RID_MUTABLE, specbits);
7755 if (declarator == NULL_TREE
7756 || TREE_CODE (declarator) == ERROR_MARK
7757 || TREE_CODE (declarator) == IDENTIFIER_NODE
7758 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
7759 && (TREE_CODE (type) == FUNCTION_TYPE
7760 || TREE_CODE (type) == METHOD_TYPE)))
7761 /* OK */;
7762 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
7764 error ("template-id `%D' used as a declarator", declarator);
7765 declarator = dname;
7767 else
7768 /* Unexpected declarator format. */
7769 abort ();
7771 /* If this is declaring a typedef name, return a TYPE_DECL. */
7773 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
7775 tree decl;
7777 /* Note that the grammar rejects storage classes
7778 in typenames, fields or parameters. */
7779 if (current_lang_name == lang_name_java)
7780 TYPE_FOR_JAVA (type) = 1;
7782 if (decl_context == FIELD)
7784 if (constructor_name_p (declarator, current_class_type))
7785 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
7786 declarator);
7787 decl = build_lang_decl (TYPE_DECL, declarator, type);
7789 else
7791 decl = build_decl (TYPE_DECL, declarator, type);
7792 if (in_namespace || ctype)
7793 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7794 if (!current_function_decl)
7795 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7798 /* If the user declares "typedef struct {...} foo" then the
7799 struct will have an anonymous name. Fill that name in now.
7800 Nothing can refer to it, so nothing needs know about the name
7801 change. */
7802 if (type != error_mark_node
7803 && declarator
7804 && TYPE_NAME (type)
7805 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7806 && TYPE_ANONYMOUS_P (type)
7807 /* Don't do this if there are attributes. */
7808 && (!attrlist || !*attrlist)
7809 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7811 tree oldname = TYPE_NAME (type);
7812 tree t;
7814 /* Replace the anonymous name with the real name everywhere. */
7815 lookup_tag_reverse (type, declarator);
7816 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7817 if (TYPE_NAME (t) == oldname)
7818 TYPE_NAME (t) = decl;
7820 if (TYPE_LANG_SPECIFIC (type))
7821 TYPE_WAS_ANONYMOUS (type) = 1;
7823 /* If this is a typedef within a template class, the nested
7824 type is a (non-primary) template. The name for the
7825 template needs updating as well. */
7826 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7827 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7828 = TYPE_IDENTIFIER (type);
7830 /* FIXME remangle member functions; member functions of a
7831 type with external linkage have external linkage. */
7834 if (quals)
7836 if (ctype == NULL_TREE)
7838 if (TREE_CODE (type) != METHOD_TYPE)
7839 error ("%Jinvalid type qualifier for non-member function type",
7840 decl);
7841 else
7842 ctype = TYPE_METHOD_BASETYPE (type);
7844 if (ctype != NULL_TREE)
7845 grok_method_quals (ctype, decl, quals);
7848 if (RIDBIT_SETP (RID_SIGNED, specbits)
7849 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7850 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7852 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
7853 inlinep, friendp, raises != NULL_TREE);
7855 return decl;
7858 /* Detect the case of an array type of unspecified size
7859 which came, as such, direct from a typedef name.
7860 We must copy the type, so that the array's domain can be
7861 individually set by the object's initializer. */
7863 if (type && typedef_type
7864 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7865 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7866 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7868 /* Detect where we're using a typedef of function type to declare a
7869 function. PARMS will not be set, so we must create it now. */
7871 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7873 tree decls = NULL_TREE;
7874 tree args;
7876 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7878 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7880 TREE_CHAIN (decl) = decls;
7881 decls = decl;
7884 parms = nreverse (decls);
7887 /* If this is a type name (such as, in a cast or sizeof),
7888 compute the type and return it now. */
7890 if (decl_context == TYPENAME)
7892 /* Note that the grammar rejects storage classes
7893 in typenames, fields or parameters. */
7894 if (type_quals != TYPE_UNQUALIFIED)
7895 type_quals = TYPE_UNQUALIFIED;
7897 /* Special case: "friend class foo" looks like a TYPENAME context. */
7898 if (friendp)
7900 if (type_quals != TYPE_UNQUALIFIED)
7902 error ("type qualifiers specified for friend class declaration");
7903 type_quals = TYPE_UNQUALIFIED;
7905 if (inlinep)
7907 error ("`inline' specified for friend class declaration");
7908 inlinep = 0;
7911 if (!current_aggr)
7913 /* Don't allow friend declaration without a class-key. */
7914 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7915 pedwarn ("template parameters cannot be friends");
7916 else if (TREE_CODE (type) == TYPENAME_TYPE)
7917 pedwarn ("friend declaration requires class-key, "
7918 "i.e. `friend class %T::%D'",
7919 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7920 else
7921 pedwarn ("friend declaration requires class-key, "
7922 "i.e. `friend %#T'",
7923 type);
7926 /* Only try to do this stuff if we didn't already give up. */
7927 if (type != integer_type_node)
7929 /* A friendly class? */
7930 if (current_class_type)
7931 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7932 /*complain=*/true);
7933 else
7934 error ("trying to make class `%T' a friend of global scope",
7935 type);
7937 type = void_type_node;
7940 else if (quals)
7942 if (ctype == NULL_TREE)
7944 if (TREE_CODE (type) != METHOD_TYPE)
7945 error ("invalid qualifiers on non-member function type");
7946 else
7947 ctype = TYPE_METHOD_BASETYPE (type);
7949 if (ctype)
7951 tree dummy = build_decl (TYPE_DECL, declarator, type);
7952 grok_method_quals (ctype, dummy, quals);
7953 type = TREE_TYPE (dummy);
7957 return type;
7959 else if (declarator == NULL_TREE && decl_context != PARM
7960 && decl_context != CATCHPARM
7961 && TREE_CODE (type) != UNION_TYPE
7962 && ! bitfield)
7964 error ("abstract declarator `%T' used as declaration", type);
7965 declarator = make_anon_name ();
7968 /* `void' at top level (not within pointer)
7969 is allowed only in typedefs or type names.
7970 We don't complain about parms either, but that is because
7971 a better error message can be made later. */
7973 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
7975 if (! declarator)
7976 error ("unnamed variable or field declared void");
7977 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
7979 if (IDENTIFIER_OPNAME_P (declarator))
7980 abort ();
7981 else
7982 error ("variable or field `%s' declared void", name);
7984 else
7985 error ("variable or field declared void");
7986 type = integer_type_node;
7989 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7990 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7992 if (decl_context == PARM || decl_context == CATCHPARM)
7994 if (ctype || in_namespace)
7995 error ("cannot use `::' in parameter declaration");
7997 /* A parameter declared as an array of T is really a pointer to T.
7998 One declared as a function is really a pointer to a function.
7999 One declared as a member is really a pointer to member. */
8001 if (TREE_CODE (type) == ARRAY_TYPE)
8003 /* Transfer const-ness of array into that of type pointed to. */
8004 type = build_pointer_type (TREE_TYPE (type));
8005 type_quals = TYPE_UNQUALIFIED;
8007 else if (TREE_CODE (type) == FUNCTION_TYPE)
8008 type = build_pointer_type (type);
8012 tree decl;
8014 if (decl_context == PARM)
8016 decl = cp_build_parm_decl (declarator, type);
8018 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
8019 inlinep, friendp, raises != NULL_TREE);
8021 else if (decl_context == FIELD)
8023 /* The C99 flexible array extension. */
8024 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8025 && TYPE_DOMAIN (type) == NULL_TREE)
8027 tree itype = compute_array_index_type (dname, integer_zero_node);
8028 type = build_cplus_array_type (TREE_TYPE (type), itype);
8031 if (type == error_mark_node)
8033 /* Happens when declaring arrays of sizes which
8034 are error_mark_node, for example. */
8035 decl = NULL_TREE;
8037 else if (in_namespace && !friendp)
8039 /* Something like struct S { int N::j; }; */
8040 error ("invalid use of `::'");
8041 decl = NULL_TREE;
8043 else if (TREE_CODE (type) == FUNCTION_TYPE)
8045 int publicp = 0;
8046 tree function_context;
8048 /* We catch the others as conflicts with the builtin
8049 typedefs. */
8050 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
8052 error ("function `%D' cannot be declared friend",
8053 declarator);
8054 friendp = 0;
8057 if (friendp == 0)
8059 if (ctype == NULL_TREE)
8060 ctype = current_class_type;
8062 if (ctype == NULL_TREE)
8064 error ("can't make `%D' into a method -- not in a class",
8065 declarator);
8066 return void_type_node;
8069 /* ``A union may [ ... ] not [ have ] virtual functions.''
8070 ARM 9.5 */
8071 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8073 error ("function `%D' declared virtual inside a union",
8074 declarator);
8075 return void_type_node;
8078 if (NEW_DELETE_OPNAME_P (declarator))
8080 if (virtualp)
8082 error ("`%D' cannot be declared virtual, since it is always static",
8083 declarator);
8084 virtualp = 0;
8087 else if (staticp < 2)
8088 type = build_method_type_directly (ctype,
8089 TREE_TYPE (type),
8090 TYPE_ARG_TYPES (type));
8093 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
8094 function_context = (ctype != NULL_TREE) ?
8095 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8096 publicp = (! friendp || ! staticp)
8097 && function_context == NULL_TREE;
8098 decl = grokfndecl (ctype, type,
8099 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
8100 ? declarator : dname,
8101 parms,
8102 declarator,
8103 virtualp, flags, quals, raises,
8104 friendp ? -1 : 0, friendp, publicp, inlinep,
8105 funcdef_flag, template_count, in_namespace);
8106 if (decl == NULL_TREE)
8107 return decl;
8108 #if 0
8109 /* This clobbers the attrs stored in `decl' from `attrlist'. */
8110 /* The decl and setting of decl_attr is also turned off. */
8111 decl = build_decl_attribute_variant (decl, decl_attr);
8112 #endif
8114 /* [class.conv.ctor]
8116 A constructor declared without the function-specifier
8117 explicit that can be called with a single parameter
8118 specifies a conversion from the type of its first
8119 parameter to the type of its class. Such a constructor
8120 is called a converting constructor. */
8121 if (explicitp == 2)
8122 DECL_NONCONVERTING_P (decl) = 1;
8123 else if (DECL_CONSTRUCTOR_P (decl))
8125 /* The constructor can be called with exactly one
8126 parameter if there is at least one parameter, and
8127 any subsequent parameters have default arguments.
8128 Ignore any compiler-added parms. */
8129 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8131 if (arg_types == void_list_node
8132 || (arg_types
8133 && TREE_CHAIN (arg_types)
8134 && TREE_CHAIN (arg_types) != void_list_node
8135 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8136 DECL_NONCONVERTING_P (decl) = 1;
8139 else if (TREE_CODE (type) == METHOD_TYPE)
8141 /* We only get here for friend declarations of
8142 members of other classes. */
8143 /* All method decls are public, so tell grokfndecl to set
8144 TREE_PUBLIC, also. */
8145 decl = grokfndecl (ctype, type,
8146 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
8147 ? declarator : dname,
8148 parms,
8149 declarator,
8150 virtualp, flags, quals, raises,
8151 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
8152 template_count, in_namespace);
8153 if (decl == NULL_TREE)
8154 return NULL_TREE;
8156 else if (!staticp && !dependent_type_p (type)
8157 && !COMPLETE_TYPE_P (complete_type (type))
8158 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8160 if (declarator)
8161 error ("field `%D' has incomplete type", declarator);
8162 else
8163 error ("name `%T' has incomplete type", type);
8165 /* If we're instantiating a template, tell them which
8166 instantiation made the field's type be incomplete. */
8167 if (current_class_type
8168 && TYPE_NAME (current_class_type)
8169 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8170 && declspecs && TREE_VALUE (declspecs)
8171 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8172 error (" in instantiation of template `%T'",
8173 current_class_type);
8175 type = error_mark_node;
8176 decl = NULL_TREE;
8178 else
8180 if (friendp)
8182 error ("`%s' is neither function nor member function; cannot be declared friend",
8183 IDENTIFIER_POINTER (declarator));
8184 friendp = 0;
8186 decl = NULL_TREE;
8189 if (friendp)
8191 /* Friends are treated specially. */
8192 if (ctype == current_class_type)
8193 warning ("member functions are implicitly friends of their class");
8194 else if (decl && DECL_NAME (decl))
8196 if (template_class_depth (current_class_type) == 0)
8198 decl = check_explicit_specialization
8199 (declarator, decl, template_count,
8200 2 * (funcdef_flag != 0) + 4);
8201 if (decl == error_mark_node)
8202 return error_mark_node;
8205 decl = do_friend (ctype, declarator, decl,
8206 *attrlist, flags, quals, funcdef_flag);
8207 return decl;
8209 else
8210 return void_type_node;
8213 /* Structure field. It may not be a function, except for C++. */
8215 if (decl == NULL_TREE)
8217 if (initialized)
8219 if (!staticp)
8221 /* An attempt is being made to initialize a non-static
8222 member. But, from [class.mem]:
8224 4 A member-declarator can contain a
8225 constant-initializer only if it declares a static
8226 member (_class.static_) of integral or enumeration
8227 type, see _class.static.data_.
8229 This used to be relatively common practice, but
8230 the rest of the compiler does not correctly
8231 handle the initialization unless the member is
8232 static so we make it static below. */
8233 pedwarn ("ISO C++ forbids initialization of member `%D'",
8234 declarator);
8235 pedwarn ("making `%D' static", declarator);
8236 staticp = 1;
8239 if (uses_template_parms (type))
8240 /* We'll check at instantiation time. */
8242 else if (check_static_variable_definition (declarator,
8243 type))
8244 /* If we just return the declaration, crashes
8245 will sometimes occur. We therefore return
8246 void_type_node, as if this was a friend
8247 declaration, to cause callers to completely
8248 ignore this declaration. */
8249 return void_type_node;
8252 if (staticp)
8254 /* C++ allows static class members. All other work
8255 for this is done by grokfield. */
8256 decl = build_lang_decl (VAR_DECL, declarator, type);
8257 TREE_STATIC (decl) = 1;
8258 /* In class context, 'static' means public access. */
8259 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8261 else
8263 decl = build_decl (FIELD_DECL, declarator, type);
8264 DECL_NONADDRESSABLE_P (decl) = bitfield;
8265 if (RIDBIT_SETP (RID_MUTABLE, specbits))
8267 DECL_MUTABLE_P (decl) = 1;
8268 RIDBIT_RESET (RID_MUTABLE, specbits);
8272 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
8273 inlinep, friendp, raises != NULL_TREE);
8276 else if (TREE_CODE (type) == FUNCTION_TYPE
8277 || TREE_CODE (type) == METHOD_TYPE)
8279 tree original_name;
8280 int publicp = 0;
8282 if (! declarator)
8283 return NULL_TREE;
8285 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
8286 original_name = dname;
8287 else
8288 original_name = declarator;
8290 if (RIDBIT_SETP (RID_AUTO, specbits))
8291 error ("storage class `auto' invalid for function `%s'", name);
8292 else if (RIDBIT_SETP (RID_REGISTER, specbits))
8293 error ("storage class `register' invalid for function `%s'", name);
8294 else if (RIDBIT_SETP (RID_THREAD, specbits))
8295 error ("storage class `__thread' invalid for function `%s'", name);
8297 /* Function declaration not at top level.
8298 Storage classes other than `extern' are not allowed
8299 and `extern' makes no difference. */
8300 if (! toplevel_bindings_p ()
8301 && (RIDBIT_SETP (RID_STATIC, specbits)
8302 || RIDBIT_SETP (RID_INLINE, specbits))
8303 && pedantic)
8305 if (RIDBIT_SETP (RID_STATIC, specbits))
8306 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8307 else
8308 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8311 if (ctype == NULL_TREE)
8313 if (virtualp)
8315 error ("virtual non-class function `%s'", name);
8316 virtualp = 0;
8319 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8320 && !NEW_DELETE_OPNAME_P (original_name))
8321 type = build_method_type_directly (ctype,
8322 TREE_TYPE (type),
8323 TYPE_ARG_TYPES (type));
8325 /* Record presence of `static'. */
8326 publicp = (ctype != NULL_TREE
8327 || RIDBIT_SETP (RID_EXTERN, specbits)
8328 || !RIDBIT_SETP (RID_STATIC, specbits));
8330 decl = grokfndecl (ctype, type, original_name, parms, declarator,
8331 virtualp, flags, quals, raises,
8332 1, friendp,
8333 publicp, inlinep, funcdef_flag,
8334 template_count, in_namespace);
8335 if (decl == NULL_TREE)
8336 return NULL_TREE;
8338 if (staticp == 1)
8340 int invalid_static = 0;
8342 /* Don't allow a static member function in a class, and forbid
8343 declaring main to be static. */
8344 if (TREE_CODE (type) == METHOD_TYPE)
8346 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8347 invalid_static = 1;
8349 else if (current_function_decl)
8351 /* FIXME need arm citation */
8352 error ("cannot declare static function inside another function");
8353 invalid_static = 1;
8356 if (invalid_static)
8358 staticp = 0;
8359 RIDBIT_RESET (RID_STATIC, specbits);
8363 else
8365 /* It's a variable. */
8367 /* An uninitialized decl with `extern' is a reference. */
8368 decl = grokvardecl (type, declarator, &specbits,
8369 initialized,
8370 (type_quals & TYPE_QUAL_CONST) != 0,
8371 ctype ? ctype : in_namespace);
8372 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
8373 inlinep, friendp, raises != NULL_TREE);
8375 if (ctype)
8377 DECL_CONTEXT (decl) = ctype;
8378 if (staticp == 1)
8380 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
8381 staticp = 0;
8382 RIDBIT_RESET (RID_STATIC, specbits);
8384 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
8386 error ("static member `%D' declared `register'", decl);
8387 RIDBIT_RESET (RID_REGISTER, specbits);
8389 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8391 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
8392 decl);
8393 RIDBIT_RESET (RID_EXTERN, specbits);
8398 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8400 /* Record `register' declaration for warnings on &
8401 and in case doing stupid register allocation. */
8403 if (RIDBIT_SETP (RID_REGISTER, specbits))
8404 DECL_REGISTER (decl) = 1;
8406 if (RIDBIT_SETP (RID_EXTERN, specbits))
8407 DECL_THIS_EXTERN (decl) = 1;
8409 if (RIDBIT_SETP (RID_STATIC, specbits))
8410 DECL_THIS_STATIC (decl) = 1;
8412 /* Record constancy and volatility. There's no need to do this
8413 when processing a template; we'll do this for the instantiated
8414 declaration based on the type of DECL. */
8415 if (!processing_template_decl)
8416 c_apply_type_quals_to_decl (type_quals, decl);
8418 return decl;
8422 /* Subroutine of start_function. Ensure that each of the parameter
8423 types (as listed in PARMS) is complete, as is required for a
8424 function definition. */
8426 static void
8427 require_complete_types_for_parms (tree parms)
8429 for (; parms; parms = TREE_CHAIN (parms))
8431 if (VOID_TYPE_P (TREE_TYPE (parms)))
8432 /* grokparms will have already issued an error. */
8433 TREE_TYPE (parms) = error_mark_node;
8434 else if (complete_type_or_else (TREE_TYPE (parms), parms))
8436 layout_decl (parms, 0);
8437 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8442 /* Returns nonzero if T is a local variable. */
8445 local_variable_p (tree t)
8447 if ((TREE_CODE (t) == VAR_DECL
8448 /* A VAR_DECL with a context that is a _TYPE is a static data
8449 member. */
8450 && !TYPE_P (CP_DECL_CONTEXT (t))
8451 /* Any other non-local variable must be at namespace scope. */
8452 && !DECL_NAMESPACE_SCOPE_P (t))
8453 || (TREE_CODE (t) == PARM_DECL))
8454 return 1;
8456 return 0;
8459 /* Returns nonzero if T is an automatic local variable or a label.
8460 (These are the declarations that need to be remapped when the code
8461 containing them is duplicated.) */
8464 nonstatic_local_decl_p (tree t)
8466 return ((local_variable_p (t) && !TREE_STATIC (t))
8467 || TREE_CODE (t) == LABEL_DECL
8468 || TREE_CODE (t) == RESULT_DECL);
8471 /* Like local_variable_p, but suitable for use as a tree-walking
8472 function. */
8474 static tree
8475 local_variable_p_walkfn (tree* tp,
8476 int* walk_subtrees ATTRIBUTE_UNUSED ,
8477 void* data ATTRIBUTE_UNUSED )
8479 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8480 ? *tp : NULL_TREE);
8483 /* Check that ARG, which is a default-argument expression for a
8484 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8485 something goes wrong. DECL may also be a _TYPE node, rather than a
8486 DECL, if there is no DECL available. */
8488 tree
8489 check_default_argument (tree decl, tree arg)
8491 tree var;
8492 tree decl_type;
8494 if (TREE_CODE (arg) == DEFAULT_ARG)
8495 /* We get a DEFAULT_ARG when looking at an in-class declaration
8496 with a default argument. Ignore the argument for now; we'll
8497 deal with it after the class is complete. */
8498 return arg;
8500 if (processing_template_decl || uses_template_parms (arg))
8501 /* We don't do anything checking until instantiation-time. Note
8502 that there may be uninstantiated arguments even for an
8503 instantiated function, since default arguments are not
8504 instantiated until they are needed. */
8505 return arg;
8507 if (TYPE_P (decl))
8509 decl_type = decl;
8510 decl = NULL_TREE;
8512 else
8513 decl_type = TREE_TYPE (decl);
8515 if (arg == error_mark_node
8516 || decl == error_mark_node
8517 || TREE_TYPE (arg) == error_mark_node
8518 || decl_type == error_mark_node)
8519 /* Something already went wrong. There's no need to check
8520 further. */
8521 return error_mark_node;
8523 /* [dcl.fct.default]
8525 A default argument expression is implicitly converted to the
8526 parameter type. */
8527 if (!TREE_TYPE (arg)
8528 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8530 if (decl)
8531 error ("default argument for `%#D' has type `%T'",
8532 decl, TREE_TYPE (arg));
8533 else
8534 error ("default argument for parameter of type `%T' has type `%T'",
8535 decl_type, TREE_TYPE (arg));
8537 return error_mark_node;
8540 /* [dcl.fct.default]
8542 Local variables shall not be used in default argument
8543 expressions.
8545 The keyword `this' shall not be used in a default argument of a
8546 member function. */
8547 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8548 NULL);
8549 if (var)
8551 error ("default argument `%E' uses local variable `%D'",
8552 arg, var);
8553 return error_mark_node;
8556 /* All is well. */
8557 return arg;
8560 /* Decode the list of parameter types for a function type.
8561 Given the list of things declared inside the parens,
8562 return a list of types.
8564 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
8565 flag. If unset, we append void_list_node. A parmlist declared
8566 as `(void)' is accepted as the empty parmlist.
8568 *PARMS is set to the chain of PARM_DECLs created. */
8570 static tree
8571 grokparms (tree first_parm, tree *parms)
8573 tree result = NULL_TREE;
8574 tree decls = NULL_TREE;
8575 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
8576 tree parm, chain;
8577 int any_error = 0;
8579 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
8581 for (parm = first_parm; parm != NULL_TREE; parm = chain)
8583 tree type = NULL_TREE;
8584 tree decl = TREE_VALUE (parm);
8585 tree init = TREE_PURPOSE (parm);
8586 tree specs, attrs;
8588 chain = TREE_CHAIN (parm);
8589 /* @@ weak defense against parse errors. */
8590 if (TREE_CODE (decl) != VOID_TYPE
8591 && TREE_CODE (decl) != TREE_LIST)
8593 /* Give various messages as the need arises. */
8594 if (TREE_CODE (decl) == STRING_CST)
8595 error ("invalid string constant `%E'", decl);
8596 else if (TREE_CODE (decl) == INTEGER_CST)
8597 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8598 continue;
8601 if (parm == void_list_node)
8602 break;
8604 split_specs_attrs (TREE_PURPOSE (decl), &specs, &attrs);
8605 decl = grokdeclarator (TREE_VALUE (decl), specs,
8606 PARM, init != NULL_TREE, &attrs);
8607 if (! decl || TREE_TYPE (decl) == error_mark_node)
8608 continue;
8610 if (attrs)
8611 cplus_decl_attributes (&decl, attrs, 0);
8613 type = TREE_TYPE (decl);
8614 if (VOID_TYPE_P (type))
8616 if (same_type_p (type, void_type_node)
8617 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
8618 /* this is a parmlist of `(void)', which is ok. */
8619 break;
8620 cxx_incomplete_type_error (decl, type);
8621 /* It's not a good idea to actually create parameters of
8622 type `void'; other parts of the compiler assume that a
8623 void type terminates the parameter list. */
8624 type = error_mark_node;
8625 TREE_TYPE (decl) = error_mark_node;
8628 if (type != error_mark_node)
8630 /* Top-level qualifiers on the parameters are
8631 ignored for function types. */
8632 type = cp_build_qualified_type (type, 0);
8633 if (TREE_CODE (type) == METHOD_TYPE)
8635 error ("parameter `%D' invalidly declared method type", decl);
8636 type = build_pointer_type (type);
8637 TREE_TYPE (decl) = type;
8639 else if (abstract_virtuals_error (decl, type))
8640 any_error = 1; /* Seems like a good idea. */
8641 else if (POINTER_TYPE_P (type))
8643 /* [dcl.fct]/6, parameter types cannot contain pointers
8644 (references) to arrays of unknown bound. */
8645 tree t = TREE_TYPE (type);
8646 int ptr = TYPE_PTR_P (type);
8648 while (1)
8650 if (TYPE_PTR_P (t))
8651 ptr = 1;
8652 else if (TREE_CODE (t) != ARRAY_TYPE)
8653 break;
8654 else if (!TYPE_DOMAIN (t))
8655 break;
8656 t = TREE_TYPE (t);
8658 if (TREE_CODE (t) == ARRAY_TYPE)
8659 error ("parameter `%D' includes %s to array of unknown bound `%T'",
8660 decl, ptr ? "pointer" : "reference", t);
8663 if (!any_error && init)
8664 init = check_default_argument (decl, init);
8665 else
8666 init = NULL_TREE;
8669 TREE_CHAIN (decl) = decls;
8670 decls = decl;
8671 result = tree_cons (init, type, result);
8673 decls = nreverse (decls);
8674 result = nreverse (result);
8675 if (!ellipsis)
8676 result = chainon (result, void_list_node);
8677 *parms = decls;
8679 return result;
8683 /* D is a constructor or overloaded `operator='.
8685 Let T be the class in which D is declared. Then, this function
8686 returns:
8688 -1 if D's is an ill-formed constructor or copy assignment operator
8689 whose first parameter is of type `T'.
8690 0 if D is not a copy constructor or copy assignment
8691 operator.
8692 1 if D is a copy constructor or copy assignment operator whose
8693 first parameter is a reference to const qualified T.
8694 2 if D is a copy constructor or copy assignment operator whose
8695 first parameter is a reference to non-const qualified T.
8697 This function can be used as a predicate. Positive values indicate
8698 a copy constructor and nonzero values indicate a copy assignment
8699 operator. */
8702 copy_fn_p (tree d)
8704 tree args;
8705 tree arg_type;
8706 int result = 1;
8708 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
8710 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
8711 /* Instantiations of template member functions are never copy
8712 functions. Note that member functions of templated classes are
8713 represented as template functions internally, and we must
8714 accept those as copy functions. */
8715 return 0;
8717 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8718 if (!args)
8719 return 0;
8721 arg_type = TREE_VALUE (args);
8723 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8725 /* Pass by value copy assignment operator. */
8726 result = -1;
8728 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8729 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8731 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8732 result = 2;
8734 else
8735 return 0;
8737 args = TREE_CHAIN (args);
8739 if (args && args != void_list_node && !TREE_PURPOSE (args))
8740 /* There are more non-optional args. */
8741 return 0;
8743 return result;
8746 /* Remember any special properties of member function DECL. */
8748 void grok_special_member_properties (tree decl)
8750 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8751 ; /* Not special. */
8752 else if (DECL_CONSTRUCTOR_P (decl))
8754 int ctor = copy_fn_p (decl);
8756 if (ctor > 0)
8758 /* [class.copy]
8760 A non-template constructor for class X is a copy
8761 constructor if its first parameter is of type X&, const
8762 X&, volatile X& or const volatile X&, and either there
8763 are no other parameters or else all other parameters have
8764 default arguments. */
8765 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8766 if (ctor > 1)
8767 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8769 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8770 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8772 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8774 /* [class.copy]
8776 A non-template assignment operator for class X is a copy
8777 assignment operator if its parameter is of type X, X&, const
8778 X&, volatile X& or const volatile X&. */
8780 int assop = copy_fn_p (decl);
8782 if (assop)
8784 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8785 if (assop != 1)
8786 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8787 if (DECL_PURE_VIRTUAL_P (decl))
8788 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8793 /* Check a constructor DECL has the correct form. Complains
8794 if the class has a constructor of the form X(X). */
8797 grok_ctor_properties (tree ctype, tree decl)
8799 int ctor_parm = copy_fn_p (decl);
8801 if (ctor_parm < 0)
8803 /* [class.copy]
8805 A declaration of a constructor for a class X is ill-formed if
8806 its first parameter is of type (optionally cv-qualified) X
8807 and either there are no other parameters or else all other
8808 parameters have default arguments.
8810 We *don't* complain about member template instantiations that
8811 have this form, though; they can occur as we try to decide
8812 what constructor to use during overload resolution. Since
8813 overload resolution will never prefer such a constructor to
8814 the non-template copy constructor (which is either explicitly
8815 or implicitly defined), there's no need to worry about their
8816 existence. Theoretically, they should never even be
8817 instantiated, but that's hard to forestall. */
8818 error ("invalid constructor; you probably meant `%T (const %T&)'",
8819 ctype, ctype);
8820 return 0;
8823 return 1;
8826 /* An operator with this code is unary, but can also be binary. */
8828 static int
8829 ambi_op_p (enum tree_code code)
8831 return (code == INDIRECT_REF
8832 || code == ADDR_EXPR
8833 || code == CONVERT_EXPR
8834 || code == NEGATE_EXPR
8835 || code == PREINCREMENT_EXPR
8836 || code == PREDECREMENT_EXPR);
8839 /* An operator with this name can only be unary. */
8841 static int
8842 unary_op_p (enum tree_code code)
8844 return (code == TRUTH_NOT_EXPR
8845 || code == BIT_NOT_EXPR
8846 || code == COMPONENT_REF
8847 || code == TYPE_EXPR);
8850 /* DECL is a declaration for an overloaded operator. Returns true if
8851 the declaration is valid; false otherwise. If COMPLAIN is true,
8852 errors are issued for invalid declarations. */
8854 bool
8855 grok_op_properties (tree decl, int friendp, bool complain)
8857 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8858 tree argtype;
8859 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8860 tree name = DECL_NAME (decl);
8861 enum tree_code operator_code;
8862 int arity;
8863 bool ok;
8865 /* Assume that the declaration is valid. */
8866 ok = true;
8868 /* Count the number of arguments. */
8869 for (argtype = argtypes, arity = 0;
8870 argtype && argtype != void_list_node;
8871 argtype = TREE_CHAIN (argtype))
8872 ++arity;
8874 if (current_class_type == NULL_TREE)
8875 friendp = 1;
8877 if (DECL_CONV_FN_P (decl))
8878 operator_code = TYPE_EXPR;
8879 else
8882 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8883 if (ansi_opname (CODE) == name) \
8885 operator_code = (CODE); \
8886 break; \
8888 else if (ansi_assopname (CODE) == name) \
8890 operator_code = (CODE); \
8891 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8892 break; \
8895 #include "operators.def"
8896 #undef DEF_OPERATOR
8898 abort ();
8900 while (0);
8901 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
8902 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8904 if (! friendp)
8906 switch (operator_code)
8908 case NEW_EXPR:
8909 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8910 break;
8912 case DELETE_EXPR:
8913 TYPE_GETS_DELETE (current_class_type) |= 1;
8914 break;
8916 case VEC_NEW_EXPR:
8917 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8918 break;
8920 case VEC_DELETE_EXPR:
8921 TYPE_GETS_DELETE (current_class_type) |= 2;
8922 break;
8924 default:
8925 break;
8929 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8930 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8931 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8932 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8933 else
8935 /* An operator function must either be a non-static member function
8936 or have at least one parameter of a class, a reference to a class,
8937 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8938 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8940 if (operator_code == TYPE_EXPR
8941 || operator_code == CALL_EXPR
8942 || operator_code == COMPONENT_REF
8943 || operator_code == ARRAY_REF
8944 || operator_code == NOP_EXPR)
8945 error ("`%D' must be a nonstatic member function", decl);
8946 else
8948 tree p;
8950 if (DECL_STATIC_FUNCTION_P (decl))
8951 error ("`%D' must be either a non-static member function or a non-member function", decl);
8953 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8955 tree arg = non_reference (TREE_VALUE (p));
8956 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8957 because these checks are performed even on
8958 template functions. */
8959 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8960 break;
8963 if (!p || p == void_list_node)
8965 if (!complain)
8966 return false;
8968 error ("`%D' must have an argument of class or "
8969 "enumerated type",
8970 decl);
8971 ok = false;
8976 /* There are no restrictions on the arguments to an overloaded
8977 "operator ()". */
8978 if (operator_code == CALL_EXPR)
8979 return ok;
8981 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
8983 tree t = TREE_TYPE (name);
8984 if (! friendp)
8986 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8987 const char *what = 0;
8989 if (ref)
8990 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8992 if (TREE_CODE (t) == VOID_TYPE)
8993 what = "void";
8994 else if (t == current_class_type)
8995 what = "the same type";
8996 /* Don't force t to be complete here. */
8997 else if (IS_AGGR_TYPE (t)
8998 && COMPLETE_TYPE_P (t)
8999 && DERIVED_FROM_P (t, current_class_type))
9000 what = "a base class";
9002 if (what && warn_conversion)
9003 warning ("conversion to %s%s will never use a type conversion operator",
9004 ref ? "a reference to " : "", what);
9007 if (operator_code == COND_EXPR)
9009 /* 13.4.0.3 */
9010 error ("ISO C++ prohibits overloading operator ?:");
9012 else if (ambi_op_p (operator_code))
9014 if (arity == 1)
9015 /* We pick the one-argument operator codes by default, so
9016 we don't have to change anything. */
9018 else if (arity == 2)
9020 /* If we thought this was a unary operator, we now know
9021 it to be a binary operator. */
9022 switch (operator_code)
9024 case INDIRECT_REF:
9025 operator_code = MULT_EXPR;
9026 break;
9028 case ADDR_EXPR:
9029 operator_code = BIT_AND_EXPR;
9030 break;
9032 case CONVERT_EXPR:
9033 operator_code = PLUS_EXPR;
9034 break;
9036 case NEGATE_EXPR:
9037 operator_code = MINUS_EXPR;
9038 break;
9040 case PREINCREMENT_EXPR:
9041 operator_code = POSTINCREMENT_EXPR;
9042 break;
9044 case PREDECREMENT_EXPR:
9045 operator_code = POSTDECREMENT_EXPR;
9046 break;
9048 default:
9049 abort ();
9052 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9054 if ((operator_code == POSTINCREMENT_EXPR
9055 || operator_code == POSTDECREMENT_EXPR)
9056 && ! processing_template_decl
9057 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9059 if (methodp)
9060 error ("postfix `%D' must take `int' as its argument",
9061 decl);
9062 else
9063 error
9064 ("postfix `%D' must take `int' as its second argument",
9065 decl);
9068 else
9070 if (methodp)
9071 error ("`%D' must take either zero or one argument", decl);
9072 else
9073 error ("`%D' must take either one or two arguments", decl);
9076 /* More Effective C++ rule 6. */
9077 if (warn_ecpp
9078 && (operator_code == POSTINCREMENT_EXPR
9079 || operator_code == POSTDECREMENT_EXPR
9080 || operator_code == PREINCREMENT_EXPR
9081 || operator_code == PREDECREMENT_EXPR))
9083 tree arg = TREE_VALUE (argtypes);
9084 tree ret = TREE_TYPE (TREE_TYPE (decl));
9085 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9086 arg = TREE_TYPE (arg);
9087 arg = TYPE_MAIN_VARIANT (arg);
9088 if (operator_code == PREINCREMENT_EXPR
9089 || operator_code == PREDECREMENT_EXPR)
9091 if (TREE_CODE (ret) != REFERENCE_TYPE
9092 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9093 arg))
9094 warning ("prefix `%D' should return `%T'", decl,
9095 build_reference_type (arg));
9097 else
9099 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9100 warning ("postfix `%D' should return `%T'", decl, arg);
9104 else if (unary_op_p (operator_code))
9106 if (arity != 1)
9108 if (methodp)
9109 error ("`%D' must take `void'", decl);
9110 else
9111 error ("`%D' must take exactly one argument", decl);
9114 else /* if (binary_op_p (operator_code)) */
9116 if (arity != 2)
9118 if (methodp)
9119 error ("`%D' must take exactly one argument", decl);
9120 else
9121 error ("`%D' must take exactly two arguments", decl);
9124 /* More Effective C++ rule 7. */
9125 if (warn_ecpp
9126 && (operator_code == TRUTH_ANDIF_EXPR
9127 || operator_code == TRUTH_ORIF_EXPR
9128 || operator_code == COMPOUND_EXPR))
9129 warning ("user-defined `%D' always evaluates both arguments",
9130 decl);
9133 /* Effective C++ rule 23. */
9134 if (warn_ecpp
9135 && arity == 2
9136 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9137 && (operator_code == PLUS_EXPR
9138 || operator_code == MINUS_EXPR
9139 || operator_code == TRUNC_DIV_EXPR
9140 || operator_code == MULT_EXPR
9141 || operator_code == TRUNC_MOD_EXPR)
9142 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9143 warning ("`%D' should return by value", decl);
9145 /* [over.oper]/8 */
9146 for (; argtypes && argtypes != void_list_node;
9147 argtypes = TREE_CHAIN (argtypes))
9148 if (TREE_PURPOSE (argtypes))
9150 TREE_PURPOSE (argtypes) = NULL_TREE;
9151 if (operator_code == POSTINCREMENT_EXPR
9152 || operator_code == POSTDECREMENT_EXPR)
9154 if (pedantic)
9155 pedwarn ("`%D' cannot have default arguments", decl);
9157 else
9158 error ("`%D' cannot have default arguments", decl);
9163 return ok;
9166 static const char *
9167 tag_name (enum tag_types code)
9169 switch (code)
9171 case record_type:
9172 return "struct";
9173 case class_type:
9174 return "class";
9175 case union_type:
9176 return "union ";
9177 case enum_type:
9178 return "enum";
9179 default:
9180 abort ();
9184 /* Name lookup in an elaborated-type-specifier (after the keyword
9185 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
9186 elaborated-type-specifier is invalid, issue a diagnostic and return
9187 error_mark_node; otherwise, return the *_TYPE to which it referred.
9188 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
9190 tree
9191 check_elaborated_type_specifier (enum tag_types tag_code,
9192 tree decl,
9193 bool allow_template_p)
9195 tree type;
9197 /* In the case of:
9199 struct S { struct S *p; };
9201 name lookup will find the TYPE_DECL for the implicit "S::S"
9202 typedef. Adjust for that here. */
9203 if (DECL_SELF_REFERENCE_P (decl))
9204 decl = TYPE_NAME (TREE_TYPE (decl));
9206 type = TREE_TYPE (decl);
9208 /* [dcl.type.elab]
9210 If the identifier resolves to a typedef-name or a template
9211 type-parameter, the elaborated-type-specifier is ill-formed.
9213 In other words, the only legitimate declaration to use in the
9214 elaborated type specifier is the implicit typedef created when
9215 the type is declared. */
9216 if (!DECL_IMPLICIT_TYPEDEF_P (decl))
9218 error ("using typedef-name `%D' after `%s'", decl, tag_name (tag_code));
9219 return IS_AGGR_TYPE (type) ? type : error_mark_node;
9222 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9224 error ("using template type parameter `%T' after `%s'",
9225 type, tag_name (tag_code));
9226 return error_mark_node;
9228 else if (TREE_CODE (type) != RECORD_TYPE
9229 && TREE_CODE (type) != UNION_TYPE
9230 && tag_code != enum_type)
9232 error ("`%T' referred to as `%s'", type, tag_name (tag_code));
9233 return error_mark_node;
9235 else if (TREE_CODE (type) != ENUMERAL_TYPE
9236 && tag_code == enum_type)
9238 error ("`%T' referred to as enum", type);
9239 return error_mark_node;
9241 else if (!allow_template_p
9242 && TREE_CODE (type) == RECORD_TYPE
9243 && CLASSTYPE_IS_TEMPLATE (type))
9245 /* If a class template appears as elaborated type specifier
9246 without a template header such as:
9248 template <class T> class C {};
9249 void f(class C); // No template header here
9251 then the required template argument is missing. */
9253 error ("template argument required for `%s %T'",
9254 tag_name (tag_code),
9255 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9256 return error_mark_node;
9259 return type;
9262 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9263 Define the tag as a forward-reference if it is not defined.
9265 If a declaration is given, process it here, and report an error if
9266 multiple declarations are not identical.
9268 GLOBALIZE is false when this is also a definition. Only look in
9269 the current frame for the name (since C++ allows new names in any
9270 scope.)
9272 TEMPLATE_HEADER_P is true when this declaration is preceded by
9273 a set of template parameters. */
9275 tree
9276 xref_tag (enum tag_types tag_code, tree name,
9277 bool globalize, bool template_header_p)
9279 enum tree_code code;
9280 tree t;
9281 struct cp_binding_level *b = current_binding_level;
9282 tree context = NULL_TREE;
9284 timevar_push (TV_NAME_LOOKUP);
9286 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 0);
9288 switch (tag_code)
9290 case record_type:
9291 case class_type:
9292 code = RECORD_TYPE;
9293 break;
9294 case union_type:
9295 code = UNION_TYPE;
9296 break;
9297 case enum_type:
9298 code = ENUMERAL_TYPE;
9299 break;
9300 default:
9301 abort ();
9304 if (! globalize)
9306 /* If we know we are defining this tag, only look it up in
9307 this scope and don't try to find it as a type. */
9308 t = lookup_tag (code, name, b, 1);
9310 else
9312 tree decl = lookup_name (name, 2);
9314 if (decl && DECL_CLASS_TEMPLATE_P (decl))
9315 decl = DECL_TEMPLATE_RESULT (decl);
9317 if (decl && TREE_CODE (decl) == TYPE_DECL)
9319 /* Two cases we need to consider when deciding if a class
9320 template is allowed as an elaborated type specifier:
9321 1. It is a self reference to its own class.
9322 2. It comes with a template header.
9324 For example:
9326 template <class T> class C {
9327 class C *c1; // DECL_SELF_REFERENCE_P is true
9328 class D;
9330 template <class U> class C; // template_header_p is true
9331 template <class T> class C<T>::D {
9332 class C *c2; // DECL_SELF_REFERENCE_P is true
9333 }; */
9335 t = check_elaborated_type_specifier (tag_code,
9336 decl,
9337 template_header_p
9338 | DECL_SELF_REFERENCE_P (decl));
9339 if (t == error_mark_node)
9340 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9342 else
9343 t = NULL_TREE;
9345 if (t && current_class_type
9346 && template_class_depth (current_class_type)
9347 && template_header_p)
9349 /* Since GLOBALIZE is nonzero, we are not looking at a
9350 definition of this tag. Since, in addition, we are currently
9351 processing a (member) template declaration of a template
9352 class, we must be very careful; consider:
9354 template <class X>
9355 struct S1
9357 template <class U>
9358 struct S2
9359 { template <class V>
9360 friend struct S1; };
9362 Here, the S2::S1 declaration should not be confused with the
9363 outer declaration. In particular, the inner version should
9364 have a template parameter of level 2, not level 1. This
9365 would be particularly important if the member declaration
9366 were instead:
9368 template <class V = U> friend struct S1;
9370 say, when we should tsubst into `U' when instantiating
9371 S2. On the other hand, when presented with:
9373 template <class T>
9374 struct S1 {
9375 template <class U>
9376 struct S2 {};
9377 template <class U>
9378 friend struct S2;
9381 we must find the inner binding eventually. We
9382 accomplish this by making sure that the new type we
9383 create to represent this declaration has the right
9384 TYPE_CONTEXT. */
9385 context = TYPE_CONTEXT (t);
9386 t = NULL_TREE;
9390 if (! t)
9392 /* If no such tag is yet defined, create a forward-reference node
9393 and record it as the "definition".
9394 When a real declaration of this type is found,
9395 the forward-reference will be altered into a real type. */
9396 if (code == ENUMERAL_TYPE)
9398 error ("use of enum `%#D' without previous declaration", name);
9399 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9401 else
9403 t = make_aggr_type (code);
9404 TYPE_CONTEXT (t) = context;
9405 pushtag (name, t, globalize);
9408 else
9410 if (!globalize && processing_template_decl && IS_AGGR_TYPE (t))
9411 redeclare_class_template (t, current_template_parms);
9414 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9417 tree
9418 xref_tag_from_type (tree old, tree id, int globalize)
9420 enum tag_types tag_kind;
9422 if (TREE_CODE (old) == RECORD_TYPE)
9423 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9424 else
9425 tag_kind = union_type;
9427 if (id == NULL_TREE)
9428 id = TYPE_IDENTIFIER (old);
9430 return xref_tag (tag_kind, id, globalize, false);
9433 /* REF is a type (named NAME), for which we have just seen some
9434 baseclasses. BASE_LIST is a list of those baseclasses; the
9435 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
9436 the base-class. TREE_VIA_VIRTUAL indicates virtual
9437 inheritance. CODE_TYPE_NODE indicates whether REF is a class,
9438 struct, or union. */
9440 void
9441 xref_basetypes (tree ref, tree base_list)
9443 /* In the declaration `A : X, Y, ... Z' we mark all the types
9444 (A, X, Y, ..., Z) so we can check for duplicates. */
9445 tree *basep;
9447 int i;
9448 enum tag_types tag_code;
9450 if (ref == error_mark_node)
9451 return;
9453 if (TREE_CODE (ref) == UNION_TYPE)
9455 error ("derived union `%T' invalid", ref);
9456 return;
9459 tag_code = (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
9461 /* First, make sure that any templates in base-classes are
9462 instantiated. This ensures that if we call ourselves recursively
9463 we do not get confused about which classes are marked and which
9464 are not. */
9465 basep = &base_list;
9466 while (*basep)
9468 tree basetype = TREE_VALUE (*basep);
9469 if (!(processing_template_decl && uses_template_parms (basetype))
9470 && !complete_type_or_else (basetype, NULL))
9471 /* An incomplete type. Remove it from the list. */
9472 *basep = TREE_CHAIN (*basep);
9473 else
9474 basep = &TREE_CHAIN (*basep);
9477 SET_CLASSTYPE_MARKED (ref);
9478 i = list_length (base_list);
9479 if (i)
9481 tree binfo = TYPE_BINFO (ref);
9482 tree binfos = make_tree_vec (i);
9483 tree accesses = make_tree_vec (i);
9485 BINFO_BASETYPES (binfo) = binfos;
9486 BINFO_BASEACCESSES (binfo) = accesses;
9488 for (i = 0; base_list; base_list = TREE_CHAIN (base_list))
9490 tree access = TREE_PURPOSE (base_list);
9491 int via_virtual = TREE_VIA_VIRTUAL (base_list);
9492 tree basetype = TREE_VALUE (base_list);
9493 tree base_binfo;
9495 if (access == access_default_node)
9496 /* The base of a derived struct is public by default. */
9497 access = (tag_code == class_type
9498 ? access_private_node : access_public_node);
9500 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
9501 basetype = TREE_TYPE (basetype);
9502 if (!basetype
9503 || (TREE_CODE (basetype) != RECORD_TYPE
9504 && TREE_CODE (basetype) != TYPENAME_TYPE
9505 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9506 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
9508 error ("base type `%T' fails to be a struct or class type",
9509 basetype);
9510 continue;
9513 if (CLASSTYPE_MARKED (basetype))
9515 if (basetype == ref)
9516 error ("recursive type `%T' undefined", basetype);
9517 else
9518 error ("duplicate base type `%T' invalid", basetype);
9519 continue;
9522 if (TYPE_FOR_JAVA (basetype)
9523 && (current_lang_depth () == 0))
9524 TYPE_FOR_JAVA (ref) = 1;
9526 if (CLASS_TYPE_P (basetype))
9528 base_binfo = TYPE_BINFO (basetype);
9529 /* This flag will be in the binfo of the base type, we must
9530 clear it after copying the base binfos. */
9531 BINFO_DEPENDENT_BASE_P (base_binfo)
9532 = dependent_type_p (basetype);
9534 else
9535 base_binfo = make_binfo (size_zero_node, basetype,
9536 NULL_TREE, NULL_TREE);
9538 TREE_VEC_ELT (binfos, i) = base_binfo;
9539 TREE_VEC_ELT (accesses, i) = access;
9540 /* This flag will be in the binfo of the base type, we must
9541 clear it after copying the base binfos. */
9542 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
9544 SET_CLASSTYPE_MARKED (basetype);
9546 /* We are free to modify these bits because they are meaningless
9547 at top level, and BASETYPE is a top-level type. */
9548 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
9550 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
9551 /* Converting to a virtual base class requires looking
9552 up the offset of the virtual base. */
9553 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9556 if (CLASS_TYPE_P (basetype))
9558 TYPE_HAS_NEW_OPERATOR (ref)
9559 |= TYPE_HAS_NEW_OPERATOR (basetype);
9560 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9561 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9562 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9563 /* If the base-class uses multiple inheritance, so do we. */
9564 TYPE_USES_MULTIPLE_INHERITANCE (ref)
9565 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
9566 /* Likewise, if converting to a base of the base may require
9567 code, then we may need to generate code to convert to a
9568 base as well. */
9569 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
9570 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
9572 i++;
9574 if (i)
9575 TREE_VEC_LENGTH (accesses) = TREE_VEC_LENGTH (binfos) = i;
9576 else
9577 BINFO_BASEACCESSES (binfo) = BINFO_BASETYPES (binfo) = NULL_TREE;
9579 if (i > 1)
9581 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
9582 /* If there is more than one non-empty they cannot be at the same
9583 address. */
9584 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9588 /* Copy the base binfos, collect the virtual bases and set the
9589 inheritance order chain. */
9590 copy_base_binfos (TYPE_BINFO (ref), ref, NULL_TREE);
9591 CLASSTYPE_VBASECLASSES (ref) = nreverse (CLASSTYPE_VBASECLASSES (ref));
9593 if (TYPE_FOR_JAVA (ref))
9595 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
9596 error ("Java class '%T' cannot have multiple bases", ref);
9597 if (CLASSTYPE_VBASECLASSES (ref))
9598 error ("Java class '%T' cannot have virtual bases", ref);
9601 /* Unmark all the types. */
9602 while (i--)
9604 tree basetype = BINFO_TYPE (BINFO_BASETYPE (TYPE_BINFO (ref), i));
9606 CLEAR_CLASSTYPE_MARKED (basetype);
9607 if (CLASS_TYPE_P (basetype))
9609 TREE_VIA_VIRTUAL (TYPE_BINFO (basetype)) = 0;
9610 BINFO_DEPENDENT_BASE_P (TYPE_BINFO (basetype)) = 0;
9613 CLEAR_CLASSTYPE_MARKED (ref);
9617 /* Begin compiling the definition of an enumeration type.
9618 NAME is its name (or null if anonymous).
9619 Returns the type object, as yet incomplete.
9620 Also records info about it so that build_enumerator
9621 may be used to declare the individual values as they are read. */
9623 tree
9624 start_enum (tree name)
9626 tree enumtype = NULL_TREE;
9627 struct cp_binding_level *b = current_binding_level;
9629 /* If this is the real definition for a previous forward reference,
9630 fill in the contents in the same object that used to be the
9631 forward reference. */
9633 if (name != NULL_TREE)
9634 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
9636 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9638 error ("multiple definition of `%#T'", enumtype);
9639 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9640 /* Clear out TYPE_VALUES, and start again. */
9641 TYPE_VALUES (enumtype) = NULL_TREE;
9643 else
9645 enumtype = make_node (ENUMERAL_TYPE);
9646 pushtag (name, enumtype, 0);
9649 return enumtype;
9652 /* After processing and defining all the values of an enumeration type,
9653 install their decls in the enumeration type and finish it off.
9654 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9656 void
9657 finish_enum (tree enumtype)
9659 tree values;
9660 tree decl;
9661 tree value;
9662 tree minnode;
9663 tree maxnode;
9664 tree t;
9665 bool unsignedp;
9666 int lowprec;
9667 int highprec;
9668 int precision;
9669 integer_type_kind itk;
9670 tree underlying_type = NULL_TREE;
9672 /* We built up the VALUES in reverse order. */
9673 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9675 /* For an enum defined in a template, just set the type of the values;
9676 all further processing is postponed until the template is
9677 instantiated. We need to set the type so that tsubst of a CONST_DECL
9678 works. */
9679 if (processing_template_decl)
9681 for (values = TYPE_VALUES (enumtype);
9682 values;
9683 values = TREE_CHAIN (values))
9684 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9685 if (at_function_scope_p ())
9686 add_stmt (build_min (TAG_DEFN, enumtype));
9687 return;
9690 /* Determine the minimum and maximum values of the enumerators. */
9691 if (TYPE_VALUES (enumtype))
9693 minnode = maxnode = NULL_TREE;
9695 for (values = TYPE_VALUES (enumtype);
9696 values;
9697 values = TREE_CHAIN (values))
9699 decl = TREE_VALUE (values);
9701 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9702 each enumerator has the type of its enumeration. Prior to the
9703 closing brace, the type of each enumerator is the type of its
9704 initializing value. */
9705 TREE_TYPE (decl) = enumtype;
9707 /* Update the minimum and maximum values, if appropriate. */
9708 value = DECL_INITIAL (decl);
9709 /* Figure out what the minimum and maximum values of the
9710 enumerators are. */
9711 if (!minnode)
9712 minnode = maxnode = value;
9713 else if (tree_int_cst_lt (maxnode, value))
9714 maxnode = value;
9715 else if (tree_int_cst_lt (value, minnode))
9716 minnode = value;
9718 /* Set the TREE_TYPE for the values as well. That's so that when
9719 we call decl_constant_value we get an entity of the right type
9720 (but with the constant value). But first make a copy so we
9721 don't clobber shared INTEGER_CSTs. */
9722 if (TREE_TYPE (value) != enumtype)
9724 value = DECL_INITIAL (decl) = copy_node (value);
9725 TREE_TYPE (value) = enumtype;
9729 else
9730 /* [dcl.enum]
9732 If the enumerator-list is empty, the underlying type is as if
9733 the enumeration had a single enumerator with value 0. */
9734 minnode = maxnode = integer_zero_node;
9736 /* Compute the number of bits require to represent all values of the
9737 enumeration. We must do this before the type of MINNODE and
9738 MAXNODE are transformed, since min_precision relies on the
9739 TREE_TYPE of the value it is passed. */
9740 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9741 lowprec = min_precision (minnode, unsignedp);
9742 highprec = min_precision (maxnode, unsignedp);
9743 precision = MAX (lowprec, highprec);
9745 /* Determine the underlying type of the enumeration.
9747 [dcl.enum]
9749 The underlying type of an enumeration is an integral type that
9750 can represent all the enumerator values defined in the
9751 enumeration. It is implementation-defined which integral type is
9752 used as the underlying type for an enumeration except that the
9753 underlying type shall not be larger than int unless the value of
9754 an enumerator cannot fit in an int or unsigned int.
9756 We use "int" or an "unsigned int" as the underlying type, even if
9757 a smaller integral type would work, unless the user has
9758 explicitly requested that we use the smallest possible type. */
9759 for (itk = (flag_short_enums ? itk_char : itk_int);
9760 itk != itk_none;
9761 itk++)
9763 underlying_type = integer_types[itk];
9764 if (TYPE_PRECISION (underlying_type) >= precision
9765 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9766 break;
9768 if (itk == itk_none)
9770 /* DR 377
9772 IF no integral type can represent all the enumerator values, the
9773 enumeration is ill-formed. */
9774 error ("no integral type can represent all of the enumerator values "
9775 "for `%T'", enumtype);
9776 precision = TYPE_PRECISION (long_long_integer_type_node);
9777 underlying_type = integer_types[itk_unsigned_long_long];
9780 /* Compute the minium and maximum values for the type.
9782 [dcl.enum]
9784 For an enumeration where emin is the smallest enumerator and emax
9785 is the largest, the values of the enumeration are the values of the
9786 underlying type in the range bmin to bmax, where bmin and bmax are,
9787 respectively, the smallest and largest values of the smallest bit-
9788 field that can store emin and emax. */
9789 TYPE_PRECISION (enumtype) = precision;
9790 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9792 /* [dcl.enum]
9794 The value of sizeof() applied to an enumeration type, an object
9795 of an enumeration type, or an enumerator, is the value of sizeof()
9796 applied to the underlying type. */
9797 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9798 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9799 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9800 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9801 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9802 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9804 /* Convert each of the enumerators to the type of the underlying
9805 type of the enumeration. */
9806 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9808 decl = TREE_VALUE (values);
9809 value = perform_implicit_conversion (underlying_type,
9810 DECL_INITIAL (decl));
9811 TREE_TYPE (value) = enumtype;
9812 DECL_INITIAL (decl) = value;
9813 TREE_VALUE (values) = value;
9816 /* Fix up all variant types of this enum type. */
9817 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9819 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9820 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9821 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9822 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9823 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9824 TYPE_MODE (t) = TYPE_MODE (enumtype);
9825 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9826 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9827 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9828 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9831 /* Finish debugging output for this type. */
9832 rest_of_type_compilation (enumtype, namespace_bindings_p ());
9835 /* Build and install a CONST_DECL for an enumeration constant of the
9836 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9837 Assignment of sequential values by default is handled here. */
9839 void
9840 build_enumerator (tree name, tree value, tree enumtype)
9842 tree decl;
9843 tree context;
9844 tree type;
9846 /* Remove no-op casts from the value. */
9847 if (value)
9848 STRIP_TYPE_NOPS (value);
9850 if (! processing_template_decl)
9852 /* Validate and default VALUE. */
9853 if (value != NULL_TREE)
9855 value = decl_constant_value (value);
9857 if (TREE_CODE (value) == INTEGER_CST)
9859 value = perform_integral_promotions (value);
9860 constant_expression_warning (value);
9862 else
9864 error ("enumerator value for `%D' not integer constant", name);
9865 value = NULL_TREE;
9869 /* Default based on previous value. */
9870 if (value == NULL_TREE)
9872 tree prev_value;
9874 if (TYPE_VALUES (enumtype))
9876 /* The next value is the previous value ... */
9877 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9878 /* ... plus one. */
9879 value = cp_build_binary_op (PLUS_EXPR,
9880 prev_value,
9881 integer_one_node);
9883 if (tree_int_cst_lt (value, prev_value))
9884 error ("overflow in enumeration values at `%D'", name);
9886 else
9887 value = integer_zero_node;
9890 /* Remove no-op casts from the value. */
9891 STRIP_TYPE_NOPS (value);
9894 /* C++ associates enums with global, function, or class declarations. */
9895 context = current_scope ();
9896 if (!context)
9897 context = current_namespace;
9899 /* Build the actual enumeration constant. Note that the enumeration
9900 constants have the type of their initializers until the
9901 enumeration is complete:
9903 [ dcl.enum ]
9905 Following the closing brace of an enum-specifier, each enumer-
9906 ator has the type of its enumeration. Prior to the closing
9907 brace, the type of each enumerator is the type of its
9908 initializing value.
9910 In finish_enum we will reset the type. Of course, if we're
9911 processing a template, there may be no value. */
9912 type = value ? TREE_TYPE (value) : NULL_TREE;
9914 if (context && context == current_class_type)
9915 /* This enum declaration is local to the class. We need the full
9916 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9917 decl = build_lang_decl (CONST_DECL, name, type);
9918 else
9919 /* It's a global enum, or it's local to a function. (Note local to
9920 a function could mean local to a class method. */
9921 decl = build_decl (CONST_DECL, name, type);
9923 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9924 TREE_CONSTANT (decl) = 1;
9925 TREE_INVARIANT (decl) = 1;
9926 TREE_READONLY (decl) = 1;
9927 DECL_INITIAL (decl) = value;
9929 if (context && context == current_class_type)
9930 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9931 on the TYPE_FIELDS list for `S'. (That's so that you can say
9932 things like `S::i' later.) */
9933 finish_member_declaration (decl);
9934 else
9935 pushdecl (decl);
9937 /* Add this enumeration constant to the list for this type. */
9938 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9942 /* We're defining DECL. Make sure that it's type is OK. */
9944 static void
9945 check_function_type (tree decl, tree current_function_parms)
9947 tree fntype = TREE_TYPE (decl);
9948 tree return_type = complete_type (TREE_TYPE (fntype));
9950 /* In a function definition, arg types must be complete. */
9951 require_complete_types_for_parms (current_function_parms);
9953 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9955 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
9957 /* Make it return void instead, but don't change the
9958 type of the DECL_RESULT, in case we have a named return value. */
9959 if (TREE_CODE (fntype) == METHOD_TYPE)
9961 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9962 TREE_TYPE (decl)
9963 = build_method_type_directly (ctype,
9964 void_type_node,
9965 FUNCTION_ARG_CHAIN (decl));
9967 else
9968 TREE_TYPE (decl)
9969 = build_function_type (void_type_node,
9970 TYPE_ARG_TYPES (TREE_TYPE (decl)));
9971 TREE_TYPE (decl)
9972 = build_exception_variant (fntype,
9973 TYPE_RAISES_EXCEPTIONS (fntype));
9975 else
9976 abstract_virtuals_error (decl, TREE_TYPE (fntype));
9979 /* Create the FUNCTION_DECL for a function definition.
9980 DECLSPECS and DECLARATOR are the parts of the declaration;
9981 they describe the function's name and the type it returns,
9982 but twisted together in a fashion that parallels the syntax of C.
9984 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9985 DECLARATOR is really the DECL for the function we are about to
9986 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9987 indicating that the function is an inline defined in-class.
9989 This function creates a binding context for the function body
9990 as well as setting up the FUNCTION_DECL in current_function_decl.
9992 Returns 1 on success. If the DECLARATOR is not suitable for a function
9993 (it defines a datum instead), we return 0, which tells
9994 yyparse to report a parse error.
9996 For C++, we must first check whether that datum makes any sense.
9997 For example, "class A local_a(1,2);" means that variable local_a
9998 is an aggregate of type A, which should have a constructor
9999 applied to it with the argument list [1, 2]. */
10002 start_function (tree declspecs, tree declarator, tree attrs, int flags)
10004 tree decl1;
10005 tree ctype = NULL_TREE;
10006 tree fntype;
10007 tree restype;
10008 int doing_friend = 0;
10009 struct cp_binding_level *bl;
10010 tree current_function_parms;
10012 /* Sanity check. */
10013 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
10014 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
10016 /* This should only be done once on the top most decl. */
10017 if (have_extern_spec)
10019 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
10020 have_extern_spec = false;
10023 if (flags & SF_PRE_PARSED)
10025 decl1 = declarator;
10027 fntype = TREE_TYPE (decl1);
10028 if (TREE_CODE (fntype) == METHOD_TYPE)
10029 ctype = TYPE_METHOD_BASETYPE (fntype);
10031 /* ISO C++ 11.4/5. A friend function defined in a class is in
10032 the (lexical) scope of the class in which it is defined. */
10033 if (!ctype && DECL_FRIEND_P (decl1))
10035 ctype = DECL_FRIEND_CONTEXT (decl1);
10037 /* CTYPE could be null here if we're dealing with a template;
10038 for example, `inline friend float foo()' inside a template
10039 will have no CTYPE set. */
10040 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10041 ctype = NULL_TREE;
10042 else
10043 doing_friend = 1;
10046 else
10048 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10049 /* If the declarator is not suitable for a function definition,
10050 cause a syntax error. */
10051 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10052 return 0;
10054 cplus_decl_attributes (&decl1, attrs, 0);
10056 /* If #pragma weak was used, mark the decl weak now. */
10057 if (global_scope_p (current_binding_level))
10058 maybe_apply_pragma_weak (decl1);
10060 fntype = TREE_TYPE (decl1);
10062 restype = TREE_TYPE (fntype);
10064 if (TREE_CODE (fntype) == METHOD_TYPE)
10065 ctype = TYPE_METHOD_BASETYPE (fntype);
10066 else if (DECL_MAIN_P (decl1))
10068 /* If this doesn't return integer_type, or a typedef to
10069 integer_type, complain. */
10070 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl1)), integer_type_node))
10072 if (pedantic || warn_return_type)
10073 pedwarn ("return type for `main' changed to `int'");
10074 TREE_TYPE (decl1) = fntype = default_function_type;
10079 if (DECL_DECLARED_INLINE_P (decl1)
10080 && lookup_attribute ("noinline", attrs))
10081 warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
10083 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10084 /* This is a constructor, we must ensure that any default args
10085 introduced by this definition are propagated to the clones
10086 now. The clones are used directly in overload resolution. */
10087 adjust_clone_args (decl1);
10089 /* Sometimes we don't notice that a function is a static member, and
10090 build a METHOD_TYPE for it. Fix that up now. */
10091 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10092 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10094 revert_static_member_fn (decl1);
10095 ctype = NULL_TREE;
10098 /* Set up current_class_type, and enter the scope of the class, if
10099 appropriate. */
10100 if (ctype)
10101 push_nested_class (ctype);
10102 else if (DECL_STATIC_FUNCTION_P (decl1))
10103 push_nested_class (DECL_CONTEXT (decl1));
10105 /* Now that we have entered the scope of the class, we must restore
10106 the bindings for any template parameters surrounding DECL1, if it
10107 is an inline member template. (Order is important; consider the
10108 case where a template parameter has the same name as a field of
10109 the class.) It is not until after this point that
10110 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
10111 if (flags & SF_INCLASS_INLINE)
10112 maybe_begin_member_template_processing (decl1);
10114 /* Effective C++ rule 15. */
10115 if (warn_ecpp
10116 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10117 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10118 warning ("`operator=' should return a reference to `*this'");
10120 /* Make the init_value nonzero so pushdecl knows this is not tentative.
10121 error_mark_node is replaced below (in poplevel) with the BLOCK. */
10122 if (!DECL_INITIAL (decl1))
10123 DECL_INITIAL (decl1) = error_mark_node;
10125 /* This function exists in static storage.
10126 (This does not mean `static' in the C sense!) */
10127 TREE_STATIC (decl1) = 1;
10129 /* We must call push_template_decl after current_class_type is set
10130 up. (If we are processing inline definitions after exiting a
10131 class scope, current_class_type will be NULL_TREE until set above
10132 by push_nested_class.) */
10133 if (processing_template_decl)
10134 decl1 = push_template_decl (decl1);
10136 /* We are now in the scope of the function being defined. */
10137 current_function_decl = decl1;
10139 /* Save the parm names or decls from this function's declarator
10140 where store_parm_decls will find them. */
10141 current_function_parms = DECL_ARGUMENTS (decl1);
10143 /* Make sure the parameter and return types are reasonable. When
10144 you declare a function, these types can be incomplete, but they
10145 must be complete when you define the function. */
10146 if (! processing_template_decl)
10147 check_function_type (decl1, current_function_parms);
10149 /* Build the return declaration for the function. */
10150 restype = TREE_TYPE (fntype);
10151 /* Promote the value to int before returning it. */
10152 if (c_promoting_integer_type_p (restype))
10153 restype = type_promotes_to (restype);
10154 if (DECL_RESULT (decl1) == NULL_TREE)
10156 DECL_RESULT (decl1)
10157 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10158 c_apply_type_quals_to_decl (cp_type_quals (restype),
10159 DECL_RESULT (decl1));
10162 /* Initialize RTL machinery. We cannot do this until
10163 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
10164 even when processing a template; this is how we get
10165 CFUN set up, and our per-function variables initialized.
10166 FIXME factor out the non-RTL stuff. */
10167 bl = current_binding_level;
10168 allocate_struct_function (decl1);
10169 current_binding_level = bl;
10171 /* Even though we're inside a function body, we still don't want to
10172 call expand_expr to calculate the size of a variable-sized array.
10173 We haven't necessarily assigned RTL to all variables yet, so it's
10174 not safe to try to expand expressions involving them. */
10175 immediate_size_expand = 0;
10176 cfun->x_dont_save_pending_sizes_p = 1;
10178 /* Start the statement-tree, start the tree now. */
10179 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
10181 /* Let the user know we're compiling this function. */
10182 announce_function (decl1);
10184 /* Record the decl so that the function name is defined.
10185 If we already have a decl for this name, and it is a FUNCTION_DECL,
10186 use the old decl. */
10187 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10189 /* A specialization is not used to guide overload resolution. */
10190 if (!DECL_FUNCTION_MEMBER_P (decl1)
10191 && !(DECL_USE_TEMPLATE (decl1) &&
10192 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10194 tree olddecl = pushdecl (decl1);
10196 if (olddecl == error_mark_node)
10197 /* If something went wrong when registering the declaration,
10198 use DECL1; we have to have a FUNCTION_DECL to use when
10199 parsing the body of the function. */
10201 else
10202 /* Otherwise, OLDDECL is either a previous declaration of
10203 the same function or DECL1 itself. */
10204 decl1 = olddecl;
10206 else
10208 /* We need to set the DECL_CONTEXT. */
10209 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10210 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10211 /* And make sure we have enough default args. */
10212 check_default_args (decl1);
10214 fntype = TREE_TYPE (decl1);
10217 /* Reset these in case the call to pushdecl changed them. */
10218 current_function_decl = decl1;
10219 cfun->decl = decl1;
10221 /* If we are (erroneously) defining a function that we have already
10222 defined before, wipe out what we knew before. */
10223 if (!DECL_PENDING_INLINE_P (decl1))
10224 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10226 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10228 /* We know that this was set up by `grokclassfn'. We do not
10229 wait until `store_parm_decls', since evil parse errors may
10230 never get us to that point. Here we keep the consistency
10231 between `current_class_type' and `current_class_ptr'. */
10232 tree t = DECL_ARGUMENTS (decl1);
10234 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
10235 162);
10236 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
10237 19990811);
10239 cp_function_chain->x_current_class_ref
10240 = build_indirect_ref (t, NULL);
10241 cp_function_chain->x_current_class_ptr = t;
10243 /* Constructors and destructors need to know whether they're "in
10244 charge" of initializing virtual base classes. */
10245 t = TREE_CHAIN (t);
10246 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10248 current_in_charge_parm = t;
10249 t = TREE_CHAIN (t);
10251 if (DECL_HAS_VTT_PARM_P (decl1))
10253 if (DECL_NAME (t) != vtt_parm_identifier)
10254 abort ();
10255 current_vtt_parm = t;
10259 if (DECL_INTERFACE_KNOWN (decl1))
10261 tree ctx = decl_function_context (decl1);
10263 if (DECL_NOT_REALLY_EXTERN (decl1))
10264 DECL_EXTERNAL (decl1) = 0;
10266 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10267 && TREE_PUBLIC (ctx))
10268 /* This is a function in a local class in an extern inline
10269 function. */
10270 comdat_linkage (decl1);
10272 /* If this function belongs to an interface, it is public.
10273 If it belongs to someone else's interface, it is also external.
10274 This only affects inlines and template instantiations. */
10275 else if (interface_unknown == 0
10276 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10278 if (DECL_DECLARED_INLINE_P (decl1)
10279 || DECL_TEMPLATE_INSTANTIATION (decl1)
10280 || processing_template_decl)
10282 DECL_EXTERNAL (decl1)
10283 = (interface_only
10284 || (DECL_DECLARED_INLINE_P (decl1)
10285 && ! flag_implement_inlines
10286 && !DECL_VINDEX (decl1)));
10288 /* For WIN32 we also want to put these in linkonce sections. */
10289 maybe_make_one_only (decl1);
10291 else
10292 DECL_EXTERNAL (decl1) = 0;
10293 DECL_NOT_REALLY_EXTERN (decl1) = 0;
10294 DECL_INTERFACE_KNOWN (decl1) = 1;
10296 else if (interface_unknown && interface_only
10297 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10299 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10300 interface, we will have interface_only set but not
10301 interface_known. In that case, we don't want to use the normal
10302 heuristics because someone will supply a #pragma implementation
10303 elsewhere, and deducing it here would produce a conflict. */
10304 comdat_linkage (decl1);
10305 DECL_EXTERNAL (decl1) = 0;
10306 DECL_INTERFACE_KNOWN (decl1) = 1;
10307 DECL_DEFER_OUTPUT (decl1) = 1;
10309 else
10311 /* This is a definition, not a reference.
10312 So clear DECL_EXTERNAL. */
10313 DECL_EXTERNAL (decl1) = 0;
10315 if ((DECL_DECLARED_INLINE_P (decl1)
10316 || DECL_TEMPLATE_INSTANTIATION (decl1))
10317 && ! DECL_INTERFACE_KNOWN (decl1)
10318 /* Don't try to defer nested functions for now. */
10319 && ! decl_function_context (decl1))
10320 DECL_DEFER_OUTPUT (decl1) = 1;
10321 else
10322 DECL_INTERFACE_KNOWN (decl1) = 1;
10325 begin_scope (sk_function_parms, decl1);
10327 ++function_depth;
10329 if (DECL_DESTRUCTOR_P (decl1))
10331 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10332 DECL_CONTEXT (dtor_label) = current_function_decl;
10335 start_fname_decls ();
10337 store_parm_decls (current_function_parms);
10339 return 1;
10342 /* Store the parameter declarations into the current function declaration.
10343 This is called after parsing the parameter declarations, before
10344 digesting the body of the function.
10346 Also install to binding contour return value identifier, if any. */
10348 static void
10349 store_parm_decls (tree current_function_parms)
10351 tree fndecl = current_function_decl;
10352 tree parm;
10354 /* This is a chain of any other decls that came in among the parm
10355 declarations. If a parm is declared with enum {foo, bar} x;
10356 then CONST_DECLs for foo and bar are put here. */
10357 tree nonparms = NULL_TREE;
10359 if (current_function_parms)
10361 /* This case is when the function was defined with an ANSI prototype.
10362 The parms already have decls, so we need not do anything here
10363 except record them as in effect
10364 and complain if any redundant old-style parm decls were written. */
10366 tree specparms = current_function_parms;
10367 tree next;
10369 /* Must clear this because it might contain TYPE_DECLs declared
10370 at class level. */
10371 current_binding_level->names = NULL;
10373 /* If we're doing semantic analysis, then we'll call pushdecl
10374 for each of these. We must do them in reverse order so that
10375 they end in the correct forward order. */
10376 specparms = nreverse (specparms);
10378 for (parm = specparms; parm; parm = next)
10380 next = TREE_CHAIN (parm);
10381 if (TREE_CODE (parm) == PARM_DECL)
10383 if (DECL_NAME (parm) == NULL_TREE
10384 || TREE_CODE (parm) != VOID_TYPE)
10385 pushdecl (parm);
10386 else
10387 error ("parameter `%D' declared void", parm);
10389 else
10391 /* If we find an enum constant or a type tag,
10392 put it aside for the moment. */
10393 TREE_CHAIN (parm) = NULL_TREE;
10394 nonparms = chainon (nonparms, parm);
10398 /* Get the decls in their original chain order and record in the
10399 function. This is all and only the PARM_DECLs that were
10400 pushed into scope by the loop above. */
10401 DECL_ARGUMENTS (fndecl) = getdecls ();
10403 else
10404 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10406 /* Now store the final chain of decls for the arguments
10407 as the decl-chain of the current lexical scope.
10408 Put the enumerators in as well, at the front so that
10409 DECL_ARGUMENTS is not modified. */
10410 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10412 /* Do the starting of the exception specifications, if we have any. */
10413 if (flag_exceptions && !processing_template_decl
10414 && flag_enforce_eh_specs
10415 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10416 current_eh_spec_block = begin_eh_spec_block ();
10420 /* We have finished doing semantic analysis on DECL, but have not yet
10421 generated RTL for its body. Save away our current state, so that
10422 when we want to generate RTL later we know what to do. */
10424 static void
10425 save_function_data (tree decl)
10427 struct language_function *f;
10429 /* Save the language-specific per-function data so that we can
10430 get it back when we really expand this function. */
10431 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
10432 19990908);
10434 /* Make a copy. */
10435 f = ggc_alloc (sizeof (struct language_function));
10436 memcpy (f, cp_function_chain, sizeof (struct language_function));
10437 DECL_SAVED_FUNCTION_DATA (decl) = f;
10439 /* Clear out the bits we don't need. */
10440 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
10441 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
10442 f->x_named_label_uses = NULL;
10443 f->bindings = NULL;
10444 f->x_local_names = NULL;
10446 /* If we've already decided that we cannot inline this function, we
10447 must remember that fact when we actually go to expand the
10448 function. */
10449 if (current_function_cannot_inline)
10451 f->cannot_inline = current_function_cannot_inline;
10452 DECL_INLINE (decl) = 0;
10456 /* Add a note to mark the beginning of the main body of the constructor.
10457 This is used to set up the data structures for the cleanup regions for
10458 fully-constructed bases and members. */
10460 static void
10461 begin_constructor_body (void)
10465 /* Add a note to mark the end of the main body of the constructor. This is
10466 used to end the cleanup regions for fully-constructed bases and
10467 members. */
10469 static void
10470 finish_constructor_body (void)
10474 /* Do all the processing for the beginning of a destructor; set up the
10475 vtable pointers and cleanups for bases and members. */
10477 static void
10478 begin_destructor_body (void)
10480 tree if_stmt;
10481 tree compound_stmt;
10483 /* If the dtor is empty, and we know there is not any possible
10484 way we could use any vtable entries, before they are possibly
10485 set by a base class dtor, we don't have to setup the vtables,
10486 as we know that any base class dtor will set up any vtables
10487 it needs. We avoid MI, because one base class dtor can do a
10488 virtual dispatch to an overridden function that would need to
10489 have a non-related vtable set up, we cannot avoid setting up
10490 vtables in that case. We could change this to see if there
10491 is just one vtable.
10493 ??? In the destructor for a class, the vtables are set
10494 appropriately for that class. There will be no non-related
10495 vtables. jason 2001-12-11. */
10496 if_stmt = begin_if_stmt ();
10498 /* If it is not safe to avoid setting up the vtables, then
10499 someone will change the condition to be boolean_true_node.
10500 (Actually, for now, we do not have code to set the condition
10501 appropriately, so we just assume that we always need to
10502 initialize the vtables.) */
10503 finish_if_stmt_cond (boolean_true_node, if_stmt);
10505 compound_stmt = begin_compound_stmt (/*has_no_scope=*/false);
10507 /* Make all virtual function table pointers in non-virtual base
10508 classes point to CURRENT_CLASS_TYPE's virtual function
10509 tables. */
10510 initialize_vtbl_ptrs (current_class_ptr);
10512 finish_compound_stmt (compound_stmt);
10513 finish_then_clause (if_stmt);
10514 finish_if_stmt ();
10516 /* And insert cleanups for our bases and members so that they
10517 will be properly destroyed if we throw. */
10518 push_base_cleanups ();
10521 /* At the end of every destructor we generate code to delete the object if
10522 necessary. Do that now. */
10524 static void
10525 finish_destructor_body (void)
10527 tree exprstmt;
10529 /* Any return from a destructor will end up here; that way all base
10530 and member cleanups will be run when the function returns. */
10531 add_stmt (build_stmt (LABEL_STMT, dtor_label));
10533 /* In a virtual destructor, we must call delete. */
10534 if (DECL_VIRTUAL_P (current_function_decl))
10536 tree if_stmt;
10537 tree virtual_size = cxx_sizeof (current_class_type);
10539 /* [class.dtor]
10541 At the point of definition of a virtual destructor (including
10542 an implicit definition), non-placement operator delete shall
10543 be looked up in the scope of the destructor's class and if
10544 found shall be accessible and unambiguous. */
10545 exprstmt = build_op_delete_call
10546 (DELETE_EXPR, current_class_ptr, virtual_size,
10547 /*global_p=*/false, NULL_TREE);
10549 if_stmt = begin_if_stmt ();
10550 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
10551 current_in_charge_parm,
10552 integer_one_node),
10553 if_stmt);
10554 finish_expr_stmt (exprstmt);
10555 finish_then_clause (if_stmt);
10556 finish_if_stmt ();
10560 /* Do the necessary processing for the beginning of a function body, which
10561 in this case includes member-initializers, but not the catch clauses of
10562 a function-try-block. Currently, this means opening a binding level
10563 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10564 In other functions, this isn't necessary, but it doesn't hurt. */
10566 tree
10567 begin_function_body (void)
10569 tree stmt;
10571 if (processing_template_decl)
10572 /* Do nothing now. */;
10573 else
10574 /* Always keep the BLOCK node associated with the outermost pair of
10575 curly braces of a function. These are needed for correct
10576 operation of dwarfout.c. */
10577 keep_next_level (true);
10579 stmt = begin_compound_stmt (/*has_no_scope=*/false);
10580 COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
10582 if (processing_template_decl)
10583 /* Do nothing now. */;
10584 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10585 begin_constructor_body ();
10586 else if (DECL_DESTRUCTOR_P (current_function_decl))
10587 begin_destructor_body ();
10589 return stmt;
10592 /* Do the processing for the end of a function body. Currently, this means
10593 closing out the cleanups for fully-constructed bases and members, and in
10594 the case of the destructor, deleting the object if desired. Again, this
10595 is only meaningful for [cd]tors, since they are the only functions where
10596 there is a significant distinction between the main body and any
10597 function catch clauses. Handling, say, main() return semantics here
10598 would be wrong, as flowing off the end of a function catch clause for
10599 main() would also need to return 0. */
10601 void
10602 finish_function_body (tree compstmt)
10604 /* Close the block. */
10605 finish_compound_stmt (compstmt);
10607 if (processing_template_decl)
10608 /* Do nothing now. */;
10609 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10610 finish_constructor_body ();
10611 else if (DECL_DESTRUCTOR_P (current_function_decl))
10612 finish_destructor_body ();
10615 /* Finish up a function declaration and compile that function
10616 all the way to assembler language output. The free the storage
10617 for the function definition.
10619 FLAGS is a bitwise or of the following values:
10620 2 - INCLASS_INLINE
10621 We just finished processing the body of an in-class inline
10622 function definition. (This processing will have taken place
10623 after the class definition is complete.) */
10625 tree
10626 finish_function (int flags)
10628 tree fndecl = current_function_decl;
10629 tree fntype, ctype = NULL_TREE;
10630 int inclass_inline = (flags & 2) != 0;
10631 int nested;
10633 /* When we get some parse errors, we can end up without a
10634 current_function_decl, so cope. */
10635 if (fndecl == NULL_TREE)
10636 return error_mark_node;
10638 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10639 && DECL_VIRTUAL_P (fndecl)
10640 && !processing_template_decl)
10642 tree fnclass = DECL_CONTEXT (fndecl);
10643 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10644 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10647 nested = function_depth > 1;
10648 fntype = TREE_TYPE (fndecl);
10650 /* TREE_READONLY (fndecl) = 1;
10651 This caused &foo to be of type ptr-to-const-function
10652 which then got a warning when stored in a ptr-to-function variable. */
10654 my_friendly_assert (building_stmt_tree (), 20000911);
10656 /* For a cloned function, we've already got all the code we need;
10657 there's no need to add any extra bits. */
10658 if (!DECL_CLONED_FUNCTION_P (fndecl))
10660 if (DECL_MAIN_P (current_function_decl))
10662 /* Make it so that `main' always returns 0 by default. */
10663 #if VMS_TARGET
10664 finish_return_stmt (integer_one_node);
10665 #else
10666 finish_return_stmt (integer_zero_node);
10667 #endif
10670 /* Finish dealing with exception specifiers. */
10671 if (flag_exceptions && !processing_template_decl
10672 && flag_enforce_eh_specs
10673 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10674 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10675 (TREE_TYPE (current_function_decl)),
10676 current_eh_spec_block);
10679 finish_fname_decls ();
10681 /* If we're saving up tree structure, tie off the function now. */
10682 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
10684 /* If this function can't throw any exceptions, remember that. */
10685 if (!processing_template_decl
10686 && !cp_function_chain->can_throw
10687 && !flag_non_call_exceptions)
10688 TREE_NOTHROW (fndecl) = 1;
10690 /* This must come after expand_function_end because cleanups might
10691 have declarations (from inline functions) that need to go into
10692 this function's blocks. */
10694 /* If the current binding level isn't the outermost binding level
10695 for this function, either there is a bug, or we have experienced
10696 syntax errors and the statement tree is malformed. */
10697 if (current_binding_level->kind != sk_function_parms)
10699 /* Make sure we have already experienced errors. */
10700 if (errorcount == 0)
10701 abort ();
10703 /* Throw away the broken statement tree and extra binding
10704 levels. */
10705 DECL_SAVED_TREE (fndecl) = build_stmt (COMPOUND_STMT, NULL_TREE);
10707 while (current_binding_level->kind != sk_function_parms)
10709 if (current_binding_level->kind == sk_class)
10710 pop_nested_class ();
10711 else
10712 poplevel (0, 0, 0);
10715 poplevel (1, 0, 1);
10717 /* Statements should always be full-expressions at the outermost set
10718 of curly braces for a function. */
10719 my_friendly_assert (stmts_are_full_exprs_p (), 19990831);
10721 /* Set up the named return value optimization, if we can. Candidate
10722 variables are selected in check_return_value. */
10723 if (current_function_return_value)
10725 tree r = current_function_return_value;
10726 tree outer;
10728 if (r != error_mark_node
10729 /* This is only worth doing for fns that return in memory--and
10730 simpler, since we don't have to worry about promoted modes. */
10731 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10732 /* Only allow this for variables declared in the outer scope of
10733 the function so we know that their lifetime always ends with a
10734 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10735 we were to do this optimization in tree-ssa. */
10736 /* Skip the artificial function body block. */
10737 && (outer = BLOCK_SUBBLOCKS (BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl))),
10738 chain_member (r, BLOCK_VARS (outer))))
10739 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10741 current_function_return_value = NULL_TREE;
10744 /* Remember that we were in class scope. */
10745 if (current_class_name)
10746 ctype = current_class_type;
10748 /* Must mark the RESULT_DECL as being in this function. */
10749 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10751 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10752 to the FUNCTION_DECL node itself. */
10753 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10755 /* Save away current state, if appropriate. */
10756 if (!processing_template_decl)
10757 save_function_data (fndecl);
10759 /* If this function calls `setjmp' it cannot be inlined. When
10760 `longjmp' is called it is not guaranteed to restore the value of
10761 local variables that have been modified since the call to
10762 `setjmp'. So, if were to inline this function into some caller
10763 `c', then when we `longjmp', we might not restore all variables
10764 in `c'. (It might seem, at first blush, that there's no way for
10765 this function to modify local variables in `c', but their
10766 addresses may have been stored somewhere accessible to this
10767 function.) */
10768 if (!processing_template_decl && calls_setjmp_p (fndecl))
10769 DECL_UNINLINABLE (fndecl) = 1;
10771 /* Complain if there's just no return statement. */
10772 if (warn_return_type
10773 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10774 && !dependent_type_p (TREE_TYPE (fntype))
10775 && !current_function_returns_value && !current_function_returns_null
10776 /* Don't complain if we abort or throw. */
10777 && !current_function_returns_abnormally
10778 && !DECL_NAME (DECL_RESULT (fndecl))
10779 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10780 inline function, as we might never be compiled separately. */
10781 && (DECL_INLINE (fndecl) || processing_template_decl))
10782 warning ("no return statement in function returning non-void");
10784 /* Store the end of the function, so that we get good line number
10785 info for the epilogue. */
10786 cfun->function_end_locus = input_location;
10788 /* Genericize before inlining. */
10789 if (!processing_template_decl)
10791 c_genericize (fndecl);
10793 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10794 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10797 /* We're leaving the context of this function, so zap cfun. It's still in
10798 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10799 cfun = NULL;
10800 current_function_decl = NULL;
10802 /* If this is an in-class inline definition, we may have to pop the
10803 bindings for the template parameters that we added in
10804 maybe_begin_member_template_processing when start_function was
10805 called. */
10806 if (inclass_inline)
10807 maybe_end_member_template_processing ();
10809 /* Leave the scope of the class. */
10810 if (ctype)
10811 pop_nested_class ();
10813 --function_depth;
10815 /* Clean up. */
10816 if (! nested)
10817 /* Let the error reporting routines know that we're outside a
10818 function. For a nested function, this value is used in
10819 cxx_pop_function_context and then reset via pop_function_context. */
10820 current_function_decl = NULL_TREE;
10822 return fndecl;
10825 /* Create the FUNCTION_DECL for a function definition.
10826 DECLSPECS and DECLARATOR are the parts of the declaration;
10827 they describe the return type and the name of the function,
10828 but twisted together in a fashion that parallels the syntax of C.
10830 This function creates a binding context for the function body
10831 as well as setting up the FUNCTION_DECL in current_function_decl.
10833 Returns a FUNCTION_DECL on success.
10835 If the DECLARATOR is not suitable for a function (it defines a datum
10836 instead), we return 0, which tells yyparse to report a parse error.
10838 May return void_type_node indicating that this method is actually
10839 a friend. See grokfield for more details.
10841 Came here with a `.pushlevel' .
10843 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10844 CHANGES TO CODE IN `grokfield'. */
10846 tree
10847 start_method (tree declspecs, tree declarator, tree attrlist)
10849 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10850 &attrlist);
10852 if (fndecl == error_mark_node)
10853 return error_mark_node;
10855 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10857 error ("invalid member function declaration");
10858 return error_mark_node;
10861 if (attrlist)
10862 cplus_decl_attributes (&fndecl, attrlist, 0);
10864 /* Pass friends other than inline friend functions back. */
10865 if (fndecl == void_type_node)
10866 return fndecl;
10868 if (DECL_IN_AGGR_P (fndecl))
10870 if (DECL_CONTEXT (fndecl)
10871 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10872 error ("`%D' is already defined in class `%T'", fndecl,
10873 DECL_CONTEXT (fndecl));
10874 return void_type_node;
10877 check_template_shadow (fndecl);
10879 DECL_DECLARED_INLINE_P (fndecl) = 1;
10880 if (flag_default_inline)
10881 DECL_INLINE (fndecl) = 1;
10883 /* We process method specializations in finish_struct_1. */
10884 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10886 fndecl = push_template_decl (fndecl);
10887 if (fndecl == error_mark_node)
10888 return fndecl;
10891 if (! DECL_FRIEND_P (fndecl))
10893 if (TREE_CHAIN (fndecl))
10895 fndecl = copy_node (fndecl);
10896 TREE_CHAIN (fndecl) = NULL_TREE;
10898 grok_special_member_properties (fndecl);
10901 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10903 /* Make a place for the parms. */
10904 begin_scope (sk_function_parms, fndecl);
10906 DECL_IN_AGGR_P (fndecl) = 1;
10907 return fndecl;
10910 /* Go through the motions of finishing a function definition.
10911 We don't compile this method until after the whole class has
10912 been processed.
10914 FINISH_METHOD must return something that looks as though it
10915 came from GROKFIELD (since we are defining a method, after all).
10917 This is called after parsing the body of the function definition.
10918 STMTS is the chain of statements that makes up the function body.
10920 DECL is the ..._DECL that `start_method' provided. */
10922 tree
10923 finish_method (tree decl)
10925 tree fndecl = decl;
10926 tree old_initial;
10928 tree link;
10930 if (decl == void_type_node)
10931 return decl;
10933 old_initial = DECL_INITIAL (fndecl);
10935 /* Undo the level for the parms (from start_method).
10936 This is like poplevel, but it causes nothing to be
10937 saved. Saving information here confuses symbol-table
10938 output routines. Besides, this information will
10939 be correctly output when this method is actually
10940 compiled. */
10942 /* Clear out the meanings of the local variables of this level;
10943 also record in each decl which block it belongs to. */
10945 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10947 if (DECL_NAME (link) != NULL_TREE)
10948 pop_binding (DECL_NAME (link), link);
10949 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
10950 DECL_CONTEXT (link) = NULL_TREE;
10953 poplevel (0, 0, 0);
10955 DECL_INITIAL (fndecl) = old_initial;
10957 /* We used to check if the context of FNDECL was different from
10958 current_class_type as another way to get inside here. This didn't work
10959 for String.cc in libg++. */
10960 if (DECL_FRIEND_P (fndecl))
10962 CLASSTYPE_INLINE_FRIENDS (current_class_type)
10963 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
10964 decl = void_type_node;
10967 return decl;
10971 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10972 we can lay it out later, when and if its type becomes complete. */
10974 void
10975 maybe_register_incomplete_var (tree var)
10977 my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
10979 /* Keep track of variables with incomplete types. */
10980 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
10981 && DECL_EXTERNAL (var))
10983 tree inner_type = TREE_TYPE (var);
10985 while (TREE_CODE (inner_type) == ARRAY_TYPE)
10986 inner_type = TREE_TYPE (inner_type);
10987 inner_type = TYPE_MAIN_VARIANT (inner_type);
10989 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10990 /* RTTI TD entries are created while defining the type_info. */
10991 || (TYPE_LANG_SPECIFIC (inner_type)
10992 && TYPE_BEING_DEFINED (inner_type)))
10993 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10997 /* Called when a class type (given by TYPE) is defined. If there are
10998 any existing VAR_DECLs whose type hsa been completed by this
10999 declaration, update them now. */
11001 void
11002 complete_vars (tree type)
11004 tree *list = &incomplete_vars;
11006 my_friendly_assert (CLASS_TYPE_P (type), 20020406);
11007 while (*list)
11009 if (same_type_p (type, TREE_PURPOSE (*list)))
11011 tree var = TREE_VALUE (*list);
11012 /* Complete the type of the variable. The VAR_DECL itself
11013 will be laid out in expand_expr. */
11014 complete_type (TREE_TYPE (var));
11015 /* Remove this entry from the list. */
11016 *list = TREE_CHAIN (*list);
11018 else
11019 list = &TREE_CHAIN (*list);
11023 /* If DECL is of a type which needs a cleanup, build that cleanup
11024 here. */
11026 tree
11027 cxx_maybe_build_cleanup (tree decl)
11029 tree type = TREE_TYPE (decl);
11031 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11033 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11034 tree rval;
11036 if (TREE_CODE (type) == ARRAY_TYPE)
11037 rval = decl;
11038 else
11040 cxx_mark_addressable (decl);
11041 rval = build_unary_op (ADDR_EXPR, decl, 0);
11044 /* Optimize for space over speed here. */
11045 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
11046 || flag_expensive_optimizations)
11047 flags |= LOOKUP_NONVIRTUAL;
11049 rval = build_delete (TREE_TYPE (rval), rval,
11050 sfk_complete_destructor, flags, 0);
11052 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
11053 && ! TYPE_HAS_DESTRUCTOR (type))
11054 rval = build_compound_expr (rval, build_vbase_delete (type, decl));
11056 return rval;
11058 return NULL_TREE;
11061 /* When a stmt has been parsed, this function is called. */
11063 void
11064 finish_stmt (void)
11066 /* Always assume this statement was not an expression statement. If
11067 it actually was an expression statement, its our callers
11068 responsibility to fix this up. */
11069 last_expr_type = NULL_TREE;
11072 /* DECL was originally constructed as a non-static member function,
11073 but turned out to be static. Update it accordingly. */
11075 void
11076 revert_static_member_fn (tree decl)
11078 tree tmp;
11079 tree function = TREE_TYPE (decl);
11080 tree args = TYPE_ARG_TYPES (function);
11082 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11083 != TYPE_UNQUALIFIED)
11084 error ("static member function `%#D' declared with type qualifiers",
11085 decl);
11087 args = TREE_CHAIN (args);
11088 tmp = build_function_type (TREE_TYPE (function), args);
11089 tmp = build_qualified_type (tmp, cp_type_quals (function));
11090 tmp = build_exception_variant (tmp,
11091 TYPE_RAISES_EXCEPTIONS (function));
11092 TREE_TYPE (decl) = tmp;
11093 if (DECL_ARGUMENTS (decl))
11094 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11095 DECL_STATIC_FUNCTION_P (decl) = 1;
11098 /* Initialize the variables used during compilation of a C++
11099 function. */
11101 void
11102 cxx_push_function_context (struct function * f)
11104 struct language_function *p
11105 = ggc_alloc_cleared (sizeof (struct language_function));
11106 f->language = p;
11108 /* Whenever we start a new function, we destroy temporaries in the
11109 usual way. */
11110 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11112 if (f->decl)
11114 tree fn = f->decl;
11116 if (DECL_SAVED_FUNCTION_DATA (fn))
11118 /* If we already parsed this function, and we're just expanding it
11119 now, restore saved state. */
11120 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11122 /* If we decided that we didn't want to inline this function,
11123 make sure the back-end knows that. */
11124 if (!current_function_cannot_inline)
11125 current_function_cannot_inline = cp_function_chain->cannot_inline;
11127 /* We don't need the saved data anymore. Unless this is an inline
11128 function; we need the named return value info for
11129 cp_copy_res_decl_for_inlining. */
11130 if (! DECL_INLINE (fn))
11131 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11136 /* Free the language-specific parts of F, now that we've finished
11137 compiling the function. */
11139 void
11140 cxx_pop_function_context (struct function * f)
11142 f->language = 0;
11145 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11146 one of the language-independent trees. */
11148 enum cp_tree_node_structure_enum
11149 cp_tree_node_structure (union lang_tree_node * t)
11151 switch (TREE_CODE (&t->generic))
11153 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
11154 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
11155 case OVERLOAD: return TS_CP_OVERLOAD;
11156 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
11157 case PTRMEM_CST: return TS_CP_PTRMEM;
11158 case BASELINK: return TS_CP_BASELINK;
11159 default: return TS_CP_GENERIC;
11163 /* Build the void_list_node (void_type_node having been created). */
11164 tree
11165 build_void_list_node (void)
11167 tree t = build_tree_list (NULL_TREE, void_type_node);
11168 TREE_PARMLIST (t) = 1;
11169 return t;
11172 bool
11173 cp_missing_noreturn_ok_p (tree decl)
11175 /* A missing noreturn is ok for the `main' function. */
11176 return DECL_MAIN_P (decl);
11179 #include "gt-cp-decl.h"
11180 #include "gtype-cp.h"