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)
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. */
33 #include "coretypes.h"
40 #include "tree-inline.h"
50 #include "diagnostic.h"
53 #include "tree-flow.h"
55 static tree grokparms (cp_parameter_declarator *, tree *);
56 static const char *redeclaration_error_message (tree, tree);
58 static int decl_jump_unsafe (tree);
59 static void require_complete_types_for_parms (tree);
60 static int ambi_op_p (enum tree_code);
61 static int unary_op_p (enum tree_code);
62 static void push_local_name (tree);
63 static tree grok_reference_init (tree, tree, tree, tree *);
64 static tree grokfndecl (tree, tree, tree, tree, tree, int,
65 enum overload_flags, cp_cv_quals,
66 tree, int, int, int, int, int, int, tree);
67 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
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 *,
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,
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,
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.
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[]'
149 tree vtbl_ptr_type_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.
162 The FUNCTION_DECL for the default `::operator delete'.
164 tree global_delete_fndecl;
167 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
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;
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;
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;
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.) */
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
238 enum deprecated_states {
243 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
245 /* True if a declaration with an `extern' linkage specifier is being
247 bool have_extern_spec;
250 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
251 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
252 time the VAR_DECL was declared, the type was incomplete. */
254 static GTY(()) tree incomplete_vars;
256 /* Returns the kind of template specialization we are currently
257 processing, given that it's declaration contained N_CLASS_SCOPES
258 explicit scope qualifications. */
261 current_tmpl_spec_kind (int n_class_scopes)
263 int n_template_parm_scopes = 0;
264 int seen_specialization_p = 0;
265 int innermost_specialization_p = 0;
266 struct cp_binding_level *b;
268 /* Scan through the template parameter scopes. */
269 for (b = current_binding_level;
270 b->kind == sk_template_parms;
273 /* If we see a specialization scope inside a parameter scope,
274 then something is wrong. That corresponds to a declaration
277 template <class T> template <> ...
279 which is always invalid since [temp.expl.spec] forbids the
280 specialization of a class member template if the enclosing
281 class templates are not explicitly specialized as well. */
282 if (b->explicit_spec_p)
284 if (n_template_parm_scopes == 0)
285 innermost_specialization_p = 1;
287 seen_specialization_p = 1;
289 else if (seen_specialization_p == 1)
290 return tsk_invalid_member_spec;
292 ++n_template_parm_scopes;
295 /* Handle explicit instantiations. */
296 if (processing_explicit_instantiation)
298 if (n_template_parm_scopes != 0)
299 /* We've seen a template parameter list during an explicit
300 instantiation. For example:
302 template <class T> template void f(int);
304 This is erroneous. */
305 return tsk_invalid_expl_inst;
307 return tsk_expl_inst;
310 if (n_template_parm_scopes < n_class_scopes)
311 /* We've not seen enough template headers to match all the
312 specialized classes present. For example:
314 template <class T> void R<T>::S<T>::f(int);
316 This is invalid; there needs to be one set of template
317 parameters for each class. */
318 return tsk_insufficient_parms;
319 else if (n_template_parm_scopes == n_class_scopes)
320 /* We're processing a non-template declaration (even though it may
321 be a member of a template class.) For example:
323 template <class T> void S<T>::f(int);
325 The `class T' maches the `S<T>', leaving no template headers
326 corresponding to the `f'. */
328 else if (n_template_parm_scopes > n_class_scopes + 1)
329 /* We've got too many template headers. For example:
331 template <> template <class T> void f (T);
333 There need to be more enclosing classes. */
334 return tsk_excessive_parms;
336 /* This must be a template. It's of the form:
338 template <class T> template <class U> void S<T>::f(U);
340 This is a specialization if the innermost level was a
341 specialization; otherwise it's just a definition of the
343 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
346 /* Exit the current scope. */
354 /* When a label goes out of scope, check to see if that label was used
355 in a valid manner, and issue any appropriate warnings or errors. */
358 pop_label (tree label, tree old_value)
360 if (!processing_template_decl)
362 if (DECL_INITIAL (label) == NULL_TREE)
366 cp_error_at ("label `%D' used but not defined", label);
367 #ifdef USE_MAPPED_LOCATION
368 location = input_location; /* FIXME want (input_filename, (line)0) */
370 location.file = input_filename;
373 /* Avoid crashing later. */
374 define_label (location, DECL_NAME (label));
376 else if (warn_unused_label && !TREE_USED (label))
377 cp_warning_at ("label `%D' defined but not used", label);
380 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383 /* At the end of a function, all labels declared within the function
384 go out of scope. BLOCK is the top-level block for the
388 pop_labels (tree block)
390 struct named_label_list *link;
392 /* Clear out the definitions of all label names, since their scopes
394 for (link = named_labels; link; link = link->next)
396 pop_label (link->label_decl, link->old_value);
397 /* Put the labels into the "variables" of the top-level block,
398 so debugger can see them. */
399 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
400 BLOCK_VARS (block) = link->label_decl;
406 /* Exit a binding level.
407 Pop the level off, and restore the state of the identifier-decl mappings
408 that were in effect when this level was entered.
410 If KEEP == 1, this level had explicit declarations, so
411 and create a "block" (a BLOCK node) for the level
412 to record its declarations and subblocks for symbol table output.
414 If FUNCTIONBODY is nonzero, this level is the body of a function,
415 so create a block as if KEEP were set and also clear out all
418 If REVERSE is nonzero, reverse the order of decls before putting
419 them into the BLOCK. */
422 poplevel (int keep, int reverse, int functionbody)
425 /* The chain of decls was accumulated in reverse order.
426 Put it into forward order, just for cleanliness. */
428 int tmp = functionbody;
429 int real_functionbody;
433 int leaving_for_scope;
436 timevar_push (TV_NAME_LOOKUP);
441 my_friendly_assert (current_binding_level->kind != sk_class, 19990916);
443 real_functionbody = (current_binding_level->kind == sk_cleanup
444 ? ((functionbody = 0), tmp) : functionbody);
445 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
447 my_friendly_assert (VEC_length(cp_class_binding,
448 current_binding_level->class_shadowed) == 0,
451 /* We used to use KEEP == 2 to indicate that the new block should go
452 at the beginning of the list of blocks at this binding level,
453 rather than the end. This hack is no longer used. */
454 my_friendly_assert (keep == 0 || keep == 1, 0);
456 if (current_binding_level->keep)
459 /* Any uses of undefined labels, and any defined labels, now operate
460 under constraints of next binding contour. */
461 if (cfun && !functionbody)
463 struct cp_binding_level *level_chain;
464 level_chain = current_binding_level->level_chain;
467 struct named_label_use_list *uses;
468 struct named_label_list *labels;
469 for (labels = named_labels; labels; labels = labels->next)
470 if (labels->binding_level == current_binding_level)
473 if (current_binding_level->kind == sk_try)
474 labels->in_try_scope = 1;
475 if (current_binding_level->kind == sk_catch)
476 labels->in_catch_scope = 1;
477 for (decl = labels->names_in_scope; decl;
478 decl = TREE_CHAIN (decl))
479 if (decl_jump_unsafe (decl))
480 labels->bad_decls = tree_cons (NULL_TREE, decl,
482 labels->binding_level = level_chain;
483 labels->names_in_scope = level_chain->names;
486 for (uses = named_label_uses; uses; uses = uses->next)
487 if (uses->binding_level == current_binding_level)
489 uses->binding_level = level_chain;
490 uses->names_in_scope = level_chain->names;
495 /* Get the decls in the order they were written.
496 Usually current_binding_level->names is in reverse order.
497 But parameter decls were previously put in forward order. */
500 current_binding_level->names
501 = decls = nreverse (current_binding_level->names);
503 decls = current_binding_level->names;
505 /* When not in function-at-a-time mode, expand_end_bindings will
506 warn about unused variables. But, in function-at-a-time mode
507 expand_end_bindings is not passed the list of variables in the
508 current scope, and therefore no warning is emitted. So, we
509 explicitly warn here. */
510 if (!processing_template_decl)
511 warn_about_unused_variables (getdecls ());
513 /* If there were any declarations or structure tags in that level,
514 or if this level is a function body,
515 create a BLOCK to record them for the life of this function. */
517 if (keep == 1 || functionbody)
518 block = make_node (BLOCK);
519 if (block != NULL_TREE)
521 BLOCK_VARS (block) = decls;
522 BLOCK_SUBBLOCKS (block) = subblocks;
525 /* In each subblock, record that this is its superior. */
527 for (link = subblocks; link; link = TREE_CHAIN (link))
528 BLOCK_SUPERCONTEXT (link) = block;
530 /* We still support the old for-scope rules, whereby the variables
531 in a for-init statement were in scope after the for-statement
532 ended. We only use the new rules if flag_new_for_scope is
535 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
537 /* Remove declarations for all the DECLs in this level. */
538 for (link = decls; link; link = TREE_CHAIN (link))
540 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
543 cxx_binding *outer_binding
544 = IDENTIFIER_BINDING (DECL_NAME (link))->previous;
548 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
550 ns_binding = NULL_TREE;
553 && outer_binding->scope == current_binding_level->level_chain)
554 /* We have something like:
559 and we are leaving the `for' scope. There's no reason to
560 keep the binding of the inner `i' in this case. */
561 pop_binding (DECL_NAME (link), link);
562 else if ((outer_binding
563 && (TREE_CODE (outer_binding->value) == TYPE_DECL))
564 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
565 /* Here, we have something like:
573 We must pop the for-scope binding so we know what's a
574 type and what isn't. */
575 pop_binding (DECL_NAME (link), link);
578 /* Mark this VAR_DECL as dead so that we can tell we left it
579 there only for backward compatibility. */
580 DECL_DEAD_FOR_LOCAL (link) = 1;
582 /* Keep track of what should have happened when we
583 popped the binding. */
584 if (outer_binding && outer_binding->value)
585 DECL_SHADOWED_FOR_VAR (link) = outer_binding->value;
587 /* Add it to the list of dead variables in the next
588 outermost binding to that we can remove these when we
589 leave that binding. */
590 current_binding_level->level_chain->dead_vars_from_for
591 = tree_cons (NULL_TREE, link,
592 current_binding_level->level_chain->
595 /* Although we don't pop the cxx_binding, we do clear
596 its SCOPE since the scope is going away now. */
597 IDENTIFIER_BINDING (DECL_NAME (link))->scope = NULL;
602 /* Remove the binding. */
604 if (TREE_CODE (decl) == TREE_LIST)
605 decl = TREE_VALUE (decl);
607 pop_binding (DECL_NAME (decl), decl);
608 else if (TREE_CODE (decl) == OVERLOAD)
609 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
615 /* Remove declarations for any `for' variables from inner scopes
616 that we kept around. */
617 for (link = current_binding_level->dead_vars_from_for;
618 link; link = TREE_CHAIN (link))
619 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
621 /* Restore the IDENTIFIER_TYPE_VALUEs. */
622 for (link = current_binding_level->type_shadowed;
623 link; link = TREE_CHAIN (link))
624 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
626 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
627 for (link = current_binding_level->shadowed_labels;
629 link = TREE_CHAIN (link))
630 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
632 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
633 list if a `using' declaration put them there. The debugging
634 back-ends won't understand OVERLOAD, so we remove them here.
635 Because the BLOCK_VARS are (temporarily) shared with
636 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
637 popped all the bindings. */
642 for (d = &BLOCK_VARS (block); *d; )
644 if (TREE_CODE (*d) == TREE_LIST)
645 *d = TREE_CHAIN (*d);
647 d = &TREE_CHAIN (*d);
651 /* If the level being exited is the top level of a function,
652 check over all the labels. */
655 /* Since this is the top level block of a function, the vars are
656 the function's parameters. Don't leave them in the BLOCK
657 because they are found in the FUNCTION_DECL instead. */
658 BLOCK_VARS (block) = 0;
662 kind = current_binding_level->kind;
663 if (kind == sk_cleanup)
667 /* If this is a temporary binding created for a cleanup, then we'll
668 have pushed a statement list level. Pop that, create a new
669 BIND_EXPR for the block, and insert it into the stream. */
670 stmt = pop_stmt_list (current_binding_level->statement_list);
671 stmt = c_build_bind_expr (block, stmt);
677 DECL_INITIAL (current_function_decl) = block;
679 current_binding_level->blocks
680 = chainon (current_binding_level->blocks, block);
682 /* If we did not make a block for the level just exited,
683 any blocks made for inner levels
684 (since they cannot be recorded as subblocks in that level)
685 must be carried forward so they will later become subblocks
686 of something else. */
688 current_binding_level->blocks
689 = chainon (current_binding_level->blocks, subblocks);
691 /* Each and every BLOCK node created here in `poplevel' is important
692 (e.g. for proper debugging information) so if we created one
693 earlier, mark it as "used". */
695 TREE_USED (block) = 1;
697 /* All temporary bindings created for cleanups are popped silently. */
698 if (kind == sk_cleanup)
701 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, block);
704 /* Delete the node BLOCK from the current binding level.
705 This is used for the block inside a stmt expr ({...})
706 so that the block can be reinserted where appropriate. */
709 delete_block (tree block)
712 if (current_binding_level->blocks == block)
713 current_binding_level->blocks = TREE_CHAIN (block);
714 for (t = current_binding_level->blocks; t;)
716 if (TREE_CHAIN (t) == block)
717 TREE_CHAIN (t) = TREE_CHAIN (block);
721 TREE_CHAIN (block) = NULL_TREE;
722 /* Clear TREE_USED which is always set by poplevel.
723 The flag is set again if insert_block is called. */
724 TREE_USED (block) = 0;
727 /* Insert BLOCK at the end of the list of subblocks of the
728 current binding level. This is used when a BIND_EXPR is expanded,
729 to handle the BLOCK node inside the BIND_EXPR. */
732 insert_block (tree block)
734 TREE_USED (block) = 1;
735 current_binding_level->blocks
736 = chainon (current_binding_level->blocks, block);
739 /* Returns nonzero if T is a virtual function table. */
742 vtable_decl_p (tree t, void* data ATTRIBUTE_UNUSED )
744 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
747 /* Returns nonzero if T is a TYPE_DECL for a type with virtual
751 vtype_decl_p (tree t, void *data ATTRIBUTE_UNUSED )
753 return (TREE_CODE (t) == TYPE_DECL
754 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
755 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
758 struct walk_globals_data {
764 /* Walk the vtable declarations in NAMESPACE. Whenever one is found
765 for which P returns nonzero, call F with its address. If any call
766 to F returns a nonzero value, return a nonzero value. */
769 walk_vtables_r (tree namespace, void* data)
771 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
772 walk_globals_fn f = wgd->f;
774 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
777 for (; decl ; decl = TREE_CHAIN (decl))
778 result |= (*f) (&decl, d);
783 /* Walk the vtable declarations. Whenever one is found for which P
784 returns nonzero, call F with its address. If any call to F
785 returns a nonzero value, return a nonzero value. */
787 walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
789 struct walk_globals_data wgd;
794 return walk_namespaces (walk_vtables_r, &wgd);
797 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
798 itself, calling F for each. The DATA is passed to F as well. */
801 walk_namespaces_r (tree namespace, walk_namespaces_fn f, void* data)
804 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
806 result |= (*f) (namespace, data);
808 for (; current; current = TREE_CHAIN (current))
809 result |= walk_namespaces_r (current, f, data);
814 /* Walk all the namespaces, calling F for each. The DATA is passed to
818 walk_namespaces (walk_namespaces_fn f, void* data)
820 return walk_namespaces_r (global_namespace, f, data);
823 /* Walk the global declarations in NAMESPACE. Whenever one is found
824 for which P returns nonzero, call F with its address. If any call
825 to F returns a nonzero value, return a nonzero value. */
828 walk_globals_r (tree namespace, void* data)
830 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
831 walk_globals_pred p = wgd->p;
832 walk_globals_fn f = wgd->f;
837 t = &NAMESPACE_LEVEL (namespace)->names;
844 result |= (*f) (t, d);
846 /* If F changed *T, then *T still points at the next item to
849 t = &TREE_CHAIN (*t);
855 /* Walk the global declarations. Whenever one is found for which P
856 returns true, call F with its address. If any call to F
857 returns true, return true. */
860 walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
862 struct walk_globals_data wgd;
867 return walk_namespaces (walk_globals_r, &wgd);
870 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
871 DATA is non-NULL, this is the last time we will call
872 wrapup_global_declarations for this NAMESPACE. */
875 wrapup_globals_for_namespace (tree namespace, void* data)
877 struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
878 varray_type statics = level->static_decls;
879 tree *vec = &VARRAY_TREE (statics, 0);
880 int len = VARRAY_ACTIVE_SIZE (statics);
881 int last_time = (data != 0);
885 check_global_declarations (vec, len);
889 /* Write out any globals that need to be output. */
890 return wrapup_global_declarations (vec, len);
894 /* In C++, you don't have to write `struct S' to refer to `S'; you
895 can just use `S'. We accomplish this by creating a TYPE_DECL as
896 if the user had written `typedef struct S S'. Create and return
897 the TYPE_DECL for TYPE. */
900 create_implicit_typedef (tree name, tree type)
904 decl = build_decl (TYPE_DECL, name, type);
905 DECL_ARTIFICIAL (decl) = 1;
906 /* There are other implicit type declarations, like the one *within*
907 a class that allows you to write `S::S'. We must distinguish
909 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
910 TYPE_NAME (type) = decl;
915 /* Remember a local name for name-mangling purposes. */
918 push_local_name (tree decl)
923 timevar_push (TV_NAME_LOOKUP);
925 VARRAY_TREE_INIT (local_names, 8, "local_names");
927 name = DECL_NAME (decl);
929 nelts = VARRAY_ACTIVE_SIZE (local_names);
930 for (i = 0; i < nelts; i++)
932 t = VARRAY_TREE (local_names, i);
933 if (DECL_NAME (t) == name)
935 if (!DECL_LANG_SPECIFIC (decl))
936 retrofit_lang_decl (decl);
937 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
938 if (DECL_LANG_SPECIFIC (t))
939 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
941 DECL_DISCRIMINATOR (decl) = 1;
943 VARRAY_TREE (local_names, i) = decl;
944 timevar_pop (TV_NAME_LOOKUP);
949 VARRAY_PUSH_TREE (local_names, decl);
950 timevar_pop (TV_NAME_LOOKUP);
953 /* Subroutine of duplicate_decls: return truthvalue of whether
954 or not types of these decls match.
956 For C++, we must compare the parameter list so that `int' can match
957 `int&' in a parameter position, but `int&' is not confused with
961 decls_match (tree newdecl, tree olddecl)
965 if (newdecl == olddecl)
968 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
969 /* If the two DECLs are not even the same kind of thing, we're not
970 interested in their types. */
973 if (TREE_CODE (newdecl) == FUNCTION_DECL)
975 tree f1 = TREE_TYPE (newdecl);
976 tree f2 = TREE_TYPE (olddecl);
977 tree p1 = TYPE_ARG_TYPES (f1);
978 tree p2 = TYPE_ARG_TYPES (f2);
980 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
981 && ! (DECL_EXTERN_C_P (newdecl)
982 && DECL_EXTERN_C_P (olddecl)))
985 if (TREE_CODE (f1) != TREE_CODE (f2))
988 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
990 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
991 && (DECL_BUILT_IN (olddecl)
992 #ifndef NO_IMPLICIT_EXTERN_C
993 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
994 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
998 types_match = self_promoting_args_p (p1);
999 if (p1 == void_list_node)
1000 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1002 #ifndef NO_IMPLICIT_EXTERN_C
1003 else if (p1 == NULL_TREE
1004 && (DECL_EXTERN_C_P (olddecl)
1005 && DECL_IN_SYSTEM_HEADER (olddecl)
1006 && !DECL_CLASS_SCOPE_P (olddecl))
1007 && (DECL_EXTERN_C_P (newdecl)
1008 && DECL_IN_SYSTEM_HEADER (newdecl)
1009 && !DECL_CLASS_SCOPE_P (newdecl)))
1011 types_match = self_promoting_args_p (p2);
1012 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1016 types_match = compparms (p1, p2);
1021 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1023 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1024 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1027 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1028 DECL_TEMPLATE_PARMS (olddecl)))
1031 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1032 types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1033 TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1035 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1036 DECL_TEMPLATE_RESULT (newdecl));
1040 if (TREE_TYPE (newdecl) == error_mark_node)
1041 types_match = TREE_TYPE (olddecl) == error_mark_node;
1042 else if (TREE_TYPE (olddecl) == NULL_TREE)
1043 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1044 else if (TREE_TYPE (newdecl) == NULL_TREE)
1047 types_match = comptypes (TREE_TYPE (newdecl),
1048 TREE_TYPE (olddecl),
1049 COMPARE_REDECLARATION);
1055 /* If NEWDECL is `static' and an `extern' was seen previously,
1056 warn about it. OLDDECL is the previous declaration.
1058 Note that this does not apply to the C++ case of declaring
1059 a variable `extern const' and then later `const'.
1061 Don't complain about built-in functions, since they are beyond
1062 the user's control. */
1065 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1069 if (TREE_CODE (newdecl) == TYPE_DECL
1070 || TREE_CODE (newdecl) == TEMPLATE_DECL
1071 || TREE_CODE (newdecl) == CONST_DECL
1072 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1075 /* Don't get confused by static member functions; that's a different
1077 if (TREE_CODE (newdecl) == FUNCTION_DECL
1078 && DECL_STATIC_FUNCTION_P (newdecl))
1081 /* If the old declaration was `static', or the new one isn't, then
1082 then everything is OK. */
1083 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1086 /* It's OK to declare a builtin function as `static'. */
1087 if (TREE_CODE (olddecl) == FUNCTION_DECL
1088 && DECL_ARTIFICIAL (olddecl))
1091 name = DECL_ASSEMBLER_NAME (newdecl);
1092 pedwarn ("`%D' was declared `extern' and later `static'", newdecl);
1093 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
1096 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1097 If the redeclaration is invalid, a diagnostic is issued, and the
1098 error_mark_node is returned. Otherwise, OLDDECL is returned.
1100 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1104 duplicate_decls (tree newdecl, tree olddecl)
1106 unsigned olddecl_uid = DECL_UID (olddecl);
1107 int olddecl_friend = 0, types_match = 0;
1108 int new_defines_function = 0;
1110 if (newdecl == olddecl)
1113 types_match = decls_match (newdecl, olddecl);
1115 /* If either the type of the new decl or the type of the old decl is an
1116 error_mark_node, then that implies that we have already issued an
1117 error (earlier) for some bogus type specification, and in that case,
1118 it is rather pointless to harass the user with yet more error message
1119 about the same declaration, so just pretend the types match here. */
1120 if (TREE_TYPE (newdecl) == error_mark_node
1121 || TREE_TYPE (olddecl) == error_mark_node)
1124 if (DECL_P (olddecl)
1125 && TREE_CODE (newdecl) == FUNCTION_DECL
1126 && TREE_CODE (olddecl) == FUNCTION_DECL
1127 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1129 if (DECL_DECLARED_INLINE_P (newdecl)
1130 && DECL_UNINLINABLE (newdecl)
1131 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1132 /* Already warned elsewhere. */;
1133 else if (DECL_DECLARED_INLINE_P (olddecl)
1134 && DECL_UNINLINABLE (olddecl)
1135 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1136 /* Already warned. */;
1137 else if (DECL_DECLARED_INLINE_P (newdecl)
1138 && DECL_UNINLINABLE (olddecl)
1139 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1141 warning ("%Jfunction '%D' redeclared as inline", newdecl, newdecl);
1142 warning ("%Jprevious declaration of '%D' with attribute noinline",
1145 else if (DECL_DECLARED_INLINE_P (olddecl)
1146 && DECL_UNINLINABLE (newdecl)
1147 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1149 warning ("%Jfunction '%D' redeclared with attribute noinline",
1151 warning ("%Jprevious declaration of '%D' was inline",
1156 /* Check for redeclaration and other discrepancies. */
1157 if (TREE_CODE (olddecl) == FUNCTION_DECL
1158 && DECL_ARTIFICIAL (olddecl))
1160 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1162 /* Avoid warnings redeclaring anticipated built-ins. */
1163 if (DECL_ANTICIPATED (olddecl))
1166 /* If you declare a built-in or predefined function name as static,
1167 the old definition is overridden, but optionally warn this was a
1168 bad choice of name. */
1169 if (! TREE_PUBLIC (newdecl))
1172 warning ("shadowing %s function `%#D'",
1173 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1175 /* Discard the old built-in function. */
1178 /* If the built-in is not ansi, then programs can override
1179 it even globally without an error. */
1180 else if (! DECL_BUILT_IN (olddecl))
1181 warning ("library function `%#D' redeclared as non-function `%#D'",
1185 error ("declaration of `%#D'", newdecl);
1186 error ("conflicts with built-in declaration `%#D'",
1191 else if (!types_match)
1193 /* Avoid warnings redeclaring anticipated built-ins. */
1194 if (DECL_ANTICIPATED (olddecl))
1196 /* Deal with fileptr_type_node. FILE type is not known
1197 at the time we create the builtins. */
1200 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1201 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1203 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1206 else if (TREE_VALUE (t2) == fileptr_type_node)
1208 tree t = TREE_VALUE (t1);
1210 if (TREE_CODE (t) == POINTER_TYPE
1211 && TYPE_NAME (TREE_TYPE (t))
1212 && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1213 == get_identifier ("FILE")
1214 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1216 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1218 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1219 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1220 types_match = decls_match (newdecl, olddecl);
1222 return duplicate_decls (newdecl, olddecl);
1223 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1226 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1229 else if ((DECL_EXTERN_C_P (newdecl)
1230 && DECL_EXTERN_C_P (olddecl))
1231 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1232 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1234 /* A near match; override the builtin. */
1236 if (TREE_PUBLIC (newdecl))
1238 warning ("new declaration `%#D'", newdecl);
1239 warning ("ambiguates built-in declaration `%#D'",
1242 else if (warn_shadow)
1243 warning ("shadowing %s function `%#D'",
1244 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
1248 /* Discard the old built-in function. */
1251 /* Replace the old RTL to avoid problems with inlining. */
1252 COPY_DECL_RTL (newdecl, olddecl);
1254 /* Even if the types match, prefer the new declarations type
1255 for anticipated built-ins, for exception lists, etc... */
1256 else if (DECL_ANTICIPATED (olddecl))
1258 tree type = TREE_TYPE (newdecl);
1259 tree attribs = (*targetm.merge_type_attributes)
1260 (TREE_TYPE (olddecl), type);
1262 type = cp_build_type_attribute_variant (type, attribs);
1263 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1266 /* Whether or not the builtin can throw exceptions has no
1267 bearing on this declarator. */
1268 TREE_NOTHROW (olddecl) = 0;
1270 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1272 /* If a builtin function is redeclared as `static', merge
1273 the declarations, but make the original one static. */
1274 DECL_THIS_STATIC (olddecl) = 1;
1275 TREE_PUBLIC (olddecl) = 0;
1277 /* Make the old declaration consistent with the new one so
1278 that all remnants of the builtin-ness of this function
1279 will be banished. */
1280 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1281 COPY_DECL_RTL (newdecl, olddecl);
1284 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1286 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1287 && TREE_CODE (newdecl) != TYPE_DECL
1288 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
1289 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
1290 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1291 && TREE_CODE (olddecl) != TYPE_DECL
1292 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
1293 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1296 /* We do nothing special here, because C++ does such nasty
1297 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1298 get shadowed, and know that if we need to find a TYPE_DECL
1299 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1300 slot of the identifier. */
1304 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1305 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1306 || (TREE_CODE (olddecl) == FUNCTION_DECL
1307 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1310 error ("`%#D' redeclared as different kind of symbol", newdecl);
1311 if (TREE_CODE (olddecl) == TREE_LIST)
1312 olddecl = TREE_VALUE (olddecl);
1313 cp_error_at ("previous declaration of `%#D'", olddecl);
1315 return error_mark_node;
1317 else if (!types_match)
1319 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1320 /* These are certainly not duplicate declarations; they're
1321 from different scopes. */
1324 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1326 /* The name of a class template may not be declared to refer to
1327 any other template, class, function, object, namespace, value,
1328 or type in the same scope. */
1329 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1330 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1332 error ("declaration of template `%#D'", newdecl);
1333 cp_error_at ("conflicts with previous declaration `%#D'",
1336 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1337 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1338 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1339 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1340 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1341 DECL_TEMPLATE_PARMS (olddecl))
1342 /* Template functions can be disambiguated by
1344 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1345 TREE_TYPE (TREE_TYPE (olddecl))))
1347 error ("new declaration `%#D'", newdecl);
1348 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
1352 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1354 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1356 error ("declaration of C function `%#D' conflicts with",
1358 cp_error_at ("previous declaration `%#D' here", olddecl);
1360 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1361 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1363 error ("new declaration `%#D'", newdecl);
1364 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
1371 error ("conflicting declaration '%#D'", newdecl);
1372 cp_error_at ("'%D' has a previous declaration as `%#D'",
1377 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1378 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1379 && (!DECL_TEMPLATE_INFO (newdecl)
1380 || (DECL_TI_TEMPLATE (newdecl)
1381 != DECL_TI_TEMPLATE (olddecl))))
1382 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1383 && (!DECL_TEMPLATE_INFO (olddecl)
1384 || (DECL_TI_TEMPLATE (olddecl)
1385 != DECL_TI_TEMPLATE (newdecl))))))
1386 /* It's OK to have a template specialization and a non-template
1387 with the same type, or to have specializations of two
1388 different templates with the same type. Note that if one is a
1389 specialization, and the other is an instantiation of the same
1390 template, that we do not exit at this point. That situation
1391 can occur if we instantiate a template class, and then
1392 specialize one of its methods. This situation is valid, but
1393 the declarations must be merged in the usual way. */
1395 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1396 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1397 && !DECL_USE_TEMPLATE (newdecl))
1398 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1399 && !DECL_USE_TEMPLATE (olddecl))))
1400 /* One of the declarations is a template instantiation, and the
1401 other is not a template at all. That's OK. */
1403 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
1404 && DECL_NAMESPACE_ALIAS (newdecl)
1405 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
1406 /* In [namespace.alias] we have:
1408 In a declarative region, a namespace-alias-definition can be
1409 used to redefine a namespace-alias declared in that declarative
1410 region to refer only to the namespace to which it already
1413 Therefore, if we encounter a second alias directive for the same
1414 alias, we can just ignore the second directive. */
1418 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1421 error (errmsg, newdecl);
1422 if (DECL_NAME (olddecl) != NULL_TREE)
1423 cp_error_at ((DECL_INITIAL (olddecl)
1424 && namespace_bindings_p ())
1425 ? "`%#D' previously defined here"
1426 : "`%#D' previously declared here", olddecl);
1427 return error_mark_node;
1429 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1430 && DECL_INITIAL (olddecl) != NULL_TREE
1431 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
1432 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
1434 /* Prototype decl follows defn w/o prototype. */
1435 cp_warning_at ("prototype for `%#D'", newdecl);
1436 warning ("%Jfollows non-prototype definition here", olddecl);
1438 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1439 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1441 /* extern "C" int foo ();
1442 int foo () { bar (); }
1444 if (current_lang_depth () == 0)
1445 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1448 cp_error_at ("previous declaration of `%#D' with %L linkage",
1449 olddecl, DECL_LANGUAGE (olddecl));
1450 error ("conflicts with new declaration with %L linkage",
1451 DECL_LANGUAGE (newdecl));
1455 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1457 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1459 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1460 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1463 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1464 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1466 for (; t1 && t1 != void_list_node;
1467 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1468 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1470 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1473 pedwarn ("default argument given for parameter %d of `%#D'",
1475 cp_pedwarn_at ("after previous specification in `%#D'",
1480 error ("default argument given for parameter %d of `%#D'",
1482 cp_error_at ("after previous specification in `%#D'",
1487 if (DECL_DECLARED_INLINE_P (newdecl)
1488 && ! DECL_DECLARED_INLINE_P (olddecl)
1489 && TREE_ADDRESSABLE (olddecl) && warn_inline)
1491 warning ("`%#D' was used before it was declared inline", newdecl);
1492 warning ("%Jprevious non-inline declaration here", olddecl);
1497 /* Do not merge an implicit typedef with an explicit one. In:
1501 typedef class A A __attribute__ ((foo));
1503 the attribute should apply only to the typedef. */
1504 if (TREE_CODE (olddecl) == TYPE_DECL
1505 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1506 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1509 /* If new decl is `static' and an `extern' was seen previously,
1511 warn_extern_redeclared_static (newdecl, olddecl);
1513 /* We have committed to returning 1 at this point. */
1514 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1516 /* Now that functions must hold information normally held
1517 by field decls, there is extra work to do so that
1518 declaration information does not get destroyed during
1520 if (DECL_VINDEX (olddecl))
1521 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1522 if (DECL_CONTEXT (olddecl))
1523 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1524 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1525 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1526 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1527 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1528 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
1529 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1530 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1531 SET_OVERLOADED_OPERATOR_CODE
1532 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1533 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1535 /* Optionally warn about more than one declaration for the same
1536 name, but don't warn about a function declaration followed by a
1538 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1539 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1540 /* Don't warn about extern decl followed by definition. */
1541 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1542 /* Don't warn about friends, let add_friend take care of it. */
1543 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
1545 warning ("redundant redeclaration of `%D' in same scope", newdecl);
1546 cp_warning_at ("previous declaration of `%D'", olddecl);
1550 /* Deal with C++: must preserve virtual function table size. */
1551 if (TREE_CODE (olddecl) == TYPE_DECL)
1553 tree newtype = TREE_TYPE (newdecl);
1554 tree oldtype = TREE_TYPE (olddecl);
1556 if (newtype != error_mark_node && oldtype != error_mark_node
1557 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1558 CLASSTYPE_FRIEND_CLASSES (newtype)
1559 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1561 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1564 /* Copy all the DECL_... slots specified in the new decl
1565 except for any that we copy here from the old type. */
1566 DECL_ATTRIBUTES (newdecl)
1567 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1569 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1571 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
1572 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1573 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1574 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1576 /* If the new declaration is a definition, update the file and
1577 line information on the declaration. */
1578 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
1579 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
1581 DECL_SOURCE_LOCATION (olddecl)
1582 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
1583 = DECL_SOURCE_LOCATION (newdecl);
1584 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1585 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (olddecl))
1586 = DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (newdecl));
1589 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1591 DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
1592 |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
1593 DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
1594 |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
1602 /* Automatically handles default parameters. */
1603 tree oldtype = TREE_TYPE (olddecl);
1606 /* Merge the data types specified in the two decls. */
1607 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1609 /* If merge_types produces a non-typedef type, just use the old type. */
1610 if (TREE_CODE (newdecl) == TYPE_DECL
1611 && newtype == DECL_ORIGINAL_TYPE (newdecl))
1614 if (TREE_CODE (newdecl) == VAR_DECL)
1616 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1617 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1618 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1619 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1622 /* Do this after calling `merge_types' so that default
1623 parameters don't confuse us. */
1624 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1625 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
1626 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
1628 TREE_TYPE (newdecl) = build_exception_variant (newtype,
1629 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
1630 TREE_TYPE (olddecl) = build_exception_variant (newtype,
1631 TYPE_RAISES_EXCEPTIONS (oldtype));
1633 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
1634 && ! DECL_IS_BUILTIN (olddecl)
1636 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
1637 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
1639 error ("declaration of `%F' throws different exceptions",
1641 cp_error_at ("than previous declaration `%F'", olddecl);
1644 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1646 /* Lay the type out, unless already done. */
1647 if (! same_type_p (newtype, oldtype)
1648 && TREE_TYPE (newdecl) != error_mark_node
1649 && !(processing_template_decl && uses_template_parms (newdecl)))
1650 layout_type (TREE_TYPE (newdecl));
1652 if ((TREE_CODE (newdecl) == VAR_DECL
1653 || TREE_CODE (newdecl) == PARM_DECL
1654 || TREE_CODE (newdecl) == RESULT_DECL
1655 || TREE_CODE (newdecl) == FIELD_DECL
1656 || TREE_CODE (newdecl) == TYPE_DECL)
1657 && !(processing_template_decl && uses_template_parms (newdecl)))
1658 layout_decl (newdecl, 0);
1660 /* Merge the type qualifiers. */
1661 if (TREE_READONLY (newdecl))
1662 TREE_READONLY (olddecl) = 1;
1663 if (TREE_THIS_VOLATILE (newdecl))
1664 TREE_THIS_VOLATILE (olddecl) = 1;
1666 /* Merge the initialization information. */
1667 if (DECL_INITIAL (newdecl) == NULL_TREE
1668 && DECL_INITIAL (olddecl) != NULL_TREE)
1670 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1671 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1672 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
1673 && DECL_LANG_SPECIFIC (newdecl)
1674 && DECL_LANG_SPECIFIC (olddecl))
1676 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1677 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1681 /* Merge the section attribute.
1682 We want to issue an error if the sections conflict but that must be
1683 done later in decl_attributes since we are called before attributes
1685 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1686 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1688 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1690 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1691 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1692 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1693 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1694 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1695 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1696 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1697 DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1698 /* Keep the old RTL. */
1699 COPY_DECL_RTL (olddecl, newdecl);
1701 else if (TREE_CODE (newdecl) == VAR_DECL
1702 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1704 /* Keep the old RTL. We cannot keep the old RTL if the old
1705 declaration was for an incomplete object and the new
1706 declaration is not since many attributes of the RTL will
1708 COPY_DECL_RTL (olddecl, newdecl);
1711 /* If cannot merge, then use the new type and qualifiers,
1712 and don't preserve the old rtl. */
1715 /* Clean out any memory we had of the old declaration. */
1716 tree oldstatic = value_member (olddecl, static_aggregates);
1718 TREE_VALUE (oldstatic) = error_mark_node;
1720 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1721 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1722 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1723 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1726 /* Merge the storage class information. */
1727 merge_weak (newdecl, olddecl);
1729 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
1730 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1731 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1732 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1733 if (! DECL_EXTERNAL (olddecl))
1734 DECL_EXTERNAL (newdecl) = 0;
1736 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1738 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1739 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1740 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1741 DECL_TEMPLATE_INSTANTIATED (newdecl)
1742 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1743 /* Don't really know how much of the language-specific
1744 values we should copy from old to new. */
1745 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1746 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
1747 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
1748 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1749 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1750 DECL_INITIALIZED_IN_CLASS_P (newdecl)
1751 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1752 olddecl_friend = DECL_FRIEND_P (olddecl);
1754 /* Only functions have DECL_BEFRIENDING_CLASSES. */
1755 if (TREE_CODE (newdecl) == FUNCTION_DECL
1756 || DECL_FUNCTION_TEMPLATE_P (newdecl))
1758 DECL_BEFRIENDING_CLASSES (newdecl)
1759 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
1760 DECL_BEFRIENDING_CLASSES (olddecl));
1761 /* DECL_THUNKS is only valid for virtual functions,
1762 otherwise it is a DECL_FRIEND_CONTEXT. */
1763 if (DECL_VIRTUAL_P (newdecl))
1764 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
1768 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1770 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
1771 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
1773 /* If newdecl is not a specialization, then it is not a
1774 template-related function at all. And that means that we
1775 should have exited above, returning 0. */
1776 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
1779 if (TREE_USED (olddecl))
1780 /* From [temp.expl.spec]:
1782 If a template, a member template or the member of a class
1783 template is explicitly specialized then that
1784 specialization shall be declared before the first use of
1785 that specialization that would cause an implicit
1786 instantiation to take place, in every translation unit in
1787 which such a use occurs. */
1788 error ("explicit specialization of %D after first use",
1791 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
1793 /* [temp.expl.spec/14] We don't inline explicit specialization
1794 just because the primary template says so. */
1798 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
1799 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
1801 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
1803 /* If either decl says `inline', this fn is inline, unless
1804 its definition was passed already. */
1805 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
1806 DECL_INLINE (olddecl) = 1;
1807 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1809 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1810 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1813 /* Preserve abstractness on cloned [cd]tors. */
1814 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
1818 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1819 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
1820 COPY_DECL_RTL (newdecl, olddecl);
1822 if (! types_match || new_defines_function)
1824 /* These need to be copied so that the names are available.
1825 Note that if the types do match, we'll preserve inline
1826 info and other bits, but if not, we won't. */
1827 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
1828 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
1830 if (new_defines_function)
1831 /* If defining a function declared with other language
1832 linkage, use the previously declared language linkage. */
1833 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1834 else if (types_match)
1836 /* If redeclaring a builtin function, and not a definition,
1837 it stays built in. */
1838 if (DECL_BUILT_IN (olddecl))
1840 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1841 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1842 /* If we're keeping the built-in definition, keep the rtl,
1843 regardless of declaration matches. */
1844 COPY_DECL_RTL (olddecl, newdecl);
1847 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1848 /* Don't clear out the arguments if we're redefining a function. */
1849 if (DECL_ARGUMENTS (olddecl))
1850 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1853 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1854 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
1856 /* Now preserve various other info from the definition. */
1857 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
1858 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
1859 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1860 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1862 /* If either declaration has a nondefault visibility, use it. */
1863 if (DECL_VISIBILITY (olddecl) != VISIBILITY_DEFAULT)
1865 if (DECL_VISIBILITY (newdecl) != VISIBILITY_DEFAULT
1866 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1868 warning ("%J'%D': visibility attribute ignored because it",
1870 warning ("%Jconflicts with previous declaration here", olddecl);
1872 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1875 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1879 function_size = sizeof (struct tree_decl);
1881 memcpy ((char *) olddecl + sizeof (struct tree_common),
1882 (char *) newdecl + sizeof (struct tree_common),
1883 function_size - sizeof (struct tree_common));
1885 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
1886 /* If newdecl is a template instantiation, it is possible that
1887 the following sequence of events has occurred:
1889 o A friend function was declared in a class template. The
1890 class template was instantiated.
1892 o The instantiation of the friend declaration was
1893 recorded on the instantiation list, and is newdecl.
1895 o Later, however, instantiate_class_template called pushdecl
1896 on the newdecl to perform name injection. But, pushdecl in
1897 turn called duplicate_decls when it discovered that another
1898 declaration of a global function with the same name already
1901 o Here, in duplicate_decls, we decided to clobber newdecl.
1903 If we're going to do that, we'd better make sure that
1904 olddecl, and not newdecl, is on the list of
1905 instantiations so that if we try to do the instantiation
1906 again we won't get the clobbered declaration. */
1907 reregister_specialization (newdecl,
1908 DECL_TI_TEMPLATE (newdecl),
1913 memcpy ((char *) olddecl + sizeof (struct tree_common),
1914 (char *) newdecl + sizeof (struct tree_common),
1915 sizeof (struct tree_decl) - sizeof (struct tree_common)
1916 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
1919 DECL_UID (olddecl) = olddecl_uid;
1921 DECL_FRIEND_P (olddecl) = 1;
1923 /* NEWDECL contains the merged attribute lists.
1924 Update OLDDECL to be the same. */
1925 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1927 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1928 so that encode_section_info has a chance to look at the new decl
1929 flags and attributes. */
1930 if (DECL_RTL_SET_P (olddecl)
1931 && (TREE_CODE (olddecl) == FUNCTION_DECL
1932 || (TREE_CODE (olddecl) == VAR_DECL
1933 && TREE_STATIC (olddecl))))
1934 make_decl_rtl (olddecl, NULL);
1939 /* Return zero if the declaration NEWDECL is valid
1940 when the declaration OLDDECL (assumed to be for the same name)
1941 has already been seen.
1942 Otherwise return an error message format string with a %s
1943 where the identifier should go. */
1946 redeclaration_error_message (tree newdecl, tree olddecl)
1948 if (TREE_CODE (newdecl) == TYPE_DECL)
1950 /* Because C++ can put things into name space for free,
1951 constructs like "typedef struct foo { ... } foo"
1952 would look like an erroneous redeclaration. */
1953 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
1956 return "redefinition of `%#D'";
1958 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1960 /* If this is a pure function, its olddecl will actually be
1961 the original initialization to `0' (which we force to call
1962 abort()). Don't complain about redefinition in this case. */
1963 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
1966 /* If both functions come from different namespaces, this is not
1967 a redeclaration - this is a conflict with a used function. */
1968 if (DECL_NAMESPACE_SCOPE_P (olddecl)
1969 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
1970 return "`%D' conflicts with used function";
1972 /* We'll complain about linkage mismatches in
1973 warn_extern_redeclared_static. */
1975 /* Defining the same name twice is no good. */
1976 if (DECL_INITIAL (olddecl) != NULL_TREE
1977 && DECL_INITIAL (newdecl) != NULL_TREE)
1979 if (DECL_NAME (olddecl) == NULL_TREE)
1980 return "`%#D' not declared in class";
1982 return "redefinition of `%#D'";
1986 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1990 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1992 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
1993 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
1994 return "redefinition of `%#D'";
1998 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
1999 || (DECL_TEMPLATE_RESULT (newdecl)
2000 == DECL_TEMPLATE_RESULT (olddecl)))
2003 nt = DECL_TEMPLATE_RESULT (newdecl);
2004 if (DECL_TEMPLATE_INFO (nt))
2005 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2006 ot = DECL_TEMPLATE_RESULT (olddecl);
2007 if (DECL_TEMPLATE_INFO (ot))
2008 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2009 if (DECL_INITIAL (nt) && DECL_INITIAL (ot))
2010 return "redefinition of `%#D'";
2014 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2016 /* Objects declared at top level: */
2017 /* If at least one is a reference, it's ok. */
2018 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2020 /* Reject two definitions. */
2021 return "redefinition of `%#D'";
2025 /* Objects declared with block scope: */
2026 /* Reject two definitions, and reject a definition
2027 together with an external reference. */
2028 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2029 return "redeclaration of `%#D'";
2034 /* Create a new label, named ID. */
2037 make_label_decl (tree id, int local_p)
2041 decl = build_decl (LABEL_DECL, id, void_type_node);
2043 DECL_CONTEXT (decl) = current_function_decl;
2044 DECL_MODE (decl) = VOIDmode;
2045 C_DECLARED_LABEL_FLAG (decl) = local_p;
2047 /* Say where one reference is to the label, for the sake of the
2048 error if it is not defined. */
2049 DECL_SOURCE_LOCATION (decl) = input_location;
2051 /* Record the fact that this identifier is bound to this label. */
2052 SET_IDENTIFIER_LABEL_VALUE (id, decl);
2057 /* Record this label on the list of used labels so that we can check
2058 at the end of the function to see whether or not the label was
2059 actually defined, and so we can check when the label is defined whether
2060 this use is valid. */
2063 use_label (tree decl)
2065 if (named_label_uses == NULL
2066 || named_label_uses->names_in_scope != current_binding_level->names
2067 || named_label_uses->label_decl != decl)
2069 struct named_label_use_list *new_ent;
2070 new_ent = ggc_alloc (sizeof (struct named_label_use_list));
2071 new_ent->label_decl = decl;
2072 new_ent->names_in_scope = current_binding_level->names;
2073 new_ent->binding_level = current_binding_level;
2074 new_ent->o_goto_locus = input_location;
2075 new_ent->next = named_label_uses;
2076 named_label_uses = new_ent;
2080 /* Look for a label named ID in the current function. If one cannot
2081 be found, create one. (We keep track of used, but undefined,
2082 labels, and complain about them at the end of a function.) */
2085 lookup_label (tree id)
2088 struct named_label_list *ent;
2090 timevar_push (TV_NAME_LOOKUP);
2091 /* You can't use labels at global scope. */
2092 if (current_function_decl == NULL_TREE)
2094 error ("label `%E' referenced outside of any function", id);
2095 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
2098 /* See if we've already got this label. */
2099 decl = IDENTIFIER_LABEL_VALUE (id);
2100 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2101 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2103 /* Record this label on the list of labels used in this function.
2104 We do this before calling make_label_decl so that we get the
2105 IDENTIFIER_LABEL_VALUE before the new label is declared. */
2106 ent = ggc_alloc_cleared (sizeof (struct named_label_list));
2107 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
2108 ent->next = named_labels;
2111 /* We need a new label. */
2112 decl = make_label_decl (id, /*local_p=*/0);
2114 /* Now fill in the information we didn't have before. */
2115 ent->label_decl = decl;
2117 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
2120 /* Declare a local label named ID. */
2123 declare_local_label (tree id)
2127 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2128 this scope we can restore the old value of
2129 IDENTIFIER_TYPE_VALUE. */
2130 current_binding_level->shadowed_labels
2131 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
2132 current_binding_level->shadowed_labels);
2133 /* Look for the label. */
2134 decl = make_label_decl (id, /*local_p=*/1);
2135 /* Now fill in the information we didn't have before. */
2136 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
2141 /* Returns nonzero if it is ill-formed to jump past the declaration of
2142 DECL. Returns 2 if it's also a real problem. */
2145 decl_jump_unsafe (tree decl)
2147 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
2150 if (DECL_INITIAL (decl) == NULL_TREE
2151 && pod_type_p (TREE_TYPE (decl)))
2154 /* This is really only important if we're crossing an initialization.
2155 The POD stuff is just pedantry; why should it matter if the class
2156 contains a field of pointer to member type? */
2157 if (DECL_INITIAL (decl)
2158 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
2163 /* Check that a single previously seen jump to a newly defined label
2164 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2165 the jump context; NAMES are the names in scope in LEVEL at the jump
2166 context; FILE and LINE are the source position of the jump or 0. */
2169 check_previous_goto_1 (tree decl,
2170 struct cp_binding_level* level,
2171 tree names, const location_t *locus)
2175 struct cp_binding_level *b = current_binding_level;
2176 for (; b; b = b->level_chain)
2178 tree new_decls = b->names;
2179 tree old_decls = (b == level ? names : NULL_TREE);
2180 for (; new_decls != old_decls;
2181 new_decls = TREE_CHAIN (new_decls))
2183 int problem = decl_jump_unsafe (new_decls);
2190 pedwarn ("jump to label `%D'", decl);
2192 pedwarn ("jump to case label");
2195 pedwarn ("%H from here", locus);
2200 cp_error_at (" crosses initialization of `%#D'",
2203 cp_pedwarn_at (" enters scope of non-POD `%#D'",
2209 if ((b->kind == sk_try || b->kind == sk_catch) && ! saw_eh)
2214 pedwarn ("jump to label `%D'", decl);
2216 pedwarn ("jump to case label");
2219 pedwarn ("%H from here", locus);
2222 if (b->kind == sk_try)
2223 error (" enters try block");
2225 error (" enters catch block");
2232 check_previous_goto (struct named_label_use_list* use)
2234 check_previous_goto_1 (use->label_decl, use->binding_level,
2235 use->names_in_scope, &use->o_goto_locus);
2239 check_switch_goto (struct cp_binding_level* level)
2241 check_previous_goto_1 (NULL_TREE, level, level->names, NULL);
2244 /* Check that any previously seen jumps to a newly defined label DECL
2245 are OK. Called by define_label. */
2248 check_previous_gotos (tree decl)
2250 struct named_label_use_list **usep;
2252 if (! TREE_USED (decl))
2255 for (usep = &named_label_uses; *usep; )
2257 struct named_label_use_list *use = *usep;
2258 if (use->label_decl == decl)
2260 check_previous_goto (use);
2264 usep = &(use->next);
2268 /* Check that a new jump to a label DECL is OK. Called by
2269 finish_goto_stmt. */
2272 check_goto (tree decl)
2276 struct named_label_list *lab;
2278 /* We can't know where a computed goto is jumping. So we assume
2280 if (! DECL_P (decl))
2283 /* If the label hasn't been defined yet, defer checking. */
2284 if (! DECL_INITIAL (decl))
2290 for (lab = named_labels; lab; lab = lab->next)
2291 if (decl == lab->label_decl)
2294 /* If the label is not on named_labels it's a gcc local label, so
2295 it must be in an outer scope, so jumping to it is always OK. */
2299 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
2302 cp_pedwarn_at ("jump to label `%D'", decl);
2303 pedwarn (" from here");
2307 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
2309 tree b = TREE_VALUE (bad);
2310 int u = decl_jump_unsafe (b);
2312 if (u > 1 && DECL_ARTIFICIAL (b))
2313 /* Can't skip init of __exception_info. */
2314 error ("%J enters catch block", b);
2316 cp_error_at (" skips initialization of `%#D'", b);
2318 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
2321 if (lab->in_try_scope)
2322 error (" enters try block");
2323 else if (lab->in_catch_scope)
2324 error (" enters catch block");
2327 /* Define a label, specifying the location in the source file.
2328 Return the LABEL_DECL node for the label. */
2331 define_label (location_t location, tree name)
2333 tree decl = lookup_label (name);
2334 struct named_label_list *ent;
2335 struct cp_binding_level *p;
2337 timevar_push (TV_NAME_LOOKUP);
2338 for (ent = named_labels; ent; ent = ent->next)
2339 if (ent->label_decl == decl)
2342 /* After labels, make any new cleanups in the function go into their
2343 own new (temporary) binding contour. */
2344 for (p = current_binding_level;
2345 p->kind != sk_function_parms;
2347 p->more_cleanups_ok = 0;
2349 if (name == get_identifier ("wchar_t"))
2350 pedwarn ("label named wchar_t");
2352 if (DECL_INITIAL (decl) != NULL_TREE)
2353 error ("duplicate label `%D'", decl);
2356 /* Mark label as having been defined. */
2357 DECL_INITIAL (decl) = error_mark_node;
2358 /* Say where in the source. */
2359 DECL_SOURCE_LOCATION (decl) = location;
2362 ent->names_in_scope = current_binding_level->names;
2363 ent->binding_level = current_binding_level;
2365 check_previous_gotos (decl);
2368 timevar_pop (TV_NAME_LOOKUP);
2374 struct cp_binding_level *level;
2375 struct cp_switch *next;
2376 /* The SWITCH_STMT being built. */
2378 /* A splay-tree mapping the low element of a case range to the high
2379 element, or NULL_TREE if there is no high element. Used to
2380 determine whether or not a new case label duplicates an old case
2381 label. We need a tree, rather than simply a hash table, because
2382 of the GNU case range extension. */
2386 /* A stack of the currently active switch statements. The innermost
2387 switch statement is on the top of the stack. There is no need to
2388 mark the stack for garbage collection because it is only active
2389 during the processing of the body of a function, and we never
2390 collect at that point. */
2392 static struct cp_switch *switch_stack;
2394 /* Called right after a switch-statement condition is parsed.
2395 SWITCH_STMT is the switch statement being parsed. */
2398 push_switch (tree switch_stmt)
2400 struct cp_switch *p = xmalloc (sizeof (struct cp_switch));
2401 p->level = current_binding_level;
2402 p->next = switch_stack;
2403 p->switch_stmt = switch_stmt;
2404 p->cases = splay_tree_new (case_compare, NULL, NULL);
2411 struct cp_switch *cs = switch_stack;
2413 /* Emit warnings as needed. */
2414 c_do_switch_warnings (cs->cases, cs->switch_stmt);
2416 splay_tree_delete (cs->cases);
2417 switch_stack = switch_stack->next;
2421 /* Note that we've seen a definition of a case label, and complain if this
2422 is a bad place for one. */
2425 finish_case_label (tree low_value, tree high_value)
2428 struct cp_binding_level *p;
2430 if (processing_template_decl)
2434 /* For templates, just add the case label; we'll do semantic
2435 analysis at instantiation-time. */
2436 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
2437 return add_stmt (build_case_label (low_value, high_value, label));
2440 /* Find the condition on which this switch statement depends. */
2441 cond = SWITCH_COND (switch_stack->switch_stmt);
2442 if (cond && TREE_CODE (cond) == TREE_LIST)
2443 cond = TREE_VALUE (cond);
2445 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
2447 check_switch_goto (switch_stack->level);
2449 /* After labels, make any new cleanups in the function go into their
2450 own new (temporary) binding contour. */
2451 for (p = current_binding_level;
2452 p->kind != sk_function_parms;
2454 p->more_cleanups_ok = 0;
2459 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
2462 typename_hash (const void* k)
2467 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
2468 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
2473 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
2476 typename_compare (const void * k1, const void * k2)
2485 d1 = TYPE_NAME (t1);
2486 d2 = TYPE_NAME (t2);
2488 return (DECL_NAME (d1) == DECL_NAME (d2)
2489 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
2490 && ((TREE_TYPE (t1) != NULL_TREE)
2491 == (TREE_TYPE (t2) != NULL_TREE))
2492 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2493 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
2496 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
2497 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
2498 is non-NULL, this type is being created by the implicit typename
2499 extension, and BASE_TYPE is a type named `t' in some base class of
2500 `T' which depends on template parameters.
2502 Returns the new TYPENAME_TYPE. */
2504 static GTY ((param_is (union tree_node))) htab_t typename_htab;
2507 build_typename_type (tree context, tree name, tree fullname)
2513 if (typename_htab == NULL)
2515 typename_htab = htab_create_ggc (61, &typename_hash,
2516 &typename_compare, NULL);
2519 /* Build the TYPENAME_TYPE. */
2520 t = make_aggr_type (TYPENAME_TYPE);
2521 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2522 TYPENAME_TYPE_FULLNAME (t) = fullname;
2524 /* Build the corresponding TYPE_DECL. */
2525 d = build_decl (TYPE_DECL, name, t);
2526 TYPE_NAME (TREE_TYPE (d)) = d;
2527 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2528 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2529 DECL_ARTIFICIAL (d) = 1;
2531 /* See if we already have this type. */
2532 e = htab_find_slot (typename_htab, t, INSERT);
2541 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
2542 unless an error occurs, in which case error_mark_node is returned.
2543 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
2544 set, we return that, rather than the _TYPE it corresponds to, in
2545 other cases we look through the type decl. If TF_ERROR is set,
2546 complain about errors, otherwise be quiet. */
2549 make_typename_type (tree context, tree name, tsubst_flags_t complain)
2553 if (name == error_mark_node
2554 || context == NULL_TREE
2555 || context == error_mark_node)
2556 return error_mark_node;
2560 if (!(TYPE_LANG_SPECIFIC (name)
2561 && (CLASSTYPE_IS_TEMPLATE (name)
2562 || CLASSTYPE_USE_TEMPLATE (name))))
2563 name = TYPE_IDENTIFIER (name);
2565 /* Create a TEMPLATE_ID_EXPR for the type. */
2566 name = build_nt (TEMPLATE_ID_EXPR,
2567 CLASSTYPE_TI_TEMPLATE (name),
2568 CLASSTYPE_TI_ARGS (name));
2570 else if (TREE_CODE (name) == TYPE_DECL)
2571 name = DECL_NAME (name);
2575 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
2577 name = TREE_OPERAND (name, 0);
2578 if (TREE_CODE (name) == TEMPLATE_DECL)
2579 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
2581 if (TREE_CODE (name) == TEMPLATE_DECL)
2583 error ("`%D' used without template parameters", name);
2584 return error_mark_node;
2586 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 20030802);
2588 if (TREE_CODE (context) == NAMESPACE_DECL)
2590 /* We can get here from typename_sub0 in the explicit_template_type
2591 expansion. Just fail. */
2592 if (complain & tf_error)
2593 error ("no class template named `%#T' in `%#T'",
2595 return error_mark_node;
2598 if (!dependent_type_p (context)
2599 || currently_open_class (context))
2601 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
2603 tree tmpl = NULL_TREE;
2604 if (IS_AGGR_TYPE (context))
2605 tmpl = lookup_field (context, name, 0, false);
2606 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2608 if (complain & tf_error)
2609 error ("no class template named `%#T' in `%#T'",
2611 return error_mark_node;
2614 if (complain & tf_error)
2615 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2617 return lookup_template_class (tmpl,
2618 TREE_OPERAND (fullname, 1),
2620 /*entering_scope=*/0,
2621 tf_error | tf_warning | tf_user);
2627 if (!IS_AGGR_TYPE (context))
2629 if (complain & tf_error)
2630 error ("no type named `%#T' in `%#T'", name, context);
2631 return error_mark_node;
2634 t = lookup_field (context, name, 0, true);
2637 if (TREE_CODE (t) != TYPE_DECL)
2639 if (complain & tf_error)
2640 error ("no type named `%#T' in `%#T'", name, context);
2641 return error_mark_node;
2644 if (complain & tf_error)
2645 perform_or_defer_access_check (TYPE_BINFO (context), t);
2647 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
2655 /* If the CONTEXT is not a template type, then either the field is
2656 there now or its never going to be. */
2657 if (!dependent_type_p (context))
2659 if (complain & tf_error)
2660 error ("no type named `%#T' in `%#T'", name, context);
2661 return error_mark_node;
2664 return build_typename_type (context, name, fullname);
2667 /* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
2668 unless an error occurs, in which case error_mark_node is returned.
2669 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
2670 corresponds to. If COMPLAIN zero, don't complain about any errors
2674 make_unbound_class_template (tree context, tree name, tsubst_flags_t complain)
2680 name = TYPE_IDENTIFIER (name);
2681 else if (DECL_P (name))
2682 name = DECL_NAME (name);
2683 if (TREE_CODE (name) != IDENTIFIER_NODE)
2686 if (!dependent_type_p (context)
2687 || currently_open_class (context))
2689 tree tmpl = NULL_TREE;
2691 if (IS_AGGR_TYPE (context))
2692 tmpl = lookup_field (context, name, 0, false);
2694 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
2696 if (complain & tf_error)
2697 error ("no class template named `%#T' in `%#T'", name, context);
2698 return error_mark_node;
2701 if (complain & tf_error)
2702 perform_or_defer_access_check (TYPE_BINFO (context), tmpl);
2707 /* Build the UNBOUND_CLASS_TEMPLATE. */
2708 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
2709 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
2710 TREE_TYPE (t) = NULL_TREE;
2712 /* Build the corresponding TEMPLATE_DECL. */
2713 d = build_decl (TEMPLATE_DECL, name, t);
2714 TYPE_NAME (TREE_TYPE (d)) = d;
2715 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
2716 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2717 DECL_ARTIFICIAL (d) = 1;
2724 /* Push the declarations of builtin types into the namespace.
2725 RID_INDEX is the index of the builtin type in the array
2726 RID_POINTERS. NAME is the name used when looking up the builtin
2727 type. TYPE is the _TYPE node for the builtin type. */
2730 record_builtin_type (enum rid rid_index,
2734 tree rname = NULL_TREE, tname = NULL_TREE;
2735 tree tdecl = NULL_TREE;
2737 if ((int) rid_index < (int) RID_MAX)
2738 rname = ridpointers[(int) rid_index];
2740 tname = get_identifier (name);
2742 /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
2743 eliminated. Built-in types should not be looked up name; their
2744 names are keywords that the parser can recognize. However, there
2745 is code in c-common.c that uses identifier_global_value to look
2746 up built-in types by name. */
2749 tdecl = build_decl (TYPE_DECL, tname, type);
2750 DECL_ARTIFICIAL (tdecl) = 1;
2751 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
2757 tdecl = build_decl (TYPE_DECL, rname, type);
2758 DECL_ARTIFICIAL (tdecl) = 1;
2760 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
2763 if (!TYPE_NAME (type))
2764 TYPE_NAME (type) = tdecl;
2767 debug_hooks->type_decl (tdecl, 0);
2770 /* Record one of the standard Java types.
2771 * Declare it as having the given NAME.
2772 * If SIZE > 0, it is the size of one of the integral types;
2773 * otherwise it is the negative of the size of one of the other types. */
2776 record_builtin_java_type (const char* name, int size)
2780 type = make_signed_type (size);
2781 else if (size > -32)
2782 { /* "__java_char" or ""__java_boolean". */
2783 type = make_unsigned_type (-size);
2784 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
2787 { /* "__java_float" or ""__java_double". */
2788 type = make_node (REAL_TYPE);
2789 TYPE_PRECISION (type) = - size;
2792 record_builtin_type (RID_MAX, name, type);
2793 decl = TYPE_NAME (type);
2795 /* Suppress generate debug symbol entries for these types,
2796 since for normal C++ they are just clutter.
2797 However, push_lang_context undoes this if extern "Java" is seen. */
2798 DECL_IGNORED_P (decl) = 1;
2800 TYPE_FOR_JAVA (type) = 1;
2804 /* Push a type into the namespace so that the back-ends ignore it. */
2807 record_unknown_type (tree type, const char* name)
2809 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
2810 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
2811 DECL_IGNORED_P (decl) = 1;
2812 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
2813 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
2814 TYPE_ALIGN (type) = 1;
2815 TYPE_USER_ALIGN (type) = 0;
2816 TYPE_MODE (type) = TYPE_MODE (void_type_node);
2819 /* An string for which we should create an IDENTIFIER_NODE at
2822 typedef struct predefined_identifier
2824 /* The name of the identifier. */
2825 const char *const name;
2826 /* The place where the IDENTIFIER_NODE should be stored. */
2828 /* Nonzero if this is the name of a constructor or destructor. */
2829 const int ctor_or_dtor_p;
2830 } predefined_identifier;
2832 /* Create all the predefined identifiers. */
2835 initialize_predefined_identifiers (void)
2837 const predefined_identifier *pid;
2839 /* A table of identifiers to create at startup. */
2840 static const predefined_identifier predefined_identifiers[] = {
2841 { "C++", &lang_name_cplusplus, 0 },
2842 { "C", &lang_name_c, 0 },
2843 { "Java", &lang_name_java, 0 },
2844 { CTOR_NAME, &ctor_identifier, 1 },
2845 { "__base_ctor", &base_ctor_identifier, 1 },
2846 { "__comp_ctor", &complete_ctor_identifier, 1 },
2847 { DTOR_NAME, &dtor_identifier, 1 },
2848 { "__comp_dtor", &complete_dtor_identifier, 1 },
2849 { "__base_dtor", &base_dtor_identifier, 1 },
2850 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
2851 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
2852 { "nelts", &nelts_identifier, 0 },
2853 { THIS_NAME, &this_identifier, 0 },
2854 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
2855 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
2856 { "_vptr", &vptr_identifier, 0 },
2857 { "__vtt_parm", &vtt_parm_identifier, 0 },
2858 { "::", &global_scope_name, 0 },
2859 { "std", &std_identifier, 0 },
2863 for (pid = predefined_identifiers; pid->name; ++pid)
2865 *pid->node = get_identifier (pid->name);
2866 if (pid->ctor_or_dtor_p)
2867 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
2871 /* Create the predefined scalar types of C,
2872 and some nodes representing standard constants (0, 1, (void *)0).
2873 Initialize the global binding level.
2874 Make definitions for built-in primitive functions. */
2877 cxx_init_decl_processing (void)
2880 tree void_ftype_ptr;
2882 build_common_tree_nodes (flag_signed_char);
2884 /* Create all the identifiers we need. */
2885 initialize_predefined_identifiers ();
2887 /* Create the global variables. */
2888 push_to_top_level ();
2890 current_function_decl = NULL_TREE;
2891 current_binding_level = NULL;
2892 /* Enter the global namespace. */
2893 my_friendly_assert (global_namespace == NULL_TREE, 375);
2894 global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
2896 begin_scope (sk_namespace, global_namespace);
2898 current_lang_name = NULL_TREE;
2900 /* Adjust various flags based on command-line settings. */
2901 if (!flag_permissive)
2902 flag_pedantic_errors = 1;
2903 if (!flag_no_inline)
2905 flag_inline_trees = 1;
2908 if (flag_inline_functions)
2910 flag_inline_trees = 2;
2911 flag_inline_functions = 0;
2914 /* Force minimum function alignment if using the least significant
2915 bit of function pointers to store the virtual bit. */
2916 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
2917 && force_align_functions_log < 1)
2918 force_align_functions_log = 1;
2921 current_lang_name = lang_name_c;
2923 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
2924 TREE_TYPE (error_mark_list) = error_mark_node;
2926 /* Create the `std' namespace. */
2927 push_namespace (std_identifier);
2928 std_node = current_namespace;
2931 c_common_nodes_and_builtins ();
2933 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
2934 java_short_type_node = record_builtin_java_type ("__java_short", 16);
2935 java_int_type_node = record_builtin_java_type ("__java_int", 32);
2936 java_long_type_node = record_builtin_java_type ("__java_long", 64);
2937 java_float_type_node = record_builtin_java_type ("__java_float", -32);
2938 java_double_type_node = record_builtin_java_type ("__java_double", -64);
2939 java_char_type_node = record_builtin_java_type ("__java_char", -16);
2940 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
2942 integer_two_node = build_int_2 (2, 0);
2943 TREE_TYPE (integer_two_node) = integer_type_node;
2944 integer_three_node = build_int_2 (3, 0);
2945 TREE_TYPE (integer_three_node) = integer_type_node;
2947 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
2948 truthvalue_type_node = boolean_type_node;
2949 truthvalue_false_node = boolean_false_node;
2950 truthvalue_true_node = boolean_true_node;
2952 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
2955 record_builtin_type (RID_MAX, NULL, string_type_node);
2958 delta_type_node = ptrdiff_type_node;
2959 vtable_index_type = ptrdiff_type_node;
2961 vtt_parm_type = build_pointer_type (const_ptr_type_node);
2962 void_ftype = build_function_type (void_type_node, void_list_node);
2963 void_ftype_ptr = build_function_type (void_type_node,
2964 tree_cons (NULL_TREE,
2968 = build_exception_variant (void_ftype_ptr, empty_except_spec);
2970 /* C++ extensions */
2972 unknown_type_node = make_node (UNKNOWN_TYPE);
2973 record_unknown_type (unknown_type_node, "unknown type");
2975 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
2976 TREE_TYPE (unknown_type_node) = unknown_type_node;
2978 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
2980 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
2981 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
2984 /* Make sure we get a unique function type, so we can give
2985 its pointer type a name. (This wins for gdb.) */
2986 tree vfunc_type = make_node (FUNCTION_TYPE);
2987 TREE_TYPE (vfunc_type) = integer_type_node;
2988 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
2989 layout_type (vfunc_type);
2991 vtable_entry_type = build_pointer_type (vfunc_type);
2993 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
2996 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
2997 layout_type (vtbl_type_node);
2998 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
2999 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3000 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3001 layout_type (vtbl_ptr_type_node);
3002 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3004 push_namespace (get_identifier ("__cxxabiv1"));
3005 abi_node = current_namespace;
3008 global_type_node = make_node (LANG_TYPE);
3009 record_unknown_type (global_type_node, "global type");
3012 current_lang_name = lang_name_cplusplus;
3016 tree bad_alloc_type_node;
3017 tree bad_alloc_decl;
3018 tree newtype, deltype;
3019 tree ptr_ftype_sizetype;
3021 push_namespace (std_identifier);
3022 bad_alloc_id = get_identifier ("bad_alloc");
3023 bad_alloc_type_node = make_aggr_type (RECORD_TYPE);
3024 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3026 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3027 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3028 TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3032 = build_function_type (ptr_type_node,
3033 tree_cons (NULL_TREE,
3036 newtype = build_exception_variant
3037 (ptr_ftype_sizetype, add_exception_specifier
3038 (NULL_TREE, bad_alloc_type_node, -1));
3039 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3040 push_cp_library_fn (NEW_EXPR, newtype);
3041 push_cp_library_fn (VEC_NEW_EXPR, newtype);
3042 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3043 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3047 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3049 /* Perform other language dependent initializations. */
3050 init_class_processing ();
3051 init_rtti_processing ();
3053 if (flag_exceptions)
3054 init_exception_processing ();
3056 if (! supports_one_only ())
3059 make_fname_decl = cp_make_fname_decl;
3060 start_fname_decls ();
3062 /* Show we use EH for cleanups. */
3063 if (flag_exceptions)
3064 using_eh_for_cleanups ();
3067 /* Generate an initializer for a function naming variable from
3068 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
3069 filled in with the type of the init. */
3072 cp_fname_init (const char* name, tree *type_p)
3074 tree domain = NULL_TREE;
3076 tree init = NULL_TREE;
3081 length = strlen (name);
3082 domain = build_index_type (size_int (length));
3083 init = build_string (length + 1, name);
3086 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3087 type = build_cplus_array_type (type, domain);
3092 TREE_TYPE (init) = type;
3094 init = error_mark_node;
3099 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3100 decl, NAME is the initialization string and TYPE_DEP indicates whether
3101 NAME depended on the type of the function. We make use of that to detect
3102 __PRETTY_FUNCTION__ inside a template fn. This is being done
3103 lazily at the point of first use, so we mustn't push the decl now. */
3106 cp_make_fname_decl (tree id, int type_dep)
3108 const char *const name = (type_dep && processing_template_decl
3109 ? NULL : fname_as_string (type_dep));
3111 tree init = cp_fname_init (name, &type);
3112 tree decl = build_decl (VAR_DECL, id, type);
3115 free ((char *) name);
3117 /* As we're using pushdecl_with_scope, we must set the context. */
3118 DECL_CONTEXT (decl) = current_function_decl;
3119 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3121 TREE_STATIC (decl) = 1;
3122 TREE_READONLY (decl) = 1;
3123 DECL_ARTIFICIAL (decl) = 1;
3124 DECL_INITIAL (decl) = init;
3126 TREE_USED (decl) = 1;
3128 if (current_function_decl)
3130 struct cp_binding_level *b = current_binding_level;
3131 while (b->level_chain->kind != sk_function_parms)
3133 pushdecl_with_scope (decl, b);
3134 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
3137 pushdecl_top_level_and_finish (decl, init);
3142 /* Make a definition for a builtin function named NAME in the current
3143 namespace, whose data type is TYPE and whose context is CONTEXT.
3144 TYPE should be a function type with argument types.
3146 CLASS and CODE tell later passes how to compile calls to this function.
3147 See tree.h for possible values.
3149 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3150 the name to be called if we can't opencode the function.
3151 If ATTRS is nonzero, use that for the function's attribute
3155 builtin_function_1 (const char* name,
3159 enum built_in_class class,
3160 const char* libname,
3163 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
3164 DECL_BUILT_IN_CLASS (decl) = class;
3165 DECL_FUNCTION_CODE (decl) = code;
3166 DECL_CONTEXT (decl) = context;
3170 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
3171 we cannot change DECL_ASSEMBLER_NAME until we have installed this
3172 function in the namespace. */
3174 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
3176 /* Warn if a function in the namespace for users
3177 is used without an occasion to consider it declared. */
3178 if (name[0] != '_' || name[1] != '_')
3179 DECL_ANTICIPATED (decl) = 1;
3181 /* Possibly apply some default attributes to this built-in function. */
3183 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
3185 decl_attributes (&decl, NULL_TREE, 0);
3190 /* Entry point for the benefit of c_common_nodes_and_builtins.
3192 Make a definition for a builtin function named NAME and whose data type
3193 is TYPE. TYPE should be a function type with argument types. This
3194 function places the anticipated declaration in the global namespace
3195 and additionally in the std namespace if appropriate.
3197 CLASS and CODE tell later passes how to compile calls to this function.
3198 See tree.h for possible values.
3200 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3201 the name to be called if we can't opencode the function.
3203 If ATTRS is nonzero, use that for the function's attribute
3207 builtin_function (const char* name,
3210 enum built_in_class class,
3211 const char* libname,
3214 /* All builtins that don't begin with an '_' should additionally
3215 go in the 'std' namespace. */
3218 push_namespace (std_identifier);
3219 builtin_function_1 (name, type, std_node, code, class, libname, attrs);
3223 return builtin_function_1 (name, type, NULL_TREE, code,
3224 class, libname, attrs);
3227 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3228 function. Not called directly. */
3231 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3233 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3234 DECL_EXTERNAL (fn) = 1;
3235 TREE_PUBLIC (fn) = 1;
3236 DECL_ARTIFICIAL (fn) = 1;
3237 TREE_NOTHROW (fn) = 1;
3238 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3239 SET_DECL_LANGUAGE (fn, lang_c);
3243 /* Returns the _DECL for a library function with C linkage.
3244 We assume that such functions never throw; if this is incorrect,
3245 callers should unset TREE_NOTHROW. */
3248 build_library_fn (tree name, tree type)
3250 return build_library_fn_1 (name, ERROR_MARK, type);
3253 /* Returns the _DECL for a library function with C++ linkage. */
3256 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3258 tree fn = build_library_fn_1 (name, operator_code, type);
3259 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3260 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3261 SET_DECL_LANGUAGE (fn, lang_cplusplus);
3265 /* Like build_library_fn, but takes a C string instead of an
3269 build_library_fn_ptr (const char* name, tree type)
3271 return build_library_fn (get_identifier (name), type);
3274 /* Like build_cp_library_fn, but takes a C string instead of an
3278 build_cp_library_fn_ptr (const char* name, tree type)
3280 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3283 /* Like build_library_fn, but also pushes the function so that we will
3284 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
3287 push_library_fn (tree name, tree type)
3289 tree fn = build_library_fn (name, type);
3290 pushdecl_top_level (fn);
3294 /* Like build_cp_library_fn, but also pushes the function so that it
3295 will be found by normal lookup. */
3298 push_cp_library_fn (enum tree_code operator_code, tree type)
3300 tree fn = build_cp_library_fn (ansi_opname (operator_code),
3307 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3311 push_void_library_fn (tree name, tree parmtypes)
3313 tree type = build_function_type (void_type_node, parmtypes);
3314 return push_library_fn (name, type);
3317 /* Like push_library_fn, but also note that this function throws
3318 and does not return. Used for __throw_foo and the like. */
3321 push_throw_library_fn (tree name, tree type)
3323 tree fn = push_library_fn (name, type);
3324 TREE_THIS_VOLATILE (fn) = 1;
3325 TREE_NOTHROW (fn) = 0;
3329 /* When we call finish_struct for an anonymous union, we create
3330 default copy constructors and such. But, an anonymous union
3331 shouldn't have such things; this function undoes the damage to the
3332 anonymous union type T.
3334 (The reason that we create the synthesized methods is that we don't
3335 distinguish `union { int i; }' from `typedef union { int i; } U'.
3336 The first is an anonymous union; the second is just an ordinary
3340 fixup_anonymous_aggr (tree t)
3344 /* Wipe out memory of synthesized methods. */
3345 TYPE_HAS_CONSTRUCTOR (t) = 0;
3346 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3347 TYPE_HAS_INIT_REF (t) = 0;
3348 TYPE_HAS_CONST_INIT_REF (t) = 0;
3349 TYPE_HAS_ASSIGN_REF (t) = 0;
3350 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3352 /* Splice the implicitly generated functions out of the TYPE_METHODS
3354 q = &TYPE_METHODS (t);
3357 if (DECL_ARTIFICIAL (*q))
3358 *q = TREE_CHAIN (*q);
3360 q = &TREE_CHAIN (*q);
3363 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
3364 if (TYPE_METHODS (t))
3365 error ("%Jan anonymous union cannot have function members",
3366 TYPE_MAIN_DECL (t));
3368 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3369 assignment operators (because they cannot have these methods themselves).
3370 For anonymous unions this is already checked because they are not allowed
3371 in any union, otherwise we have to check it. */
3372 if (TREE_CODE (t) != UNION_TYPE)
3376 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3377 if (TREE_CODE (field) == FIELD_DECL)
3379 type = TREE_TYPE (field);
3380 if (CLASS_TYPE_P (type))
3382 if (TYPE_NEEDS_CONSTRUCTING (type))
3383 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
3385 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3386 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
3388 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3389 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
3396 /* Make sure that a declaration with no declarator is well-formed, i.e.
3397 just declares a tagged type or anonymous union.
3399 Returns the type declared; or NULL_TREE if none. */
3402 check_tag_decl (cp_decl_specifier_seq *declspecs)
3404 int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3405 int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3406 /* If a class, struct, or enum type is declared by the DECLSPECS
3407 (i.e, if a class-specifier, enum-specifier, or non-typename
3408 elaborated-type-specifier appears in the DECLSPECS),
3409 DECLARED_TYPE is set to the corresponding type. */
3410 tree declared_type = NULL_TREE;
3411 bool error_p = false;
3413 if (declspecs->multiple_types_p)
3414 error ("multiple types in one declaration");
3415 else if (declspecs->redefined_builtin_type)
3417 if (!in_system_header)
3418 pedwarn ("redeclaration of C++ built-in type %qT",
3419 declspecs->redefined_builtin_type);
3423 if (TYPE_P (declspecs->type)
3424 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3425 && IS_AGGR_TYPE (declspecs->type))
3426 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3427 declared_type = declspecs->type;
3428 else if (declspecs->type == error_mark_node)
3430 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3431 pedwarn ("declaration does not declare anything");
3432 /* Check for an anonymous union. */
3433 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
3434 && TYPE_ANONYMOUS_P (declared_type))
3436 /* 7/3 In a simple-declaration, the optional init-declarator-list
3437 can be omitted only when declaring a class (clause 9) or
3438 enumeration (7.2), that is, when the decl-specifier-seq contains
3439 either a class-specifier, an elaborated-type-specifier with
3440 a class-key (9.1), or an enum-specifier. In these cases and
3441 whenever a class-specifier or enum-specifier is present in the
3442 decl-specifier-seq, the identifiers in these specifiers are among
3443 the names being declared by the declaration (as class-name,
3444 enum-names, or enumerators, depending on the syntax). In such
3445 cases, and except for the declaration of an unnamed bit-field (9.6),
3446 the decl-specifier-seq shall introduce one or more names into the
3447 program, or shall redeclare a name introduced by a previous
3448 declaration. [Example:
3449 enum { }; // ill-formed
3450 typedef class { }; // ill-formed
3454 error ("missing type-name in typedef-declaration");
3457 /* Anonymous unions are objects, so they can have specifiers. */;
3458 SET_ANON_AGGR_TYPE_P (declared_type);
3460 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
3461 && !in_system_header)
3462 pedwarn ("ISO C++ prohibits anonymous structs");
3467 if (declspecs->specs[(int)ds_inline]
3468 || declspecs->specs[(int)ds_virtual])
3469 error ("`%s' can only be specified for functions",
3470 declspecs->specs[(int)ds_inline]
3471 ? "inline" : "virtual");
3473 && (!current_class_type
3474 || current_scope () != current_class_type))
3475 error ("`friend' can only be specified inside a class");
3476 else if (declspecs->specs[(int)ds_explicit])
3477 error ("`explicit' can only be specified for constructors");
3478 else if (declspecs->storage_class)
3479 error ("a storage class can only be specified for objects "
3481 else if (declspecs->specs[(int)ds_const]
3482 || declspecs->specs[(int)ds_volatile]
3483 || declspecs->specs[(int)ds_restrict]
3484 || declspecs->specs[(int)ds_thread])
3485 error ("qualifiers can only be specified for objects "
3489 return declared_type;
3492 /* Called when a declaration is seen that contains no names to declare.
3493 If its type is a reference to a structure, union or enum inherited
3494 from a containing scope, shadow that tag name for the current scope
3495 with a forward reference.
3496 If its type defines a new named structure or union
3497 or defines an enum, it is valid but we need not do anything here.
3498 Otherwise, it is an error.
3500 C++: may have to grok the declspecs to learn about static,
3501 complain for anonymous unions.
3503 Returns the TYPE declared -- or NULL_TREE if none. */
3506 shadow_tag (cp_decl_specifier_seq *declspecs)
3508 tree t = check_tag_decl (declspecs);
3513 maybe_process_partial_specialization (t);
3515 /* This is where the variables in an anonymous union are
3516 declared. An anonymous union declaration looks like:
3518 because there is no declarator after the union, the parser
3519 sends that declaration here. */
3520 if (ANON_AGGR_TYPE_P (t))
3522 fixup_anonymous_aggr (t);
3524 if (TYPE_FIELDS (t))
3526 tree decl = grokdeclarator (/*declarator=*/NULL,
3527 declspecs, NORMAL, 0, NULL);
3528 finish_anon_union (decl);
3535 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3538 groktypename (cp_decl_specifier_seq *type_specifiers,
3539 const cp_declarator *declarator)
3543 attrs = type_specifiers->attributes;
3544 type_specifiers->attributes = NULL_TREE;
3545 type = grokdeclarator (declarator, type_specifiers, TYPENAME, 0, &attrs);
3547 cplus_decl_attributes (&type, attrs, 0);
3551 /* Decode a declarator in an ordinary declaration or data definition.
3552 This is called as soon as the type information and variable name
3553 have been parsed, before parsing the initializer if any.
3554 Here we create the ..._DECL node, fill in its type,
3555 and put it on the list of decls for the current context.
3556 The ..._DECL node is returned as the value.
3558 Exception: for arrays where the length is not specified,
3559 the type is left null, to be filled in by `cp_finish_decl'.
3561 Function definitions do not come here; they go to start_function
3562 instead. However, external and forward declarations of functions
3563 do go through here. Structure field declarations are done by
3564 grokfield and not through here. */
3567 start_decl (const cp_declarator *declarator,
3568 cp_decl_specifier_seq *declspecs,
3571 tree prefix_attributes)
3577 /* This should only be done once on the top most decl. */
3578 if (have_extern_spec)
3580 declspecs->storage_class = sc_extern;
3581 have_extern_spec = false;
3584 /* An object declared as __attribute__((deprecated)) suppresses
3585 warnings of uses of other deprecated items. */
3586 if (lookup_attribute ("deprecated", attributes))
3587 deprecated_state = DEPRECATED_SUPPRESS;
3589 attributes = chainon (attributes, prefix_attributes);
3591 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
3594 deprecated_state = DEPRECATED_NORMAL;
3596 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
3599 type = TREE_TYPE (decl);
3601 if (type == error_mark_node)
3604 context = DECL_CONTEXT (decl);
3606 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
3607 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
3609 /* When parsing the initializer, lookup should use the object's
3611 push_decl_namespace (context);
3614 /* We are only interested in class contexts, later. */
3615 if (context && TREE_CODE (context) == NAMESPACE_DECL)
3616 context = NULL_TREE;
3619 /* Is it valid for this decl to have an initializer at all?
3620 If not, set INITIALIZED to zero, which will indirectly
3621 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3622 switch (TREE_CODE (decl))
3625 error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
3630 error ("function `%#D' is initialized like a variable", decl);
3640 if (! toplevel_bindings_p ()
3641 && DECL_EXTERNAL (decl))
3642 warning ("declaration of `%#D' has `extern' and is initialized",
3644 DECL_EXTERNAL (decl) = 0;
3645 if (toplevel_bindings_p ())
3646 TREE_STATIC (decl) = 1;
3648 /* Tell `pushdecl' this is an initialized decl
3649 even though we don't yet have the initializer expression.
3650 Also tell `cp_finish_decl' it may store the real initializer. */
3651 DECL_INITIAL (decl) = error_mark_node;
3654 /* Set attributes here so if duplicate decl, will have proper attributes. */
3655 cplus_decl_attributes (&decl, attributes, 0);
3657 /* If #pragma weak was used, mark the decl weak now. */
3658 if (global_scope_p (current_binding_level))
3659 maybe_apply_pragma_weak (decl);
3661 if (TREE_CODE (decl) == FUNCTION_DECL
3662 && DECL_DECLARED_INLINE_P (decl)
3663 && DECL_UNINLINABLE (decl)
3664 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3665 warning ("%Jinline function '%D' given attribute noinline", decl, decl);
3667 if (context && COMPLETE_TYPE_P (complete_type (context)))
3669 push_nested_class (context);
3671 if (TREE_CODE (decl) == VAR_DECL)
3673 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
3674 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
3675 error ("`%#D' is not a static member of `%#T'", decl, context);
3678 if (DECL_CONTEXT (field) != context)
3680 if (!same_type_p (DECL_CONTEXT (field), context))
3681 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
3682 DECL_CONTEXT (field), DECL_NAME (decl),
3683 context, DECL_NAME (decl));
3684 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
3686 /* Static data member are tricky; an in-class initialization
3687 still doesn't provide a definition, so the in-class
3688 declaration will have DECL_EXTERNAL set, but will have an
3689 initialization. Thus, duplicate_decls won't warn
3690 about this situation, and so we check here. */
3691 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
3692 error ("duplicate initialization of %D", decl);
3693 if (duplicate_decls (decl, field))
3699 tree field = check_classfn (context, decl,
3700 (processing_template_decl
3701 > template_class_depth (context))
3702 ? current_template_parms
3704 if (field && duplicate_decls (decl, field))
3708 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
3709 DECL_IN_AGGR_P (decl) = 0;
3710 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3711 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
3713 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
3714 /* [temp.expl.spec] An explicit specialization of a static data
3715 member of a template is a definition if the declaration
3716 includes an initializer; otherwise, it is a declaration.
3718 We check for processing_specialization so this only applies
3719 to the new specialization syntax. */
3720 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
3721 DECL_EXTERNAL (decl) = 1;
3724 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
3725 pedwarn ("declaration of `%#D' outside of class is not definition",
3729 /* Enter this declaration into the symbol table. */
3730 tem = maybe_push_decl (decl);
3732 if (processing_template_decl)
3733 tem = push_template_decl (tem);
3734 if (tem == error_mark_node)
3735 return error_mark_node;
3737 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
3738 /* Tell the back-end to use or not use .common as appropriate. If we say
3739 -fconserve-space, we want this to save .data space, at the expense of
3740 wrong semantics. If we say -fno-conserve-space, we want this to
3741 produce errors about redefs; to do this we force variables into the
3743 DECL_COMMON (tem) = ((TREE_CODE (tem) != VAR_DECL
3744 || !DECL_THREAD_LOCAL (tem))
3745 && (flag_conserve_space || ! TREE_PUBLIC (tem)));
3748 if (! processing_template_decl)
3755 start_decl_1 (tree decl)
3757 tree type = TREE_TYPE (decl);
3758 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
3760 if (type == error_mark_node)
3764 /* Is it valid for this decl to have an initializer at all?
3765 If not, set INITIALIZED to zero, which will indirectly
3766 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
3768 /* Don't allow initializations for incomplete types except for
3769 arrays which might be completed by the initialization. */
3770 if (COMPLETE_TYPE_P (complete_type (type)))
3771 ; /* A complete type is ok. */
3772 else if (TREE_CODE (type) != ARRAY_TYPE)
3774 error ("variable `%#D' has initializer but incomplete type",
3777 type = TREE_TYPE (decl) = error_mark_node;
3779 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
3781 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
3782 error ("elements of array `%#D' have incomplete type", decl);
3783 /* else we already gave an error in start_decl. */
3789 && TREE_CODE (decl) != TYPE_DECL
3790 && TREE_CODE (decl) != TEMPLATE_DECL
3791 && type != error_mark_node
3792 && IS_AGGR_TYPE (type)
3793 && ! DECL_EXTERNAL (decl))
3795 if ((! processing_template_decl || ! uses_template_parms (type))
3796 && !COMPLETE_TYPE_P (complete_type (type)))
3798 error ("aggregate `%#D' has incomplete type and cannot be defined",
3800 /* Change the type so that assemble_variable will give
3801 DECL an rtl we can live with: (mem (const_int 0)). */
3802 type = TREE_TYPE (decl) = error_mark_node;
3806 /* If any base type in the hierarchy of TYPE needs a constructor,
3807 then we set initialized to 1. This way any nodes which are
3808 created for the purposes of initializing this aggregate
3809 will live as long as it does. This is necessary for global
3810 aggregates which do not have their initializers processed until
3811 the end of the file. */
3812 initialized = TYPE_NEEDS_CONSTRUCTING (type);
3817 DECL_INITIAL (decl) = NULL_TREE;
3819 /* Create a new scope to hold this declaration if necessary.
3820 Whether or not a new scope is necessary cannot be determined
3821 until after the type has been completed; if the type is a
3822 specialization of a class template it is not until after
3823 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
3824 will be set correctly. */
3825 maybe_push_cleanup_level (type);
3828 /* Handle initialization of references. DECL, TYPE, and INIT have the
3829 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
3830 but will be set to a new CLEANUP_STMT if a temporary is created
3831 that must be destroyed subsequently.
3833 Returns an initializer expression to use to initialize DECL, or
3834 NULL if the initialization can be performed statically.
3836 Quotes on semantics can be found in ARM 8.4.3. */
3839 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
3843 if (init == NULL_TREE)
3845 if ((DECL_LANG_SPECIFIC (decl) == 0
3846 || DECL_IN_AGGR_P (decl) == 0)
3847 && ! DECL_THIS_EXTERN (decl))
3848 error ("`%D' declared as reference but not initialized", decl);
3852 if (TREE_CODE (init) == CONSTRUCTOR)
3854 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
3858 if (TREE_CODE (init) == TREE_LIST)
3859 init = build_x_compound_expr_from_list (init, "initializer");
3861 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
3862 init = convert_from_reference (init);
3864 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
3865 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
3866 /* Note: default conversion is only called in very special cases. */
3867 init = decay_conversion (init);
3869 /* Convert INIT to the reference type TYPE. This may involve the
3870 creation of a temporary, whose lifetime must be the same as that
3871 of the reference. If so, a DECL_EXPR for the temporary will be
3872 added just after the DECL_EXPR for DECL. That's why we don't set
3873 DECL_INITIAL for local references (instead assigning to them
3874 explicitly); we need to allow the temporary to be initialized
3876 tmp = initialize_reference (type, init, decl, cleanup);
3878 if (tmp == error_mark_node)
3880 else if (tmp == NULL_TREE)
3882 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
3886 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
3889 DECL_INITIAL (decl) = tmp;
3894 /* When parsing `int a[] = {1, 2};' we don't know the size of the
3895 array until we finish parsing the initializer. If that's the
3896 situation we're in, update DECL accordingly. */
3899 maybe_deduce_size_from_array_init (tree decl, tree init)
3901 tree type = TREE_TYPE (decl);
3903 if (TREE_CODE (type) == ARRAY_TYPE
3904 && TYPE_DOMAIN (type) == NULL_TREE
3905 && TREE_CODE (decl) != TYPE_DECL)
3907 /* do_default is really a C-ism to deal with tentative definitions.
3908 But let's leave it here to ease the eventual merge. */
3909 int do_default = !DECL_EXTERNAL (decl);
3910 tree initializer = init ? init : DECL_INITIAL (decl);
3911 int failure = complete_array_type (type, initializer, do_default);
3914 error ("initializer fails to determine size of `%D'", decl);
3919 error ("array size missing in `%D'", decl);
3920 /* If a `static' var's size isn't known, make it extern as
3921 well as static, so it does not get allocated. If it's not
3922 `static', then don't mark it extern; finish_incomplete_decl
3923 will give it a default size and it will get allocated. */
3924 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3925 DECL_EXTERNAL (decl) = 1;
3928 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
3929 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
3931 error ("zero-size array `%D'", decl);
3933 layout_decl (decl, 0);
3937 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
3938 any appropriate error messages regarding the layout. */
3941 layout_var_decl (tree decl)
3943 tree type = TREE_TYPE (decl);
3945 tree ttype = target_type (type);
3948 /* If we haven't already layed out this declaration, do so now.
3949 Note that we must not call complete type for an external object
3950 because it's type might involve templates that we are not
3951 supposed to instantiate yet. (And it's perfectly valid to say
3952 `extern X x' for some incomplete type `X'.) */
3953 if (!DECL_EXTERNAL (decl))
3954 complete_type (type);
3955 if (!DECL_SIZE (decl)
3956 && TREE_TYPE (decl) != error_mark_node
3957 && (COMPLETE_TYPE_P (type)
3958 || (TREE_CODE (type) == ARRAY_TYPE
3959 && !TYPE_DOMAIN (type)
3960 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
3961 layout_decl (decl, 0);
3963 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
3965 /* An automatic variable with an incomplete type: that is an error.
3966 Don't talk about array types here, since we took care of that
3967 message in grokdeclarator. */
3968 error ("storage size of `%D' isn't known", decl);
3969 TREE_TYPE (decl) = error_mark_node;
3972 /* Keep this code around in case we later want to control debug info
3973 based on whether a type is "used". (jason 1999-11-11) */
3975 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
3976 /* Let debugger know it should output info for this type. */
3977 note_debug_info_needed (ttype);
3979 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
3980 note_debug_info_needed (DECL_CONTEXT (decl));
3983 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3984 && DECL_SIZE (decl) != NULL_TREE
3985 && ! TREE_CONSTANT (DECL_SIZE (decl)))
3987 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3988 constant_expression_warning (DECL_SIZE (decl));
3990 error ("storage size of `%D' isn't constant", decl);
3993 if (TREE_STATIC (decl)
3994 && !DECL_ARTIFICIAL (decl)
3995 && current_function_decl
3996 && DECL_CONTEXT (decl) == current_function_decl)
3997 push_local_name (decl);
4000 /* If a local static variable is declared in an inline function, or if
4001 we have a weak definition, we must endeavor to create only one
4002 instance of the variable at link-time. */
4005 maybe_commonize_var (tree decl)
4007 /* Static data in a function with comdat linkage also has comdat
4009 if (TREE_STATIC (decl)
4010 /* Don't mess with __FUNCTION__. */
4011 && ! DECL_ARTIFICIAL (decl)
4012 && DECL_FUNCTION_SCOPE_P (decl)
4013 /* Unfortunately, import_export_decl has not always been called
4014 before the function is processed, so we cannot simply check
4016 && (DECL_COMDAT (DECL_CONTEXT (decl))
4017 || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4018 || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4019 && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4023 /* With weak symbols, we simply make the variable COMDAT;
4024 that will cause copies in multiple translations units to
4026 comdat_linkage (decl);
4030 if (DECL_INITIAL (decl) == NULL_TREE
4031 || DECL_INITIAL (decl) == error_mark_node)
4033 /* Without weak symbols, we can use COMMON to merge
4034 uninitialized variables. */
4035 TREE_PUBLIC (decl) = 1;
4036 DECL_COMMON (decl) = 1;
4040 /* While for initialized variables, we must use internal
4041 linkage -- which means that multiple copies will not
4043 TREE_PUBLIC (decl) = 0;
4044 DECL_COMMON (decl) = 0;
4045 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
4046 warning ("%J you can work around this by removing the initializer",
4051 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4052 /* Set it up again; we might have set DECL_INITIAL since the last
4054 comdat_linkage (decl);
4057 /* Issue an error message if DECL is an uninitialized const variable. */
4060 check_for_uninitialized_const_var (tree decl)
4062 tree type = TREE_TYPE (decl);
4064 /* ``Unless explicitly declared extern, a const object does not have
4065 external linkage and must be initialized. ($8.4; $12.1)'' ARM
4067 if (TREE_CODE (decl) == VAR_DECL
4068 && TREE_CODE (type) != REFERENCE_TYPE
4069 && CP_TYPE_CONST_P (type)
4070 && !TYPE_NEEDS_CONSTRUCTING (type)
4071 && !DECL_INITIAL (decl))
4072 error ("uninitialized const `%D'", decl);
4075 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
4076 returned is the next FIELD_DECL (possibly FIELD itself) that can be
4077 initialized. If there are no more such fields, the return value
4081 next_initializable_field (tree field)
4084 && (TREE_CODE (field) != FIELD_DECL
4085 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4086 || DECL_ARTIFICIAL (field)))
4087 field = TREE_CHAIN (field);
4092 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4093 brace-enclosed aggregate initializer.
4095 *INITP is one of a list of initializers describing a brace-enclosed
4096 initializer for an entity of the indicated aggregate TYPE. It may
4097 not presently match the shape of the TYPE; for example:
4099 struct S { int a; int b; };
4100 struct S a[] = { 1, 2, 3, 4 };
4102 Here *INITP will point to TREE_LIST of four elements, rather than a
4103 list of two elements, each itself a list of two elements. This
4104 routine transforms INIT from the former form into the latter. The
4105 revised initializer is returned. */
4108 reshape_init (tree type, tree *initp)
4112 tree old_init_value;
4114 bool brace_enclosed_p;
4117 old_init_value = (TREE_CODE (*initp) == TREE_LIST
4118 ? TREE_VALUE (*initp) : old_init);
4120 my_friendly_assert (old_init_value, 20030723);
4122 /* If the initializer is brace-enclosed, pull initializers from the
4123 enclosed elements. Advance past the brace-enclosed initializer
4125 if (TREE_CODE (old_init_value) == CONSTRUCTOR
4126 && BRACE_ENCLOSED_INITIALIZER_P (old_init_value))
4128 *initp = TREE_CHAIN (old_init);
4129 TREE_CHAIN (old_init) = NULL_TREE;
4130 inits = CONSTRUCTOR_ELTS (old_init_value);
4132 brace_enclosed_p = true;
4137 brace_enclosed_p = false;
4140 /* A non-aggregate type is always initialized with a single
4142 if (!CP_AGGREGATE_TYPE_P (type))
4144 *initp = TREE_CHAIN (old_init);
4145 TREE_CHAIN (old_init) = NULL_TREE;
4146 /* It is invalid to initialize a non-aggregate type with a
4147 brace-enclosed initializer. */
4148 if (brace_enclosed_p)
4150 error ("brace-enclosed initializer used to initialize `%T'",
4152 if (TREE_CODE (old_init) == TREE_LIST)
4153 TREE_VALUE (old_init) = error_mark_node;
4155 old_init = error_mark_node;
4163 All implicit type conversions (clause _conv_) are considered when
4164 initializing the aggregate member with an initializer from an
4165 initializer-list. If the initializer can initialize a member,
4166 the member is initialized. Otherwise, if the member is itself a
4167 non-empty subaggregate, brace elision is assumed and the
4168 initializer is considered for the initialization of the first
4169 member of the subaggregate. */
4170 if (!brace_enclosed_p
4171 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
4173 *initp = TREE_CHAIN (old_init);
4174 TREE_CHAIN (old_init) = NULL_TREE;
4178 if (TREE_CODE (old_init_value) == STRING_CST
4179 && TREE_CODE (type) == ARRAY_TYPE
4180 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4182 /* [dcl.init.string]
4184 A char array (whether plain char, signed char, or unsigned char)
4185 can be initialized by a string-literal (optionally enclosed in
4186 braces); a wchar_t array can be initialized by a wide
4187 string-literal (optionally enclosed in braces). */
4188 new_init = old_init;
4189 /* Move past the initializer. */
4190 *initp = TREE_CHAIN (old_init);
4191 TREE_CHAIN (old_init) = NULL_TREE;
4195 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
4196 new_init = build_constructor (NULL_TREE, NULL_TREE);
4198 if (CLASS_TYPE_P (type))
4202 field = next_initializable_field (TYPE_FIELDS (type));
4208 An initializer for an aggregate member that is an
4209 empty class shall have the form of an empty
4210 initializer-list {}. */
4211 if (!brace_enclosed_p)
4213 error ("initializer for `%T' must be brace-enclosed",
4215 return error_mark_node;
4220 /* Loop through the initializable fields, gathering
4226 /* Handle designated initializers, as an extension. */
4227 if (TREE_PURPOSE (*initp))
4230 pedwarn ("ISO C++ does not allow designated initializers");
4231 field = lookup_field_1 (type, TREE_PURPOSE (*initp),
4232 /*want_type=*/false);
4233 if (!field || TREE_CODE (field) != FIELD_DECL)
4234 error ("`%T' has no non-static data member named `%D'",
4235 type, TREE_PURPOSE (*initp));
4240 field_init = reshape_init (TREE_TYPE (field), initp);
4241 if (field_init == error_mark_node)
4242 return error_mark_node;
4243 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
4244 CONSTRUCTOR_ELTS (new_init) = field_init;
4247 When a union is initialized with a brace-enclosed
4248 initializer, the braces shall only contain an
4249 initializer for the first member of the union. */
4250 if (TREE_CODE (type) == UNION_TYPE)
4252 field = next_initializable_field (TREE_CHAIN (field));
4256 else if (TREE_CODE (type) == ARRAY_TYPE
4257 || TREE_CODE (type) == VECTOR_TYPE)
4262 /* If the bound of the array is known, take no more initializers
4263 than are allowed. */
4264 max_index = NULL_TREE;
4265 if (TREE_CODE (type) == ARRAY_TYPE)
4267 if (TYPE_DOMAIN (type))
4268 max_index = array_type_nelts (type);
4272 /* For a vector, the representation type is a struct
4273 containing a single member which is an array of the
4274 appropriate size. */
4275 tree rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4276 if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4277 max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4280 /* Loop through the array elements, gathering initializers. */
4281 for (index = size_zero_node;
4282 *initp && (!max_index || !tree_int_cst_lt (max_index, index));
4283 index = size_binop (PLUS_EXPR, index, size_one_node))
4287 element_init = reshape_init (TREE_TYPE (type), initp);
4288 if (element_init == error_mark_node)
4289 return error_mark_node;
4290 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
4291 CONSTRUCTOR_ELTS (new_init) = element_init;
4292 if (TREE_PURPOSE (element_init))
4294 tree next_index = TREE_PURPOSE (element_init);
4295 if (TREE_CODE (next_index) == IDENTIFIER_NODE)
4297 error ("name `%D' used in a GNU-style designated "
4298 "initializer for an array", next_index);
4299 TREE_PURPOSE (element_init) = NULL_TREE;
4309 /* The initializers were placed in reverse order in the
4311 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
4313 if (TREE_CODE (old_init) == TREE_LIST)
4314 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
4317 /* If this was a brace-enclosed initializer and all of the
4318 initializers were not used up, there is a problem. */
4319 if (brace_enclosed_p && *initp)
4320 error ("too many initializers for `%T'", type);
4325 /* Verify INIT (the initializer for DECL), and record the
4326 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
4327 grok_reference_init.
4329 If the return value is non-NULL, it is an expression that must be
4330 evaluated dynamically to initialize DECL. */
4333 check_initializer (tree decl, tree init, int flags, tree *cleanup)
4335 tree type = TREE_TYPE (decl);
4336 tree init_code = NULL;
4338 /* If `start_decl' didn't like having an initialization, ignore it now. */
4339 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
4342 /* If an initializer is present, DECL_INITIAL has been
4343 error_mark_node, to indicate that an as-of-yet unevaluated
4344 initialization will occur. From now on, DECL_INITIAL reflects
4345 the static initialization -- if any -- of DECL. */
4346 DECL_INITIAL (decl) = NULL_TREE;
4348 /* Things that are going to be initialized need to have complete
4350 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
4352 if (type == error_mark_node)
4353 /* We will have already complained. */
4355 else if (init && COMPLETE_TYPE_P (type)
4356 && !TREE_CONSTANT (TYPE_SIZE (type)))
4358 error ("variable-sized object `%D' may not be initialized", decl);
4361 else if (TREE_CODE (type) == ARRAY_TYPE
4362 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4364 error ("elements of array `%#D' have incomplete type", decl);
4367 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4369 error ("`%D' has incomplete type", decl);
4370 TREE_TYPE (decl) = error_mark_node;
4374 if (TREE_CODE (decl) == CONST_DECL)
4376 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
4378 DECL_INITIAL (decl) = init;
4380 my_friendly_assert (init != NULL_TREE, 149);
4383 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
4384 init = grok_reference_init (decl, type, init, cleanup);
4387 if (TREE_CODE (init) == CONSTRUCTOR
4388 && BRACE_ENCLOSED_INITIALIZER_P (init))
4390 /* [dcl.init] paragraph 13,
4391 If T is a scalar type, then a declaration of the form
4396 reshape_init will complain about the extra braces,
4397 and doesn't do anything useful in the case where TYPE is
4398 scalar, so just don't call it. */
4399 if (CP_AGGREGATE_TYPE_P (type))
4400 init = reshape_init (type, &init);
4402 if ((*targetm.vector_opaque_p) (type))
4404 error ("opaque vector types cannot be initialized");
4405 init = error_mark_node;
4409 /* If DECL has an array type without a specific bound, deduce the
4410 array size from the initializer. */
4411 maybe_deduce_size_from_array_init (decl, init);
4412 type = TREE_TYPE (decl);
4414 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
4416 if (TREE_CODE (type) == ARRAY_TYPE)
4417 goto initialize_aggr;
4418 else if (TREE_CODE (init) == CONSTRUCTOR
4419 && BRACE_ENCLOSED_INITIALIZER_P (init))
4421 if (TYPE_NON_AGGREGATE_CLASS (type))
4423 error ("`%D' must be initialized by constructor, not by `{...}'",
4425 init = error_mark_node;
4428 goto dont_use_constructor;
4432 int saved_stmts_are_full_exprs_p;
4435 saved_stmts_are_full_exprs_p = 0;
4436 if (building_stmt_tree ())
4438 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4439 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4441 init = build_aggr_init (decl, init, flags);
4442 if (building_stmt_tree ())
4443 current_stmt_tree ()->stmts_are_full_exprs_p =
4444 saved_stmts_are_full_exprs_p;
4450 dont_use_constructor:
4451 if (TREE_CODE (init) != TREE_VEC)
4453 init_code = store_init_value (decl, init);
4458 else if (DECL_EXTERNAL (decl))
4460 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
4461 goto initialize_aggr;
4462 else if (IS_AGGR_TYPE (type))
4464 tree core_type = strip_array_types (type);
4466 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
4467 error ("structure `%D' with uninitialized const members", decl);
4468 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
4469 error ("structure `%D' with uninitialized reference members",
4472 check_for_uninitialized_const_var (decl);
4475 check_for_uninitialized_const_var (decl);
4477 if (init && init != error_mark_node)
4478 init_code = build (INIT_EXPR, type, decl, init);
4483 /* If DECL is not a local variable, give it RTL. */
4486 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
4488 int toplev = toplevel_bindings_p ();
4491 /* Handle non-variables up front. */
4492 if (TREE_CODE (decl) != VAR_DECL)
4494 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
4498 /* If we see a class member here, it should be a static data
4500 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
4502 my_friendly_assert (TREE_STATIC (decl), 19990828);
4503 /* An in-class declaration of a static data member should be
4504 external; it is only a declaration, and not a definition. */
4505 if (init == NULL_TREE)
4506 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
4509 /* Set the DECL_ASSEMBLER_NAME for the variable. */
4512 change_decl_assembler_name (decl, get_identifier (asmspec));
4513 /* The `register' keyword, when used together with an
4514 asm-specification, indicates that the variable should be
4515 placed in a particular register. */
4516 if (DECL_REGISTER (decl))
4517 DECL_HARD_REGISTER (decl) = 1;
4520 /* We don't create any RTL for local variables. */
4521 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
4524 /* We defer emission of local statics until the corresponding
4525 DECL_EXPR is expanded. */
4526 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
4528 /* We try to defer namespace-scope static constants so that they are
4529 not emitted into the object file unnecessarily. */
4530 if (!DECL_VIRTUAL_P (decl)
4531 && TREE_READONLY (decl)
4532 && DECL_INITIAL (decl) != NULL_TREE
4533 && DECL_INITIAL (decl) != error_mark_node
4534 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
4536 && !TREE_PUBLIC (decl))
4538 /* Fool with the linkage of static consts according to #pragma
4540 if (!interface_unknown && !TREE_PUBLIC (decl))
4542 TREE_PUBLIC (decl) = 1;
4543 DECL_EXTERNAL (decl) = interface_only;
4548 /* Likewise for template instantiations. */
4549 else if (DECL_COMDAT (decl))
4552 /* If we're deferring the variable, we only need to make RTL if
4553 there's an ASMSPEC. Otherwise, we'll lazily create it later when
4554 we need it. (There's no way to lazily create RTL for things that
4555 have assembly specs because the information about the specifier
4556 isn't stored in the tree, yet) */
4557 if (defer_p && asmspec)
4558 make_decl_rtl (decl, asmspec);
4559 /* If we're not deferring, go ahead and assemble the variable. */
4561 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
4564 /* Generate code to initialize DECL (a local variable). */
4567 initialize_local_var (tree decl, tree init)
4569 tree type = TREE_TYPE (decl);
4572 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
4573 || TREE_CODE (decl) == RESULT_DECL,
4575 my_friendly_assert (!TREE_STATIC (decl), 20021010);
4577 if (DECL_SIZE (decl) == NULL_TREE)
4579 /* If we used it already as memory, it must stay in memory. */
4580 DECL_INITIAL (decl) = NULL_TREE;
4581 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
4584 if (DECL_SIZE (decl) && type != error_mark_node)
4588 /* Compute and store the initial value. */
4589 already_used = TREE_USED (decl) || TREE_USED (type);
4591 /* Perform the initialization. */
4594 int saved_stmts_are_full_exprs_p;
4596 my_friendly_assert (building_stmt_tree (), 20000906);
4597 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
4598 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
4599 finish_expr_stmt (init);
4600 current_stmt_tree ()->stmts_are_full_exprs_p =
4601 saved_stmts_are_full_exprs_p;
4604 /* Set this to 0 so we can tell whether an aggregate which was
4605 initialized was ever used. Don't do this if it has a
4606 destructor, so we don't complain about the 'resource
4607 allocation is initialization' idiom. Now set
4608 attribute((unused)) on types so decls of that type will be
4609 marked used. (see TREE_USED, above.) */
4610 if (TYPE_NEEDS_CONSTRUCTING (type)
4612 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
4613 && DECL_NAME (decl))
4614 TREE_USED (decl) = 0;
4615 else if (already_used)
4616 TREE_USED (decl) = 1;
4619 /* Generate a cleanup, if necessary. */
4620 cleanup = cxx_maybe_build_cleanup (decl);
4621 if (DECL_SIZE (decl) && cleanup)
4622 finish_decl_cleanup (decl, cleanup);
4625 /* Finish processing of a declaration;
4626 install its line number and initial value.
4627 If the length of an array type is not known before,
4628 it must be determined now, from the initial value, or it is an error.
4630 INIT holds the value of an initializer that should be allowed to escape
4633 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
4634 if the (init) syntax was used. */
4637 cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags)
4640 tree ttype = NULL_TREE;
4642 const char *asmspec = NULL;
4643 int was_readonly = 0;
4645 if (decl == error_mark_node)
4650 error ("assignment (not initialization) in declaration");
4654 my_friendly_assert (TREE_CODE (decl) != RESULT_DECL, 20030619);
4656 /* Assume no cleanup is required. */
4657 cleanup = NULL_TREE;
4659 /* If a name was specified, get the string. */
4660 if (global_scope_p (current_binding_level))
4661 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
4663 asmspec = TREE_STRING_POINTER (asmspec_tree);
4665 if (init && TREE_CODE (init) == NAMESPACE_DECL)
4667 error ("cannot initialize `%D' to namespace `%D'",
4672 if (current_class_type
4673 && CP_DECL_CONTEXT (decl) == current_class_type
4674 && TYPE_BEING_DEFINED (current_class_type)
4675 && (DECL_INITIAL (decl) || init))
4676 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
4678 if (TREE_CODE (decl) == VAR_DECL
4679 && DECL_CONTEXT (decl)
4680 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
4681 && DECL_CONTEXT (decl) != current_namespace
4684 /* Leave the namespace of the object. */
4685 pop_decl_namespace ();
4688 type = TREE_TYPE (decl);
4690 if (type == error_mark_node)
4693 if (TYPE_HAS_MUTABLE_P (type))
4694 TREE_READONLY (decl) = 0;
4696 if (processing_template_decl)
4698 /* Add this declaration to the statement-tree. */
4699 if (at_function_scope_p ())
4700 add_decl_expr (decl);
4702 if (init && DECL_INITIAL (decl))
4703 DECL_INITIAL (decl) = init;
4704 if (TREE_CODE (decl) == VAR_DECL
4705 && !DECL_PRETTY_FUNCTION_P (decl)
4706 && !dependent_type_p (TREE_TYPE (decl)))
4707 maybe_deduce_size_from_array_init (decl, init);
4711 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
4712 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
4714 /* Take care of TYPE_DECLs up front. */
4715 if (TREE_CODE (decl) == TYPE_DECL)
4717 if (type != error_mark_node
4718 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
4720 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
4721 warning ("shadowing previous type declaration of `%#D'", decl);
4722 set_identifier_type_value (DECL_NAME (decl), decl);
4725 /* If we have installed this as the canonical typedef for this
4726 type, and that type has not been defined yet, delay emitting
4727 the debug information for it, as we will emit it later. */
4728 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
4729 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
4730 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4732 rest_of_decl_compilation (decl, NULL,
4733 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
4737 if (TREE_CODE (decl) != FUNCTION_DECL)
4738 ttype = target_type (type);
4741 /* Currently, GNU C++ puts constants in text space, making them
4742 impossible to initialize. In the future, one would hope for
4743 an operating system which understood the difference between
4744 initialization and the running of a program. */
4745 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl))
4748 if (TYPE_NEEDS_CONSTRUCTING (type)
4749 || TREE_CODE (type) == REFERENCE_TYPE)
4750 TREE_READONLY (decl) = 0;
4753 if (TREE_CODE (decl) == VAR_DECL)
4755 /* Only PODs can have thread-local storage. Other types may require
4756 various kinds of non-trivial initialization. */
4757 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
4758 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
4759 decl, TREE_TYPE (decl));
4760 /* Convert the initializer to the type of DECL, if we have not
4761 already initialized DECL. */
4762 if (!DECL_INITIALIZED_P (decl)
4763 /* If !DECL_EXTERNAL then DECL is being defined. In the
4764 case of a static data member initialized inside the
4765 class-specifier, there can be an initializer even if DECL
4766 is *not* defined. */
4767 && (!DECL_EXTERNAL (decl) || init))
4769 init = check_initializer (decl, init, flags, &cleanup);
4770 /* Thread-local storage cannot be dynamically initialized. */
4771 if (DECL_THREAD_LOCAL (decl) && init)
4773 error ("`%D' is thread-local and so cannot be dynamically "
4774 "initialized", decl);
4781 The memory occupied by any object of static storage
4782 duration is zero-initialized at program startup before
4783 any other initialization takes place.
4785 We cannot create an appropriate initializer until after
4786 the type of DECL is finalized. If DECL_INITIAL is set,
4787 then the DECL is statically initialized, and any
4788 necessary zero-initialization has already been performed. */
4789 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
4790 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
4791 /*nelts=*/NULL_TREE,
4792 /*static_storage_p=*/true);
4793 /* Remember that the initialization for this variable has
4795 DECL_INITIALIZED_P (decl) = 1;
4797 /* If the variable has an array type, lay out the type, even if
4798 there is no initializer. It is valid to index through the
4799 array, and we must get TYPE_ALIGN set correctly on the array
4801 else if (TREE_CODE (type) == ARRAY_TYPE)
4805 /* Add this declaration to the statement-tree. This needs to happen
4806 after the call to check_initializer so that the DECL_EXPR for a
4807 reference temp is added before the DECL_EXPR for the reference itself. */
4808 if (at_function_scope_p ())
4809 add_decl_expr (decl);
4811 if (TREE_CODE (decl) == VAR_DECL)
4812 layout_var_decl (decl);
4814 /* Output the assembler code and/or RTL code for variables and functions,
4815 unless the type is an undefined structure or union.
4816 If not, it will get done when the type is completed. */
4817 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
4819 if (TREE_CODE (decl) == VAR_DECL)
4820 maybe_commonize_var (decl);
4822 make_rtl_for_nonlocal_decl (decl, init, asmspec);
4824 /* Check for abstractness of the type. Notice that there is no
4825 need to strip array types here since the check for those types
4826 is already done within create_array_type_for_decl. */
4827 if (TREE_CODE (type) == FUNCTION_TYPE
4828 || TREE_CODE (type) == METHOD_TYPE)
4829 abstract_virtuals_error (decl, TREE_TYPE (type));
4831 abstract_virtuals_error (decl, type);
4833 if (TREE_CODE (decl) == FUNCTION_DECL
4834 || TREE_TYPE (decl) == error_mark_node)
4835 /* No initialization required. */
4837 else if (DECL_EXTERNAL (decl)
4838 && ! (DECL_LANG_SPECIFIC (decl)
4839 && DECL_NOT_REALLY_EXTERN (decl)))
4842 DECL_INITIAL (decl) = init;
4846 /* A variable definition. */
4847 if (DECL_FUNCTION_SCOPE_P (decl))
4849 /* This is a local declaration. */
4850 maybe_inject_for_scope_var (decl);
4851 /* Initialize the local variable. */
4852 if (processing_template_decl)
4854 if (init || DECL_INITIAL (decl) == error_mark_node)
4855 DECL_INITIAL (decl) = init;
4857 else if (!TREE_STATIC (decl))
4858 initialize_local_var (decl, init);
4861 if (TREE_STATIC (decl))
4862 expand_static_init (decl, init);
4866 /* Undo call to `pushclass' that was done in `start_decl'
4867 due to initialization of qualified member variable.
4868 I.e., Foo::x = 10; */
4870 tree context = CP_DECL_CONTEXT (decl);
4873 && (TREE_CODE (decl) == VAR_DECL
4874 /* We also have a pushclass done that we need to undo here
4875 if we're at top level and declare a method. */
4876 || TREE_CODE (decl) == FUNCTION_DECL)
4877 /* If size hasn't been set, we're still defining it,
4878 and therefore inside the class body; don't pop
4879 the binding level.. */
4880 && COMPLETE_TYPE_P (context)
4881 && context == current_class_type)
4882 pop_nested_class ();
4886 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
4887 reference, insert it in the statement-tree now. */
4889 push_cleanup (decl, cleanup, false);
4894 TREE_READONLY (decl) = 1;
4896 /* If this was marked 'used', be sure it will be output. */
4897 if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
4898 mark_decl_referenced (decl);
4901 /* This is here for a midend callback from c-common.c. */
4904 finish_decl (tree decl, tree init, tree asmspec_tree)
4906 cp_finish_decl (decl, init, asmspec_tree, 0);
4909 /* Returns a declaration for a VAR_DECL as if:
4911 extern "C" TYPE NAME;
4913 had been seen. Used to create compiler-generated global
4917 declare_global_var (tree name, tree type)
4921 push_to_top_level ();
4922 decl = build_decl (VAR_DECL, name, type);
4923 TREE_PUBLIC (decl) = 1;
4924 DECL_EXTERNAL (decl) = 1;
4925 DECL_ARTIFICIAL (decl) = 1;
4927 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
4928 pop_from_top_level ();
4933 /* Returns a pointer to the `atexit' function. Note that if
4934 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
4935 `__cxa_atexit' function specified in the IA64 C++ ABI. */
4938 get_atexit_node (void)
4949 if (flag_use_cxa_atexit)
4951 /* The declaration for `__cxa_atexit' is:
4953 int __cxa_atexit (void (*)(void *), void *, void *)
4955 We build up the argument types and then then function type
4958 /* First, build the pointer-to-function type for the first
4960 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
4961 fn_type = build_function_type (void_type_node, arg_types);
4962 fn_ptr_type = build_pointer_type (fn_type);
4963 /* Then, build the rest of the argument types. */
4964 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
4965 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
4966 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
4967 /* And the final __cxa_atexit type. */
4968 fn_type = build_function_type (integer_type_node, arg_types);
4969 fn_ptr_type = build_pointer_type (fn_type);
4970 name = "__cxa_atexit";
4974 /* The declaration for `atexit' is:
4976 int atexit (void (*)());
4978 We build up the argument types and then then function type
4980 fn_type = build_function_type (void_type_node, void_list_node);
4981 fn_ptr_type = build_pointer_type (fn_type);
4982 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
4983 /* Build the final atexit type. */
4984 fn_type = build_function_type (integer_type_node, arg_types);
4988 /* Now, build the function declaration. */
4989 push_lang_context (lang_name_c);
4990 atexit_fndecl = build_library_fn_ptr (name, fn_type);
4991 mark_used (atexit_fndecl);
4992 pop_lang_context ();
4993 atexit_node = decay_conversion (atexit_fndecl);
4998 /* Returns the __dso_handle VAR_DECL. */
5001 get_dso_handle_node (void)
5003 if (dso_handle_node)
5004 return dso_handle_node;
5006 /* Declare the variable. */
5007 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5010 return dso_handle_node;
5013 /* Begin a new function with internal linkage whose job will be simply
5014 to destroy some particular variable. */
5016 static GTY(()) int start_cleanup_cnt;
5019 start_cleanup_fn (void)
5021 int old_interface_only = interface_only;
5022 int old_interface_unknown = interface_unknown;
5028 push_to_top_level ();
5030 /* No need to mangle this. */
5031 push_lang_context (lang_name_c);
5034 interface_unknown = 1;
5036 /* Build the parameter-types. */
5037 parmtypes = void_list_node;
5038 /* Functions passed to __cxa_atexit take an additional parameter.
5039 We'll just ignore it. After we implement the new calling
5040 convention for destructors, we can eliminate the use of
5041 additional cleanup functions entirely in the -fnew-abi case. */
5042 if (flag_use_cxa_atexit)
5043 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5044 /* Build the function type itself. */
5045 fntype = build_function_type (void_type_node, parmtypes);
5046 /* Build the name of the function. */
5047 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5048 /* Build the function declaration. */
5049 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5050 /* It's a function with internal linkage, generated by the
5052 TREE_PUBLIC (fndecl) = 0;
5053 DECL_ARTIFICIAL (fndecl) = 1;
5054 /* Make the function `inline' so that it is only emitted if it is
5055 actually needed. It is unlikely that it will be inlined, since
5056 it is only called via a function pointer, but we avoid unnecessary
5057 emissions this way. */
5058 DECL_INLINE (fndecl) = 1;
5059 DECL_DECLARED_INLINE_P (fndecl) = 1;
5060 DECL_INTERFACE_KNOWN (fndecl) = 1;
5061 /* Build the parameter. */
5062 if (flag_use_cxa_atexit)
5066 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5067 DECL_CONTEXT (parmdecl) = fndecl;
5068 TREE_USED (parmdecl) = 1;
5069 DECL_ARGUMENTS (fndecl) = parmdecl;
5073 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5075 interface_unknown = old_interface_unknown;
5076 interface_only = old_interface_only;
5078 pop_lang_context ();
5080 return current_function_decl;
5083 /* Finish the cleanup function begun by start_cleanup_fn. */
5086 end_cleanup_fn (void)
5088 expand_or_defer_fn (finish_function (0));
5090 pop_from_top_level ();
5093 /* Generate code to handle the destruction of DECL, an object with
5094 static storage duration. */
5097 register_dtor_fn (tree decl)
5104 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5107 /* Call build_cleanup before we enter the anonymous function so that
5108 any access checks will be done relative to the current scope,
5109 rather than the scope of the anonymous function. */
5110 build_cleanup (decl);
5112 /* Now start the function. */
5113 cleanup = start_cleanup_fn ();
5115 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
5116 to the original function, rather than the anonymous one. That
5117 will make the back-end think that nested functions are in use,
5118 which causes confusion. */
5120 push_deferring_access_checks (dk_no_check);
5121 fcall = build_cleanup (decl);
5122 pop_deferring_access_checks ();
5124 /* Create the body of the anonymous function. */
5125 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5126 finish_expr_stmt (fcall);
5127 finish_compound_stmt (compound_stmt);
5130 /* Call atexit with the cleanup function. */
5131 cxx_mark_addressable (cleanup);
5132 mark_used (cleanup);
5133 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5134 if (flag_use_cxa_atexit)
5136 args = tree_cons (NULL_TREE,
5137 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5139 args = tree_cons (NULL_TREE, null_pointer_node, args);
5140 args = tree_cons (NULL_TREE, cleanup, args);
5143 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5144 finish_expr_stmt (build_function_call (get_atexit_node (), args));
5147 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
5148 is its initializer. Generate code to handle the construction
5149 and destruction of DECL. */
5152 expand_static_init (tree decl, tree init)
5154 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
5155 my_friendly_assert (TREE_STATIC (decl), 20021010);
5157 /* Some variables require no initialization. */
5159 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5160 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5163 if (! toplevel_bindings_p ())
5165 /* Emit code to perform this initialization but once. */
5172 /* Emit code to perform this initialization but once. This code
5175 static int guard = 0;
5177 // Do initialization.
5179 // Register variable for destruction at end of program.
5182 Note that the `temp' variable is only set to 1 *after* the
5183 initialization is complete. This ensures that an exception,
5184 thrown during the construction, will cause the variable to
5185 reinitialized when we pass through this code again, as per:
5189 If the initialization exits by throwing an exception, the
5190 initialization is not complete, so it will be tried again
5191 the next time control enters the declaration.
5193 In theory, this process should be thread-safe, too; multiple
5194 threads should not be able to initialize the variable more
5195 than once. We don't yet attempt to ensure thread-safety. */
5197 /* Create the guard variable. */
5198 guard = get_guard (decl);
5200 /* Begin the conditional initialization. */
5201 if_stmt = begin_if_stmt ();
5202 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5203 then_clause = begin_compound_stmt (0);
5205 /* Do the initialization itself. */
5206 assignment = init ? init : NULL_TREE;
5208 /* Once the assignment is complete, set TEMP to 1. Since the
5209 construction of the static object is complete at this point,
5210 we want to make sure TEMP is set to 1 even if a temporary
5211 constructed during the initialization throws an exception
5212 when it is destroyed. So, we combine the initialization and
5213 the assignment to TEMP into a single expression, ensuring
5214 that when we call finish_expr_stmt the cleanups will not be
5215 run until after TEMP is set to 1. */
5216 guard_init = set_guard (guard);
5218 assignment = build_compound_expr (assignment, guard_init);
5220 assignment = guard_init;
5221 finish_expr_stmt (assignment);
5223 /* Use atexit to register a function for destroying this static
5225 register_dtor_fn (decl);
5227 finish_compound_stmt (then_clause);
5228 finish_then_clause (if_stmt);
5229 finish_if_stmt (if_stmt);
5232 static_aggregates = tree_cons (init, decl, static_aggregates);
5236 /* Make TYPE a complete type based on INITIAL_VALUE.
5237 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5238 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
5241 complete_array_type (tree type, tree initial_value, int do_default)
5243 tree maxindex = NULL_TREE;
5248 /* An array of character type can be initialized from a
5249 brace-enclosed string constant. */
5250 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
5251 && TREE_CODE (initial_value) == CONSTRUCTOR
5252 && CONSTRUCTOR_ELTS (initial_value)
5253 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
5255 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
5256 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
5258 /* Note MAXINDEX is really the maximum index, one less than the
5260 if (TREE_CODE (initial_value) == STRING_CST)
5263 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
5264 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
5267 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
5269 tree elts = CONSTRUCTOR_ELTS (initial_value);
5271 maxindex = ssize_int (-1);
5272 for (; elts; elts = TREE_CHAIN (elts))
5274 if (TREE_PURPOSE (elts))
5275 maxindex = TREE_PURPOSE (elts);
5277 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
5279 maxindex = copy_node (maxindex);
5283 /* Make an error message unless that happened already. */
5284 if (initial_value != error_mark_node)
5287 initial_value = NULL_TREE;
5289 /* Prevent further error messages. */
5290 maxindex = build_int_2 (0, 0);
5297 maxindex = build_int_2 (0, 0);
5307 domain = build_index_type (maxindex);
5308 TYPE_DOMAIN (type) = domain;
5310 if (! TREE_TYPE (maxindex))
5311 TREE_TYPE (maxindex) = domain;
5313 itype = TREE_TYPE (initial_value);
5316 if (itype && !TYPE_DOMAIN (itype))
5317 TYPE_DOMAIN (itype) = domain;
5318 /* The type of the main variant should never be used for arrays
5319 of different sizes. It should only ever be completed with the
5320 size of the array. */
5321 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
5322 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
5324 elt_type = TREE_TYPE (type);
5325 TYPE_NEEDS_CONSTRUCTING (type)
5326 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
5327 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5328 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
5331 /* Lay out the type now that we can get the real answer. */
5338 /* Return zero if something is declared to be a member of type
5339 CTYPE when in the context of CUR_TYPE. STRING is the error
5340 message to print in that case. Otherwise, quietly return 1. */
5343 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5345 if (ctype && ctype != cur_type)
5347 if (flags == DTOR_FLAG)
5348 error ("destructor for alien class `%T' cannot be a member",
5351 error ("constructor for alien class `%T' cannot be a member",
5358 /* Subroutine of `grokdeclarator'. */
5360 /* Generate errors possibly applicable for a given set of specifiers.
5361 This is for ARM $7.1.2. */
5364 bad_specifiers (tree object,
5373 error ("`%D' declared as a `virtual' %s", object, type);
5375 error ("`%D' declared as an `inline' %s", object, type);
5377 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
5380 cp_error_at ("`%D' declared as a friend", object);
5382 && (TREE_CODE (object) == TYPE_DECL
5383 || (!TYPE_PTRFN_P (TREE_TYPE (object))
5384 && !TYPE_REFFN_P (TREE_TYPE (object))
5385 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5386 cp_error_at ("`%D' declared with an exception specification", object);
5389 /* CTYPE is class type, or null if non-class.
5390 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5392 DECLARATOR is the function's name.
5393 PARMS is a chain of PARM_DECLs for the function.
5394 VIRTUALP is truthvalue of whether the function is virtual or not.
5395 FLAGS are to be passed through to `grokclassfn'.
5396 QUALS are qualifiers indicating whether the function is `const'
5398 RAISES is a list of exceptions that this function can raise.
5399 CHECK is 1 if we must find this method in CTYPE, 0 if we should
5400 not look, and -1 if we should not call `grokclassfn' at all.
5402 Returns `NULL_TREE' if something goes wrong, after issuing
5403 applicable error messages. */
5406 grokfndecl (tree ctype,
5410 tree orig_declarator,
5412 enum overload_flags flags,
5424 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5425 int has_default_arg = 0;
5429 type = build_exception_variant (type, raises);
5431 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5432 DECL_ARGUMENTS (decl) = parms;
5433 /* Propagate volatile out from type to decl. */
5434 if (TYPE_VOLATILE (type))
5435 TREE_THIS_VOLATILE (decl) = 1;
5437 /* If this decl has namespace scope, set that up. */
5439 set_decl_namespace (decl, in_namespace, friendp);
5441 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5443 /* `main' and builtins have implicit 'C' linkage. */
5444 if ((MAIN_NAME_P (declarator)
5445 || (IDENTIFIER_LENGTH (declarator) > 10
5446 && IDENTIFIER_POINTER (declarator)[0] == '_'
5447 && IDENTIFIER_POINTER (declarator)[1] == '_'
5448 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5449 && current_lang_name == lang_name_cplusplus
5450 && ctype == NULL_TREE
5451 /* NULL_TREE means global namespace. */
5452 && DECL_CONTEXT (decl) == NULL_TREE)
5453 SET_DECL_LANGUAGE (decl, lang_c);
5455 /* Should probably propagate const out from type to decl I bet (mrs). */
5458 DECL_STATIC_FUNCTION_P (decl) = 1;
5459 DECL_CONTEXT (decl) = ctype;
5463 DECL_CONTEXT (decl) = ctype;
5465 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5467 if (processing_template_decl)
5468 error ("cannot declare `::main' to be a template");
5470 error ("cannot declare `::main' to be inline");
5472 error ("cannot declare `::main' to be static");
5473 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5475 error ("`main' must return `int'");
5480 /* Members of anonymous types and local classes have no linkage; make
5481 them internal. If a typedef is made later, this will be changed. */
5482 if (ctype && (TYPE_ANONYMOUS_P (ctype)
5483 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5488 /* [basic.link]: A name with no linkage (notably, the name of a class
5489 or enumeration declared in a local scope) shall not be used to
5490 declare an entity with linkage.
5492 Only check this for public decls for now. See core 319, 389. */
5493 t = no_linkage_check (TREE_TYPE (decl));
5496 if (TYPE_ANONYMOUS_P (t))
5498 if (DECL_EXTERN_C_P (decl))
5499 /* Allow this; it's pretty common in C. */;
5502 pedwarn ("non-local function `%#D' uses anonymous type",
5504 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5506 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5511 pedwarn ("non-local function `%#D' uses local type `%T'",
5516 TREE_PUBLIC (decl) = publicp;
5519 DECL_INTERFACE_KNOWN (decl) = 1;
5520 DECL_NOT_REALLY_EXTERN (decl) = 1;
5523 /* If the declaration was declared inline, mark it as such. */
5525 DECL_DECLARED_INLINE_P (decl) = 1;
5526 /* We inline functions that are explicitly declared inline, or, when
5527 the user explicitly asks us to, all functions. */
5528 if (DECL_DECLARED_INLINE_P (decl)
5529 || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5530 DECL_INLINE (decl) = 1;
5532 DECL_EXTERNAL (decl) = 1;
5533 if (quals && TREE_CODE (type) == FUNCTION_TYPE)
5535 error ("%smember function `%D' cannot have cv-qualifier",
5536 (ctype ? "static " : "non-"), decl);
5537 quals = TYPE_UNQUALIFIED;
5540 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5541 grok_op_properties (decl, friendp, /*complain=*/true);
5543 if (ctype && decl_function_context (decl))
5544 DECL_NO_STATIC_CHAIN (decl) = 1;
5546 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5547 if (TREE_PURPOSE (t)
5548 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5550 has_default_arg = 1;
5555 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5559 ("defining explicit specialization `%D' in friend declaration",
5563 tree fns = TREE_OPERAND (orig_declarator, 0);
5564 tree args = TREE_OPERAND (orig_declarator, 1);
5566 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5568 /* Something like `template <class T> friend void f<T>()'. */
5569 error ("invalid use of template-id `%D' in declaration of primary template",
5575 /* A friend declaration of the form friend void f<>(). Record
5576 the information in the TEMPLATE_ID_EXPR. */
5577 SET_DECL_IMPLICIT_INSTANTIATION (decl);
5579 if (TREE_CODE (fns) == COMPONENT_REF)
5581 /* Due to bison parser ickiness, we will have already looked
5582 up an operator_name or PFUNCNAME within the current class
5583 (see template_id in parse.y). If the current class contains
5584 such a name, we'll get a COMPONENT_REF here. Undo that. */
5586 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5587 == current_class_type, 20001120);
5588 fns = TREE_OPERAND (fns, 1);
5590 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5591 || TREE_CODE (fns) == OVERLOAD, 20001120);
5592 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5594 if (has_default_arg)
5596 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
5603 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
5611 /* Make the init_value nonzero so pushdecl knows this is not
5612 tentative. error_mark_node is replaced later with the BLOCK. */
5613 DECL_INITIAL (decl) = error_mark_node;
5615 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5616 TREE_NOTHROW (decl) = 1;
5618 /* Caller will do the rest of this. */
5622 if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
5623 DECL_CONSTRUCTOR_P (decl) = 1;
5625 /* Function gets the ugly name, field gets the nice one. This call
5626 may change the type of the function (because of default
5628 if (ctype != NULL_TREE)
5629 grokclassfn (ctype, decl, flags, quals);
5631 decl = check_explicit_specialization (orig_declarator, decl,
5633 2 * (funcdef_flag != 0) +
5634 4 * (friendp != 0));
5635 if (decl == error_mark_node)
5638 if (ctype != NULL_TREE
5639 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5644 old_decl = check_classfn (ctype, decl,
5645 (processing_template_decl
5646 > template_class_depth (ctype))
5647 ? current_template_parms
5650 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5651 /* Because grokfndecl is always supposed to return a
5652 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5653 here. We depend on our callers to figure out that its
5654 really a template that's being returned. */
5655 old_decl = DECL_TEMPLATE_RESULT (old_decl);
5657 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5658 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5659 /* Remove the `this' parm added by grokclassfn.
5660 XXX Isn't this done in start_function, too? */
5661 revert_static_member_fn (decl);
5662 if (old_decl && DECL_ARTIFICIAL (old_decl))
5663 error ("definition of implicitly-declared `%D'", old_decl);
5670 /* Since we've smashed OLD_DECL to its
5671 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
5672 if (TREE_CODE (decl) == TEMPLATE_DECL)
5673 decl = DECL_TEMPLATE_RESULT (decl);
5675 /* Attempt to merge the declarations. This can fail, in
5676 the case of some invalid specialization declarations. */
5677 pop_p = push_scope (ctype);
5678 ok = duplicate_decls (decl, old_decl);
5683 error ("no `%#D' member function declared in class `%T'",
5691 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5694 if (ctype == NULL_TREE || check)
5698 DECL_VIRTUAL_P (decl) = 1;
5703 /* Create a VAR_DECL named NAME with the indicated TYPE.
5705 If SCOPE is non-NULL, it is the class type or namespace containing
5706 the variable. If SCOPE is NULL, the variable should is created in
5707 the innermost enclosings scope. */
5710 grokvardecl (tree type,
5712 const cp_decl_specifier_seq *declspecs,
5719 my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE,
5722 /* Compute the scope in which to place the variable. */
5725 /* An explicit "extern" specifier indicates a namespace-scope
5727 if (declspecs->storage_class == sc_extern)
5728 scope = current_namespace;
5729 else if (!at_function_scope_p ())
5731 scope = current_scope ();
5733 scope = current_namespace;
5738 && (/* If the variable is a namespace-scope variable declared in a
5739 template, we need DECL_LANG_SPECIFIC. */
5740 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5741 /* Similarly for namespace-scope variables with language linkage
5743 || (TREE_CODE (scope) == NAMESPACE_DECL
5744 && current_lang_name != lang_name_cplusplus)
5745 /* Similarly for static data members. */
5747 decl = build_lang_decl (VAR_DECL, name, type);
5749 decl = build_decl (VAR_DECL, name, type);
5751 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
5752 set_decl_namespace (decl, scope, 0);
5754 DECL_CONTEXT (decl) = scope;
5756 if (declspecs->storage_class == sc_extern)
5758 DECL_THIS_EXTERN (decl) = 1;
5759 DECL_EXTERNAL (decl) = !initialized;
5762 /* In class context, static means one per class,
5763 public access, and static storage. */
5764 if (DECL_CLASS_SCOPE_P (decl))
5766 TREE_PUBLIC (decl) = 1;
5767 TREE_STATIC (decl) = 1;
5768 DECL_EXTERNAL (decl) = 0;
5770 /* At top level, either `static' or no s.c. makes a definition
5771 (perhaps tentative), and absence of `static' makes it public. */
5772 else if (toplevel_bindings_p ())
5774 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
5775 && (DECL_THIS_EXTERN (decl) || ! constp));
5776 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5778 /* Not at top level, only `static' makes a static definition. */
5781 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
5782 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5785 if (declspecs->specs[(int)ds_thread])
5787 if (targetm.have_tls)
5788 DECL_THREAD_LOCAL (decl) = 1;
5790 /* A mere warning is sure to result in improper semantics
5791 at runtime. Don't bother to allow this to compile. */
5792 error ("thread-local storage not supported for this target");
5795 if (TREE_PUBLIC (decl))
5797 /* [basic.link]: A name with no linkage (notably, the name of a class
5798 or enumeration declared in a local scope) shall not be used to
5799 declare an entity with linkage.
5801 Only check this for public decls for now. */
5802 tree t = no_linkage_check (TREE_TYPE (decl));
5805 if (TYPE_ANONYMOUS_P (t))
5807 if (DECL_EXTERN_C_P (decl))
5808 /* Allow this; it's pretty common in C. */;
5811 pedwarn ("non-local variable `%#D' uses anonymous type",
5813 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5815 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5820 pedwarn ("non-local variable `%#D' uses local type `%T'",
5828 /* Create and return a canonical pointer to member function type, for
5829 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
5832 build_ptrmemfunc_type (tree type)
5836 tree unqualified_variant = NULL_TREE;
5838 if (type == error_mark_node)
5841 /* If a canonical type already exists for this type, use it. We use
5842 this method instead of type_hash_canon, because it only does a
5843 simple equality check on the list of field members. */
5845 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5848 /* Make sure that we always have the unqualified pointer-to-member
5850 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5852 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5854 t = make_aggr_type (RECORD_TYPE);
5855 xref_basetypes (t, NULL_TREE);
5857 /* Let the front-end know this is a pointer to member function... */
5858 TYPE_PTRMEMFUNC_FLAG (t) = 1;
5859 /* ... and not really an aggregate. */
5860 SET_IS_AGGR_TYPE (t, 0);
5862 field = build_decl (FIELD_DECL, pfn_identifier, type);
5865 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5866 TREE_CHAIN (field) = fields;
5869 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
5871 /* Zap out the name so that the back-end will give us the debugging
5872 information for this anonymous RECORD_TYPE. */
5873 TYPE_NAME (t) = NULL_TREE;
5875 /* If this is not the unqualified form of this pointer-to-member
5876 type, set the TYPE_MAIN_VARIANT for this type to be the
5877 unqualified type. Since they are actually RECORD_TYPEs that are
5878 not variants of each other, we must do this manually. */
5879 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5881 t = build_qualified_type (t, cp_type_quals (type));
5882 TYPE_MAIN_VARIANT (t) = unqualified_variant;
5883 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5884 TYPE_NEXT_VARIANT (unqualified_variant) = t;
5887 /* Cache this pointer-to-member type so that we can find it again
5889 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5894 /* Create and return a pointer to data member type. */
5897 build_ptrmem_type (tree class_type, tree member_type)
5899 if (TREE_CODE (member_type) == METHOD_TYPE)
5903 arg_types = TYPE_ARG_TYPES (member_type);
5904 class_type = (cp_build_qualified_type
5906 cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
5908 = build_method_type_directly (class_type,
5909 TREE_TYPE (member_type),
5910 TREE_CHAIN (arg_types));
5911 return build_ptrmemfunc_type (build_pointer_type (member_type));
5915 my_friendly_assert (TREE_CODE (member_type) != FUNCTION_TYPE,
5917 return build_offset_type (class_type, member_type);
5921 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
5922 Check to see that the definition is valid. Issue appropriate error
5923 messages. Return 1 if the definition is particularly bad, or 0
5927 check_static_variable_definition (tree decl, tree type)
5929 /* Motion 10 at San Diego: If a static const integral data member is
5930 initialized with an integral constant expression, the initializer
5931 may appear either in the declaration (within the class), or in
5932 the definition, but not both. If it appears in the class, the
5933 member is a member constant. The file-scope definition is always
5935 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
5937 error ("invalid in-class initialization of static data member of non-integral type `%T'",
5939 /* If we just return the declaration, crashes will sometimes
5940 occur. We therefore return void_type_node, as if this were a
5941 friend declaration, to cause callers to completely ignore
5942 this declaration. */
5945 else if (!CP_TYPE_CONST_P (type))
5946 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
5948 else if (pedantic && !INTEGRAL_TYPE_P (type))
5949 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
5954 /* Given the SIZE (i.e., number of elements) in an array, compute an
5955 appropriate index type for the array. If non-NULL, NAME is the
5956 name of the thing being declared. */
5959 compute_array_index_type (tree name, tree size)
5961 tree type = TREE_TYPE (size);
5964 /* The array bound must be an integer type. */
5965 if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
5968 error ("size of array `%D' has non-integral type `%T'", name, type);
5970 error ("size of array has non-integral type `%T'", type);
5971 size = integer_one_node;
5972 type = TREE_TYPE (size);
5975 if (abi_version_at_least (2)
5976 /* We should only handle value dependent expressions specially. */
5977 ? value_dependent_expression_p (size)
5978 /* But for abi-1, we handled all instances in templates. This
5979 effects the manglings produced. */
5980 : processing_template_decl)
5981 return build_index_type (build_min (MINUS_EXPR, sizetype,
5982 size, integer_one_node));
5984 /* The size might be the result of a cast. */
5985 STRIP_TYPE_NOPS (size);
5987 /* It might be a const variable or enumeration constant. */
5988 size = decl_constant_value (size);
5990 /* Normally, the array-bound will be a constant. */
5991 if (TREE_CODE (size) == INTEGER_CST)
5993 /* Check to see if the array bound overflowed. Make that an
5994 error, no matter how generous we're being. */
5995 int old_flag_pedantic_errors = flag_pedantic_errors;
5996 int old_pedantic = pedantic;
5997 pedantic = flag_pedantic_errors = 1;
5998 constant_expression_warning (size);
5999 pedantic = old_pedantic;
6000 flag_pedantic_errors = old_flag_pedantic_errors;
6002 /* An array must have a positive number of elements. */
6003 if (INT_CST_LT (size, integer_zero_node))
6006 error ("size of array `%D' is negative", name);
6008 error ("size of array is negative");
6009 size = integer_one_node;
6011 /* As an extension we allow zero-sized arrays. We always allow
6012 them in system headers because glibc uses them. */
6013 else if (integer_zerop (size) && pedantic && !in_system_header)
6016 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
6018 pedwarn ("ISO C++ forbids zero-size array");
6021 else if (TREE_CONSTANT (size))
6023 /* `(int) &fn' is not a valid array bound. */
6025 error ("size of array `%D' is not an integral constant-expression",
6028 error ("size of array is not an integral constant-expression");
6033 pedwarn ("ISO C++ forbids variable-size array `%D'", name);
6035 pedwarn ("ISO C++ forbids variable-size array");
6038 if (processing_template_decl && !TREE_CONSTANT (size))
6039 /* A variable sized array. */
6040 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6043 /* Compute the index of the largest element in the array. It is
6044 one less than the number of elements in the array. */
6046 = fold (cp_build_binary_op (MINUS_EXPR,
6047 cp_convert (ssizetype, size),
6048 cp_convert (ssizetype, integer_one_node)));
6049 if (!TREE_CONSTANT (itype))
6050 /* A variable sized array. */
6051 itype = variable_size (itype);
6052 /* Make sure that there was no overflow when creating to a signed
6053 index type. (For example, on a 32-bit machine, an array with
6054 size 2^32 - 1 is too big.) */
6055 else if (TREE_OVERFLOW (itype))
6057 error ("overflow in array dimension");
6058 TREE_OVERFLOW (itype) = 0;
6062 /* Create and return the appropriate index type. */
6063 return build_index_type (itype);
6066 /* Returns the scope (if any) in which the entity declared by
6067 DECLARATOR will be located. If the entity was declared with an
6068 unqualified name, NULL_TREE is returned. */
6071 get_scope_of_declarator (const cp_declarator *declarator)
6073 while (declarator && declarator->kind != cdk_id)
6074 declarator = declarator->declarator;
6076 /* If the declarator-id is a SCOPE_REF, the scope in which the
6077 declaration occurs is the first operand. */
6079 && declarator->u.id.name
6080 && TREE_CODE (declarator->u.id.name) == SCOPE_REF)
6081 return TREE_OPERAND (declarator->u.id.name, 0);
6083 /* Otherwise, the declarator is not a quablified name; the entity will
6084 be declared in the current scope. */
6088 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6089 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
6093 create_array_type_for_decl (tree name, tree type, tree size)
6095 tree itype = NULL_TREE;
6096 const char* error_msg;
6098 /* If things have already gone awry, bail now. */
6099 if (type == error_mark_node || size == error_mark_node)
6100 return error_mark_node;
6102 /* Assume that everything will go OK. */
6105 /* There are some types which cannot be array elements. */
6106 switch (TREE_CODE (type))
6109 error_msg = "array of void";
6113 error_msg = "array of functions";
6116 case REFERENCE_TYPE:
6117 error_msg = "array of references";
6121 error_msg = "array of function members";
6128 /* If something went wrong, issue an error-message and return. */
6132 error ("declaration of `%D' as %s", name, error_msg);
6134 error ("creating %s", error_msg);
6136 return error_mark_node;
6141 The constant expressions that specify the bounds of the arrays
6142 can be omitted only for the first member of the sequence. */
6143 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6146 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
6149 error ("multidimensional array must have bounds for all dimensions except the first");
6151 return error_mark_node;
6154 /* Figure out the index type for the array. */
6156 itype = compute_array_index_type (name, size);
6159 T is called the array element type; this type shall not be [...] an
6160 abstract class type. */
6161 abstract_virtuals_error (name, type);
6163 return build_cplus_array_type (type, itype);
6166 /* Check that it's OK to declare a function with the indicated TYPE.
6167 SFK indicates the kind of special function (if any) that this
6168 function is. OPTYPE is the type given in a conversion operator
6169 declaration. Returns the actual return type of the function; that
6170 may be different than TYPE if an error occurs, or for certain
6171 special functions. */
6174 check_special_function_return_type (special_function_kind sfk,
6180 case sfk_constructor:
6182 error ("return type specification for constructor invalid");
6184 type = void_type_node;
6187 case sfk_destructor:
6189 error ("return type specification for destructor invalid");
6190 type = void_type_node;
6193 case sfk_conversion:
6194 if (type && !same_type_p (type, optype))
6195 error ("operator `%T' declared to return `%T'", optype, type);
6197 pedwarn ("return type specified for `operator %T'", optype);
6209 /* Given declspecs and a declarator (abstract or otherwise), determine
6210 the name and type of the object declared and construct a DECL node
6213 DECLSPECS is a chain of tree_list nodes whose value fields
6214 are the storage classes and type specifiers.
6216 DECL_CONTEXT says which syntactic context this declaration is in:
6217 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6218 FUNCDEF for a function definition. Like NORMAL but a few different
6219 error messages in each case. Return value may be zero meaning
6220 this definition is too screwy to try to parse.
6221 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
6222 handle member functions (which have FIELD context).
6223 Return value may be zero meaning this definition is too screwy to
6225 PARM for a parameter declaration (either within a function prototype
6226 or before a function body). Make a PARM_DECL, or return void_type_node.
6227 CATCHPARM for a parameter declaration before a catch clause.
6228 TYPENAME if for a typename (in a cast or sizeof).
6229 Don't make a DECL node; just return the ..._TYPE node.
6230 FIELD for a struct or union field; make a FIELD_DECL.
6231 BITFIELD for a field with specified width.
6232 INITIALIZED is 1 if the decl has an initializer.
6234 ATTRLIST is a pointer to the list of attributes, which may be NULL
6235 if there are none; *ATTRLIST may be modified if attributes from inside
6236 the declarator should be applied to the declaration.
6238 When this function is called, scoping variables (such as
6239 CURRENT_CLASS_TYPE) should reflect the scope in which the
6240 declaration occurs, not the scope in which the new declaration will
6241 be placed. For example, on:
6245 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6246 should not be `S'. */
6249 grokdeclarator (const cp_declarator *declarator,
6250 const cp_decl_specifier_seq *declspecs,
6251 enum decl_context decl_context,
6255 tree type = NULL_TREE;
6258 int virtualp, explicitp, friendp, inlinep, staticp;
6259 int explicit_int = 0;
6260 int explicit_char = 0;
6261 int defaulted_int = 0;
6262 tree dependant_name = NULL_TREE;
6264 tree typedef_decl = NULL_TREE;
6265 const char *name = NULL;
6266 tree typedef_type = NULL_TREE;
6267 int funcdef_flag = 0;
6268 cp_declarator_kind innermost_code = cdk_error;
6271 /* See the code below that used this. */
6272 tree decl_attr = NULL_TREE;
6275 /* Keep track of what sort of function is being processed
6276 so that we can warn about default return values, or explicit
6277 return values which do not match prescribed defaults. */
6278 special_function_kind sfk = sfk_none;
6280 tree dname = NULL_TREE;
6281 tree ctor_return_type = NULL_TREE;
6282 enum overload_flags flags = NO_SPECIAL;
6283 cp_cv_quals quals = TYPE_UNQUALIFIED;
6284 tree raises = NULL_TREE;
6285 int template_count = 0;
6286 tree returned_attrs = NULL_TREE;
6287 tree parms = NULL_TREE;
6288 const cp_declarator *id_declarator;
6289 /* The unqualified name of the declarator; either an
6290 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
6291 tree unqualified_id;
6292 /* The class type, if any, in which this entity is located,
6293 or NULL_TREE if none. Note that this value may be different from
6294 the current class type; for example if an attempt is made to declare
6295 "A::f" inside "B", this value will be "A". */
6296 tree ctype = current_class_type;
6297 /* The NAMESPACE_DECL for the namespace in which this entity is
6298 located. If an unqualified name is used to declare the entity,
6299 this value will be NULL_TREE, even if the entity is located at
6301 tree in_namespace = NULL_TREE;
6303 cp_storage_class storage_class;
6304 bool unsigned_p, signed_p, short_p, long_p, thread_p;
6306 signed_p = declspecs->specs[(int)ds_signed];
6307 unsigned_p = declspecs->specs[(int)ds_unsigned];
6308 short_p = declspecs->specs[(int)ds_short];
6309 long_p = declspecs->specs[(int)ds_long];
6310 thread_p = declspecs->specs[(int)ds_thread];
6312 if (decl_context == FUNCDEF)
6313 funcdef_flag = 1, decl_context = NORMAL;
6314 else if (decl_context == MEMFUNCDEF)
6315 funcdef_flag = -1, decl_context = FIELD;
6316 else if (decl_context == BITFIELD)
6317 bitfield = 1, decl_context = FIELD;
6319 /* Look inside a declarator for the name being declared
6320 and get it as a string, for an error message. */
6321 for (id_declarator = declarator;
6323 id_declarator = id_declarator->declarator)
6325 if (id_declarator->kind != cdk_id)
6326 innermost_code = id_declarator->kind;
6328 switch (id_declarator->kind)
6331 if (id_declarator->declarator
6332 && id_declarator->declarator->kind == cdk_id)
6334 sfk = id_declarator->declarator->u.id.sfk;
6335 if (sfk == sfk_destructor)
6342 tree decl = id_declarator->u.id.name;
6345 if (TREE_CODE (decl) == SCOPE_REF)
6347 tree qualifying_scope = TREE_OPERAND (decl, 0);
6349 /* It is valid to write:
6351 class C { void f(); };
6355 The standard is not clear about whether `typedef const C D' is
6356 legal; as of 2002-09-15 the committee is considering
6357 that question. EDG 3.0 allows that syntax.
6358 Therefore, we do as well. */
6359 if (qualifying_scope && TYPE_P (qualifying_scope))
6361 ctype = TYPE_MAIN_VARIANT (qualifying_scope);
6362 if (innermost_code != cdk_function
6363 && current_class_type
6364 && !UNIQUELY_DERIVED_FROM_P (ctype,
6365 current_class_type))
6367 error ("type `%T' is not derived from type `%T'",
6368 ctype, current_class_type);
6371 TREE_OPERAND (decl, 0) = ctype;
6373 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6374 in_namespace = qualifying_scope;
6375 decl = TREE_OPERAND (decl, 1);
6377 if (TREE_CODE (decl) == BASELINK)
6378 decl = BASELINK_FUNCTIONS (decl);
6379 if (decl == error_mark_node)
6380 return error_mark_node;
6381 switch (TREE_CODE (decl))
6385 tree type = TREE_OPERAND (decl, 0);
6386 type = constructor_name (type);
6387 name = IDENTIFIER_POINTER (type);
6391 case TEMPLATE_ID_EXPR:
6393 tree fns = TREE_OPERAND (decl, 0);
6396 if (TREE_CODE (dname) == COMPONENT_REF)
6397 dname = TREE_OPERAND (dname, 1);
6398 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6400 my_friendly_assert (is_overloaded_fn (dname),
6402 dname = DECL_NAME (get_first_fn (dname));
6407 case IDENTIFIER_NODE:
6408 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6411 if (C_IS_RESERVED_WORD (dname))
6413 error ("declarator-id missing; using reserved word `%D'",
6415 name = IDENTIFIER_POINTER (dname);
6417 else if (!IDENTIFIER_TYPENAME_P (dname))
6418 name = IDENTIFIER_POINTER (dname);
6421 my_friendly_assert (flags == NO_SPECIAL, 154);
6422 flags = TYPENAME_FLAG;
6423 ctor_return_type = TREE_TYPE (dname);
6424 sfk = sfk_conversion;
6425 if (is_typename_at_global_scope (dname))
6426 name = IDENTIFIER_POINTER (dname);
6428 name = "<invalid operator>";
6433 dname = constructor_name (TREE_TYPE (decl));
6434 name = IDENTIFIER_POINTER (dname);
6455 if (id_declarator->kind == cdk_id)
6459 /* A function definition's declarator must have the form of
6460 a function declarator. */
6462 if (funcdef_flag && innermost_code != cdk_function)
6465 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6466 && innermost_code != cdk_function
6467 && ! (ctype && !declspecs->any_specifiers_p))
6469 error ("declaration of `%D' as non-function", dname);
6470 return void_type_node;
6473 /* Anything declared one level down from the top level
6474 must be one of the parameters of a function
6475 (because the body is at least two levels down). */
6477 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6478 by not allowing C++ class definitions to specify their parameters
6479 with xdecls (must be spec.d in the parmlist).
6481 Since we now wait to push a class scope until we are sure that
6482 we are in a legitimate method context, we must set oldcname
6483 explicitly (since current_class_name is not yet alive).
6485 We also want to avoid calling this a PARM if it is in a namespace. */
6487 if (decl_context == NORMAL && !toplevel_bindings_p ())
6489 struct cp_binding_level *b = current_binding_level;
6490 current_binding_level = b->level_chain;
6491 if (current_binding_level != 0 && toplevel_bindings_p ())
6492 decl_context = PARM;
6493 current_binding_level = b;
6497 name = decl_context == PARM ? "parameter" : "type name";
6499 /* If there were multiple types specified in the decl-specifier-seq,
6500 issue an error message. */
6501 if (declspecs->multiple_types_p)
6502 error ("two or more data types in declaration of `%s'", name);
6503 /* Extract the basic type from the decl-specifier-seq. */
6504 type = declspecs->type;
6505 if (type == error_mark_node)
6507 /* If the entire declaration is itself tagged as deprecated then
6508 suppress reports of deprecated items. */
6509 if (type && TREE_DEPRECATED (type)
6510 && deprecated_state != DEPRECATED_SUPPRESS)
6511 warn_deprecated_use (type);
6512 if (type && TREE_CODE (type) == TYPE_DECL)
6514 typedef_decl = type;
6515 type = TREE_TYPE (typedef_decl);
6517 /* No type at all: default to `int', and set DEFAULTED_INT
6518 because it was not a user-defined typedef. */
6519 if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
6521 /* These imply 'int'. */
6522 type = integer_type_node;
6526 explicit_int = declspecs->explicit_int_p;
6527 explicit_char = declspecs->explicit_char_p;
6529 /* Check for repeated decl-specifiers. */
6530 for (ds = ds_first; ds != ds_last; ++ds)
6532 unsigned count = declspecs->specs[(int)ds];
6535 /* The "long" specifier is a special case because of
6540 error ("`long long long' is too long for GCC");
6541 else if (pedantic && !in_system_header && warn_long_long)
6542 pedwarn ("ISO C++ does not support `long long'");
6546 else if (declspecs->specs[(int)ds] > 1)
6548 static const char *const decl_spec_names[] = {
6564 error ("duplicate `%s'", decl_spec_names[(int)ds]);
6569 /* See the code below that used this. */
6571 decl_attr = DECL_ATTRIBUTES (typedef_decl);
6573 typedef_type = type;
6576 if (sfk != sfk_none)
6577 type = check_special_function_return_type (sfk, type,
6579 else if (type == NULL_TREE)
6585 /* We handle `main' specially here, because 'main () { }' is so
6586 common. With no options, it is allowed. With -Wreturn-type,
6587 it is a warning. It is only an error with -pedantic-errors. */
6588 is_main = (funcdef_flag
6589 && dname && MAIN_NAME_P (dname)
6590 && ctype == NULL_TREE
6591 && in_namespace == NULL_TREE
6592 && current_namespace == global_namespace);
6594 if (in_system_header || flag_ms_extensions)
6595 /* Allow it, sigh. */;
6596 else if (pedantic || ! is_main)
6597 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
6599 else if (warn_return_type)
6600 warning ("ISO C++ forbids declaration of `%s' with no type",
6603 type = integer_type_node;
6608 /* Now process the modifiers that were specified
6609 and check for invalid combinations. */
6611 /* Long double is a special combination. */
6612 if (long_p && TYPE_MAIN_VARIANT (type) == double_type_node)
6615 type = build_qualified_type (long_double_type_node,
6616 cp_type_quals (type));
6619 /* Check all other uses of type modifiers. */
6621 if (unsigned_p || signed_p || long_p || short_p)
6625 if (TREE_CODE (type) == REAL_TYPE)
6626 error ("short, signed or unsigned invalid for `%s'", name);
6627 else if (TREE_CODE (type) != INTEGER_TYPE)
6628 error ("long, short, signed or unsigned invalid for `%s'", name);
6629 else if (long_p && short_p)
6630 error ("long and short specified together for `%s'", name);
6631 else if ((long_p || short_p) && explicit_char)
6632 error ("long or short specified with char for `%s'", name);
6633 else if ((long_p|| short_p) && TREE_CODE (type) == REAL_TYPE)
6634 error ("long or short specified with floating type for `%s'", name);
6635 else if (signed_p && unsigned_p)
6636 error ("signed and unsigned given together for `%s'", name);
6640 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6642 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
6644 if (flag_pedantic_errors)
6649 /* Discard the type modifiers if they are invalid. */
6660 /* Decide whether an integer type is signed or not.
6661 Optionally treat bitfields as signed by default. */
6665 It is implementation-defined whether a plain (neither
6666 explicitly signed or unsigned) char, short, int, or long
6667 bit-field is signed or unsigned.
6669 Naturally, we extend this to long long as well. Note that
6670 this does not include wchar_t. */
6671 || (bitfield && !flag_signed_bitfields
6673 /* A typedef for plain `int' without `signed' can be
6674 controlled just like plain `int', but a typedef for
6675 `signed int' cannot be so controlled. */
6677 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6678 && (TREE_CODE (type) == INTEGER_TYPE
6679 || TREE_CODE (type) == CHAR_TYPE)
6680 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6683 type = long_long_unsigned_type_node;
6685 type = long_unsigned_type_node;
6687 type = short_unsigned_type_node;
6688 else if (type == char_type_node)
6689 type = unsigned_char_type_node;
6690 else if (typedef_decl)
6691 type = c_common_unsigned_type (type);
6693 type = unsigned_type_node;
6695 else if (signed_p && type == char_type_node)
6696 type = signed_char_type_node;
6698 type = long_long_integer_type_node;
6700 type = long_integer_type_node;
6702 type = short_integer_type_node;
6704 if (declspecs->specs[(int)ds_complex])
6706 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6707 error ("complex invalid for `%s'", name);
6708 /* If we just have "complex", it is equivalent to
6709 "complex double", but if any modifiers at all are specified it is
6710 the complex form of TYPE. E.g, "complex short" is
6711 "complex short int". */
6713 else if (defaulted_int && ! longlong
6714 && ! (long_p || short_p || signed_p || unsigned_p))
6715 type = complex_double_type_node;
6716 else if (type == integer_type_node)
6717 type = complex_integer_type_node;
6718 else if (type == float_type_node)
6719 type = complex_float_type_node;
6720 else if (type == double_type_node)
6721 type = complex_double_type_node;
6722 else if (type == long_double_type_node)
6723 type = complex_long_double_type_node;
6725 type = build_complex_type (type);
6728 type_quals = TYPE_UNQUALIFIED;
6729 if (declspecs->specs[(int)ds_const])
6730 type_quals |= TYPE_QUAL_CONST;
6731 if (declspecs->specs[(int)ds_volatile])
6732 type_quals |= TYPE_QUAL_VOLATILE;
6733 if (declspecs->specs[(int)ds_restrict])
6734 type_quals |= TYPE_QUAL_RESTRICT;
6735 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
6736 error ("qualifiers are not allowed on declaration of `operator %T'",
6739 type_quals |= cp_type_quals (type);
6740 type = cp_build_qualified_type_real
6741 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
6742 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
6743 /* We might have ignored or rejected some of the qualifiers. */
6744 type_quals = cp_type_quals (type);
6747 inlinep = !! declspecs->specs[(int)ds_inline];
6748 virtualp = !! declspecs->specs[(int)ds_virtual];
6749 explicitp = !! declspecs->specs[(int)ds_explicit];
6751 storage_class = declspecs->storage_class;
6752 if (storage_class == sc_static)
6753 staticp = 1 + (decl_context == FIELD);
6755 if (virtualp && staticp == 2)
6757 error ("member `%D' cannot be declared both virtual and static",
6761 friendp = !! declspecs->specs[(int)ds_friend];
6763 if (dependant_name && !friendp)
6765 error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
6766 return void_type_node;
6769 /* Issue errors about use of storage classes for parameters. */
6770 if (decl_context == PARM)
6772 if (declspecs->specs[(int)ds_typedef])
6773 error ("typedef declaration invalid in parameter declaration");
6774 else if (storage_class == sc_static
6775 || storage_class == sc_extern
6777 error ("storage class specifiers invalid in parameter declarations");
6780 /* Give error if `virtual' is used outside of class declaration. */
6782 && (current_class_name == NULL_TREE || decl_context != FIELD))
6784 error ("virtual outside class declaration");
6788 /* Static anonymous unions are dealt with here. */
6789 if (staticp && decl_context == TYPENAME
6791 && ANON_AGGR_TYPE_P (declspecs->type))
6792 decl_context = FIELD;
6794 /* Warn about storage classes that are invalid for certain
6795 kinds of declarations (parameters, typenames, etc.). */
6796 if (declspecs->multiple_storage_classes_p)
6797 error ("multiple storage classes in declaration of `%s'", name);
6800 && storage_class != sc_extern
6801 && storage_class != sc_static)
6802 || declspecs->specs[(int)ds_typedef]))
6804 error ("multiple storage classes in declaration of `%s'", name);
6807 else if (decl_context != NORMAL
6808 && ((storage_class != sc_none
6809 && storage_class != sc_mutable)
6812 if ((decl_context == PARM || decl_context == CATCHPARM)
6813 && (storage_class == sc_register
6814 || storage_class == sc_auto))
6816 else if (declspecs->specs[(int)ds_typedef])
6818 else if (decl_context == FIELD
6819 /* C++ allows static class elements. */
6820 && storage_class == sc_static)
6821 /* C++ also allows inlines and signed and unsigned elements,
6822 but in those cases we don't come in here. */
6826 if (decl_context == FIELD)
6828 tree tmp = NULL_TREE;
6833 /* Avoid trying to get an operand off an identifier node. */
6834 if (declarator->kind != cdk_id)
6835 tmp = declarator->declarator->u.id.name;
6837 tmp = declarator->u.id.name;
6838 op = IDENTIFIER_OPNAME_P (tmp);
6839 if (IDENTIFIER_TYPENAME_P (tmp))
6841 if (is_typename_at_global_scope (tmp))
6842 name = IDENTIFIER_POINTER (tmp);
6844 name = "<invalid operator>";
6847 error ("storage class specified for %s `%s'",
6848 op ? "member operator" : "field",
6853 if (decl_context == PARM || decl_context == CATCHPARM)
6854 error ("storage class specified for parameter `%s'", name);
6856 error ("storage class specified for typename");
6858 if (storage_class == sc_register
6859 || storage_class == sc_auto
6860 || storage_class == sc_extern
6862 storage_class = sc_none;
6865 else if (storage_class == sc_extern && initialized
6868 if (toplevel_bindings_p ())
6870 /* It's common practice (and completely valid) to have a const
6871 be initialized and declared extern. */
6872 if (!(type_quals & TYPE_QUAL_CONST))
6873 warning ("`%s' initialized and declared `extern'", name);
6876 error ("`%s' has both `extern' and initializer", name);
6878 else if (storage_class == sc_extern && funcdef_flag
6879 && ! toplevel_bindings_p ())
6880 error ("nested function `%s' declared `extern'", name);
6881 else if (toplevel_bindings_p ())
6883 if (storage_class == sc_auto)
6884 error ("top-level declaration of `%s' specifies `auto'", name);
6887 && storage_class != sc_extern
6888 && storage_class != sc_static)
6890 error ("function-scope `%s' implicitly auto and declared `__thread'",
6895 if (storage_class && friendp)
6896 error ("storage class specifiers invalid in friend function declarations");
6899 unqualified_id = NULL_TREE;
6902 unqualified_id = id_declarator->u.id.name;
6903 if (TREE_CODE (unqualified_id) == SCOPE_REF)
6904 unqualified_id = TREE_OPERAND (unqualified_id, 1);
6905 if (TREE_CODE (unqualified_id) == BASELINK)
6906 unqualified_id = BASELINK_FUNCTIONS (unqualified_id);
6907 switch (TREE_CODE (unqualified_id))
6911 = constructor_name (TREE_OPERAND (unqualified_id, 0));
6916 = constructor_name (TREE_TYPE (unqualified_id));
6919 case IDENTIFIER_NODE:
6920 case TEMPLATE_ID_EXPR:
6928 /* Determine the type of the entity declared by recurring on the
6931 declarator && declarator->kind != cdk_id;
6932 declarator = declarator->declarator)
6934 const cp_declarator *inner_declarator;
6937 if (type == error_mark_node)
6938 return error_mark_node;
6940 inner_declarator = declarator->declarator;
6942 attrs = declarator->attributes;
6948 if (declarator == NULL || declarator->kind == cdk_id)
6949 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
6950 if (declarator->kind == cdk_function)
6951 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
6952 if (declarator->kind == cdk_array)
6953 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
6954 returned_attrs = decl_attributes (&type,
6955 chainon (returned_attrs, attrs),
6959 switch (declarator->kind)
6962 type = create_array_type_for_decl (dname, type,
6963 declarator->u.array.bounds);
6964 if (inner_declarator
6965 && (inner_declarator->kind == cdk_pointer
6966 || inner_declarator->kind == cdk_reference
6967 || inner_declarator->kind == cdk_ptrmem))
6968 /* We can never complete an array type which is the
6969 target of a pointer, so go ahead and lay it out. */
6978 /* Declaring a function type.
6979 Make sure we have a valid type for the function to return. */
6981 /* We now know that the TYPE_QUALS don't apply to the
6982 decl, but to its return type. */
6983 type_quals = TYPE_UNQUALIFIED;
6985 /* Warn about some types functions can't return. */
6987 if (TREE_CODE (type) == FUNCTION_TYPE)
6989 error ("`%s' declared as function returning a function", name);
6990 type = integer_type_node;
6992 if (TREE_CODE (type) == ARRAY_TYPE)
6994 error ("`%s' declared as function returning an array", name);
6995 type = integer_type_node;
6998 /* Pick up type qualifiers which should be applied to `this'. */
6999 quals = declarator->u.function.qualifiers;
7001 /* Pick up the exception specifications. */
7002 raises = declarator->u.function.exception_specification;
7004 /* Say it's a definition only for the CALL_EXPR
7005 closest to the identifier. */
7006 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7008 if (ctype == NULL_TREE
7009 && decl_context == FIELD
7011 && (friendp == 0 || dname == current_class_name))
7012 ctype = current_class_type;
7014 if (ctype && sfk == sfk_conversion)
7015 TYPE_HAS_CONVERSION (ctype) = 1;
7016 if (ctype && (sfk == sfk_constructor
7017 || sfk == sfk_destructor))
7019 /* We are within a class's scope. If our declarator name
7020 is the same as the class name, and we are defining
7021 a function, then it is a constructor/destructor, and
7022 therefore returns a void type. */
7024 if (flags == DTOR_FLAG)
7026 /* ISO C++ 12.4/2. A destructor may not be
7027 declared const or volatile. A destructor may
7030 error ("destructor cannot be static member function");
7033 error ("destructors may not be cv-qualified");
7034 quals = TYPE_UNQUALIFIED;
7036 if (decl_context == FIELD)
7038 if (! member_function_or_else (ctype,
7041 return void_type_node;
7044 else /* It's a constructor. */
7048 /* ISO C++ 12.1. A constructor may not be
7049 declared const or volatile. A constructor may
7050 not be virtual. A constructor may not be
7053 error ("constructor cannot be static member function");
7056 pedwarn ("constructors cannot be declared virtual");
7061 error ("constructors may not be cv-qualified");
7062 quals = TYPE_UNQUALIFIED;
7064 if (decl_context == FIELD)
7066 if (! member_function_or_else (ctype,
7069 return void_type_node;
7070 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7071 if (sfk != sfk_constructor)
7075 if (decl_context == FIELD)
7081 error ("can't initialize friend function `%s'", name);
7084 /* Cannot be both friend and virtual. */
7085 error ("virtual functions cannot be friends");
7088 if (decl_context == NORMAL)
7089 error ("friend declaration not in class definition");
7090 if (current_function_decl && funcdef_flag)
7091 error ("can't define friend function `%s' in a local class definition",
7095 arg_types = grokparms (declarator->u.function.parameters,
7098 if (inner_declarator
7099 && inner_declarator->kind == cdk_id
7100 && inner_declarator->u.id.sfk == sfk_destructor
7101 && arg_types != void_list_node)
7103 error ("destructors may not have parameters");
7104 arg_types = void_list_node;
7108 type = build_function_type (type, arg_types);
7115 /* Filter out pointers-to-references and references-to-references.
7116 We can get these if a TYPE_DECL is used. */
7118 if (TREE_CODE (type) == REFERENCE_TYPE)
7120 error (declarator->kind == cdk_reference
7121 ? "cannot declare reference to `%#T'"
7122 : "cannot declare pointer to `%#T'", type);
7123 type = TREE_TYPE (type);
7125 else if (VOID_TYPE_P (type))
7127 if (declarator->kind == cdk_reference)
7128 error ("cannot declare reference to `%#T'", type);
7129 else if (declarator->kind == cdk_ptrmem)
7130 error ("cannot declare pointer to `%#T' member", type);
7133 /* We now know that the TYPE_QUALS don't apply to the decl,
7134 but to the target of the pointer. */
7135 type_quals = TYPE_UNQUALIFIED;
7137 if (declarator->kind == cdk_ptrmem
7138 && (TREE_CODE (type) == FUNCTION_TYPE
7139 || (quals && TREE_CODE (type) == METHOD_TYPE)))
7141 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7142 grok_method_quals (declarator->u.pointer.class_type,
7144 type = TREE_TYPE (dummy);
7145 quals = TYPE_UNQUALIFIED;
7148 if (declarator->kind == cdk_reference)
7150 if (!VOID_TYPE_P (type))
7151 type = build_reference_type (type);
7153 else if (TREE_CODE (type) == METHOD_TYPE)
7154 type = build_ptrmemfunc_type (build_pointer_type (type));
7155 else if (declarator->kind == cdk_ptrmem)
7156 type = build_ptrmem_type (declarator->u.pointer.class_type,
7159 type = build_pointer_type (type);
7161 /* Process a list of type modifier keywords (such as
7162 const or volatile) that were given inside the `*' or `&'. */
7164 if (declarator->u.pointer.qualifiers)
7167 = cp_build_qualified_type (type,
7168 declarator->u.pointer.qualifiers);
7169 type_quals = cp_type_quals (type);
7182 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7183 && TREE_CODE (type) != FUNCTION_TYPE
7184 && TREE_CODE (type) != METHOD_TYPE)
7186 error ("template-id `%D' used as a declarator",
7188 unqualified_id = dname;
7191 /* If DECLARATOR is non-NULL, we know it is a cdk_id declarator;
7192 otherwise, we would not have exited the loop above. */
7194 && TREE_CODE (declarator->u.id.name) == SCOPE_REF
7195 /* If the qualifying scope was invalid, it will have been set to
7197 && TREE_OPERAND (declarator->u.id.name, 0)
7198 && TYPE_P (TREE_OPERAND (declarator->u.id.name, 0)))
7202 ctype = TREE_OPERAND (declarator->u.id.name, 0);
7204 ctype = TYPE_MAIN_VARIANT (ctype);
7206 while (t != NULL_TREE && CLASS_TYPE_P (t))
7208 /* You're supposed to have one `template <...>' for every
7209 template class, but you don't need one for a full
7210 specialization. For example:
7212 template <class T> struct S{};
7213 template <> struct S<int> { void f(); };
7214 void S<int>::f () {}
7216 is correct; there shouldn't be a `template <>' for the
7217 definition of `S<int>::f'. */
7218 if (CLASSTYPE_TEMPLATE_INFO (t)
7219 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7220 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7221 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7222 template_count += 1;
7224 t = TYPE_MAIN_DECL (t);
7225 t = DECL_CONTEXT (t);
7228 if (ctype == current_class_type)
7234 Is this ill-formed? */
7237 pedwarn ("extra qualification `%T::' on member `%s' ignored",
7240 else if (TREE_CODE (type) == FUNCTION_TYPE)
7242 tree sname = TREE_OPERAND (declarator->u.id.name, 1);
7244 if (TREE_CODE (sname) == IDENTIFIER_NODE
7245 && NEW_DELETE_OPNAME_P (sname))
7246 /* Overloaded operator new and operator delete
7247 are always static functions. */
7249 else if (current_class_type == NULL_TREE || friendp)
7251 = build_method_type_directly (ctype,
7253 TYPE_ARG_TYPES (type));
7256 error ("cannot declare member function `%T::%s' within `%T'",
7257 ctype, name, current_class_type);
7258 return error_mark_node;
7261 else if (declspecs->specs[(int)ds_typedef]
7262 || COMPLETE_TYPE_P (complete_type (ctype)))
7264 /* Have to move this code elsewhere in this function.
7265 this code is used for i.e., typedef int A::M; M *pm;
7267 It is? How? jason 10/2/94 */
7269 if (current_class_type)
7271 error ("cannot declare member `%T::%s' within `%T'",
7272 ctype, name, current_class_type);
7273 return void_type_node;
7278 cxx_incomplete_type_error (NULL_TREE, ctype);
7279 return error_mark_node;
7286 *attrlist = chainon (returned_attrs, *attrlist);
7288 attrlist = &returned_attrs;
7291 /* Now TYPE has the actual type. */
7293 /* Did array size calculations overflow? */
7295 if (TREE_CODE (type) == ARRAY_TYPE
7296 && COMPLETE_TYPE_P (type)
7297 && TREE_OVERFLOW (TYPE_SIZE (type)))
7299 error ("size of array `%s' is too large", name);
7300 /* If we proceed with the array type as it is, we'll eventually
7301 crash in tree_low_cst(). */
7302 type = error_mark_node;
7305 if ((decl_context == FIELD || decl_context == PARM)
7306 && !processing_template_decl
7307 && variably_modified_type_p (type, NULL_TREE))
7309 if (decl_context == FIELD)
7310 error ("data member may not have variably modified type `%T'", type);
7312 error ("parameter may not have variably modified type `%T'", type);
7313 type = error_mark_node;
7316 if (explicitp == 1 || (explicitp && friendp))
7318 /* [dcl.fct.spec] The explicit specifier shall only be used in
7319 declarations of constructors within a class definition. */
7320 error ("only declarations of constructors can be `explicit'");
7324 if (storage_class == sc_mutable)
7326 if (decl_context != FIELD || friendp)
7328 error ("non-member `%s' cannot be declared `mutable'", name);
7329 storage_class = sc_none;
7331 else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7333 error ("non-object member `%s' cannot be declared `mutable'", name);
7334 storage_class = sc_none;
7336 else if (TREE_CODE (type) == FUNCTION_TYPE
7337 || TREE_CODE (type) == METHOD_TYPE)
7339 error ("function `%s' cannot be declared `mutable'", name);
7340 storage_class = sc_none;
7344 error ("static `%s' cannot be declared `mutable'", name);
7345 storage_class = sc_none;
7347 else if (type_quals & TYPE_QUAL_CONST)
7349 error ("const `%s' cannot be declared `mutable'", name);
7350 storage_class = sc_none;
7354 /* If this is declaring a typedef name, return a TYPE_DECL. */
7355 if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7359 /* Note that the grammar rejects storage classes
7360 in typenames, fields or parameters. */
7361 if (current_lang_name == lang_name_java)
7362 TYPE_FOR_JAVA (type) = 1;
7364 if (decl_context == FIELD)
7366 if (constructor_name_p (unqualified_id, current_class_type))
7367 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
7369 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7373 decl = build_decl (TYPE_DECL, unqualified_id, type);
7374 if (in_namespace || ctype)
7375 error ("%Jtypedef name may not be a nested-name-specifier", decl);
7376 if (!current_function_decl)
7377 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7380 /* If the user declares "typedef struct {...} foo" then the
7381 struct will have an anonymous name. Fill that name in now.
7382 Nothing can refer to it, so nothing needs know about the name
7384 if (type != error_mark_node
7387 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7388 && TYPE_ANONYMOUS_P (type)
7389 /* Don't do this if there are attributes. */
7390 && (!attrlist || !*attrlist)
7391 && cp_type_quals (type) == TYPE_UNQUALIFIED)
7393 tree oldname = TYPE_NAME (type);
7396 /* Replace the anonymous name with the real name everywhere. */
7397 lookup_tag_reverse (type, unqualified_id);
7398 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7399 if (TYPE_NAME (t) == oldname)
7400 TYPE_NAME (t) = decl;
7402 if (TYPE_LANG_SPECIFIC (type))
7403 TYPE_WAS_ANONYMOUS (type) = 1;
7405 /* If this is a typedef within a template class, the nested
7406 type is a (non-primary) template. The name for the
7407 template needs updating as well. */
7408 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7409 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7410 = TYPE_IDENTIFIER (type);
7412 /* FIXME remangle member functions; member functions of a
7413 type with external linkage have external linkage. */
7418 if (ctype == NULL_TREE)
7420 if (TREE_CODE (type) != METHOD_TYPE)
7421 error ("%Jinvalid type qualifier for non-member function type",
7424 ctype = TYPE_METHOD_BASETYPE (type);
7426 if (ctype != NULL_TREE)
7427 grok_method_quals (ctype, decl, quals);
7431 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7432 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7434 bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7435 inlinep, friendp, raises != NULL_TREE);
7440 /* Detect the case of an array type of unspecified size
7441 which came, as such, direct from a typedef name.
7442 We must copy the type, so that the array's domain can be
7443 individually set by the object's initializer. */
7445 if (type && typedef_type
7446 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7447 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7448 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7450 /* Detect where we're using a typedef of function type to declare a
7451 function. PARMS will not be set, so we must create it now. */
7453 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7455 tree decls = NULL_TREE;
7458 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7460 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7462 TREE_CHAIN (decl) = decls;
7466 parms = nreverse (decls);
7469 /* If this is a type name (such as, in a cast or sizeof),
7470 compute the type and return it now. */
7472 if (decl_context == TYPENAME)
7474 /* Note that the grammar rejects storage classes
7475 in typenames, fields or parameters. */
7476 if (type_quals != TYPE_UNQUALIFIED)
7477 type_quals = TYPE_UNQUALIFIED;
7479 /* Special case: "friend class foo" looks like a TYPENAME context. */
7482 if (type_quals != TYPE_UNQUALIFIED)
7484 error ("type qualifiers specified for friend class declaration");
7485 type_quals = TYPE_UNQUALIFIED;
7489 error ("`inline' specified for friend class declaration");
7495 /* Don't allow friend declaration without a class-key. */
7496 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7497 pedwarn ("template parameters cannot be friends");
7498 else if (TREE_CODE (type) == TYPENAME_TYPE)
7499 pedwarn ("friend declaration requires class-key, "
7500 "i.e. `friend class %T::%D'",
7501 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7503 pedwarn ("friend declaration requires class-key, "
7504 "i.e. `friend %#T'",
7508 /* Only try to do this stuff if we didn't already give up. */
7509 if (type != integer_type_node)
7511 /* A friendly class? */
7512 if (current_class_type)
7513 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7516 error ("trying to make class `%T' a friend of global scope",
7519 type = void_type_node;
7524 if (ctype == NULL_TREE)
7526 if (TREE_CODE (type) != METHOD_TYPE)
7527 error ("invalid qualifiers on non-member function type");
7529 ctype = TYPE_METHOD_BASETYPE (type);
7533 tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
7534 grok_method_quals (ctype, dummy, quals);
7535 type = TREE_TYPE (dummy);
7541 else if (unqualified_id == NULL_TREE && decl_context != PARM
7542 && decl_context != CATCHPARM
7543 && TREE_CODE (type) != UNION_TYPE
7546 error ("abstract declarator `%T' used as declaration", type);
7547 unqualified_id = make_anon_name ();
7550 /* `void' at top level (not within pointer)
7551 is allowed only in typedefs or type names.
7552 We don't complain about parms either, but that is because
7553 a better error message can be made later. */
7555 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
7557 if (! unqualified_id)
7558 error ("unnamed variable or field declared void");
7559 else if (TREE_CODE (unqualified_id) == IDENTIFIER_NODE)
7561 if (IDENTIFIER_OPNAME_P (unqualified_id))
7564 error ("variable or field `%s' declared void", name);
7567 error ("variable or field declared void");
7568 type = integer_type_node;
7571 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7572 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
7574 if (decl_context == PARM || decl_context == CATCHPARM)
7576 if (ctype || in_namespace)
7577 error ("cannot use `::' in parameter declaration");
7579 /* A parameter declared as an array of T is really a pointer to T.
7580 One declared as a function is really a pointer to a function.
7581 One declared as a member is really a pointer to member. */
7583 if (TREE_CODE (type) == ARRAY_TYPE)
7585 /* Transfer const-ness of array into that of type pointed to. */
7586 type = build_pointer_type (TREE_TYPE (type));
7587 type_quals = TYPE_UNQUALIFIED;
7589 else if (TREE_CODE (type) == FUNCTION_TYPE)
7590 type = build_pointer_type (type);
7596 if (decl_context == PARM)
7598 decl = cp_build_parm_decl (unqualified_id, type);
7600 bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
7601 inlinep, friendp, raises != NULL_TREE);
7603 else if (decl_context == FIELD)
7605 /* The C99 flexible array extension. */
7606 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
7607 && TYPE_DOMAIN (type) == NULL_TREE)
7609 tree itype = compute_array_index_type (dname, integer_zero_node);
7610 type = build_cplus_array_type (TREE_TYPE (type), itype);
7613 if (type == error_mark_node)
7615 /* Happens when declaring arrays of sizes which
7616 are error_mark_node, for example. */
7619 else if (in_namespace && !friendp)
7621 /* Something like struct S { int N::j; }; */
7622 error ("invalid use of `::'");
7625 else if (TREE_CODE (type) == FUNCTION_TYPE)
7628 tree function_context;
7630 /* We catch the others as conflicts with the builtin
7632 if (friendp && unqualified_id == ridpointers[(int) RID_SIGNED])
7634 error ("function `%D' cannot be declared friend",
7641 if (ctype == NULL_TREE)
7642 ctype = current_class_type;
7644 if (ctype == NULL_TREE)
7646 error ("can't make `%D' into a method -- not in a class",
7648 return void_type_node;
7651 /* ``A union may [ ... ] not [ have ] virtual functions.''
7653 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
7655 error ("function `%D' declared virtual inside a union",
7657 return void_type_node;
7660 if (NEW_DELETE_OPNAME_P (unqualified_id))
7664 error ("`%D' cannot be declared virtual, since it is always static",
7669 else if (staticp < 2)
7670 type = build_method_type_directly (ctype,
7672 TYPE_ARG_TYPES (type));
7675 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
7676 function_context = (ctype != NULL_TREE) ?
7677 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
7678 publicp = (! friendp || ! staticp)
7679 && function_context == NULL_TREE;
7680 decl = grokfndecl (ctype, type,
7681 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7682 ? unqualified_id : dname,
7685 virtualp, flags, quals, raises,
7686 friendp ? -1 : 0, friendp, publicp, inlinep,
7687 funcdef_flag, template_count, in_namespace);
7688 if (decl == NULL_TREE)
7691 /* This clobbers the attrs stored in `decl' from `attrlist'. */
7692 /* The decl and setting of decl_attr is also turned off. */
7693 decl = build_decl_attribute_variant (decl, decl_attr);
7696 /* [class.conv.ctor]
7698 A constructor declared without the function-specifier
7699 explicit that can be called with a single parameter
7700 specifies a conversion from the type of its first
7701 parameter to the type of its class. Such a constructor
7702 is called a converting constructor. */
7704 DECL_NONCONVERTING_P (decl) = 1;
7705 else if (DECL_CONSTRUCTOR_P (decl))
7707 /* The constructor can be called with exactly one
7708 parameter if there is at least one parameter, and
7709 any subsequent parameters have default arguments.
7710 Ignore any compiler-added parms. */
7711 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
7713 if (arg_types == void_list_node
7715 && TREE_CHAIN (arg_types)
7716 && TREE_CHAIN (arg_types) != void_list_node
7717 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
7718 DECL_NONCONVERTING_P (decl) = 1;
7721 else if (TREE_CODE (type) == METHOD_TYPE)
7723 /* We only get here for friend declarations of
7724 members of other classes. */
7725 /* All method decls are public, so tell grokfndecl to set
7726 TREE_PUBLIC, also. */
7727 decl = grokfndecl (ctype, type,
7728 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
7729 ? unqualified_id : dname,
7732 virtualp, flags, quals, raises,
7733 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
7734 template_count, in_namespace);
7735 if (decl == NULL_TREE)
7738 else if (!staticp && !dependent_type_p (type)
7739 && !COMPLETE_TYPE_P (complete_type (type))
7740 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
7743 error ("field `%D' has incomplete type", unqualified_id);
7745 error ("name `%T' has incomplete type", type);
7747 /* If we're instantiating a template, tell them which
7748 instantiation made the field's type be incomplete. */
7749 if (current_class_type
7750 && TYPE_NAME (current_class_type)
7751 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
7753 && declspecs->type == type)
7754 error (" in instantiation of template `%T'",
7755 current_class_type);
7757 type = error_mark_node;
7764 error ("`%E' is neither function nor member function; "
7765 "cannot be declared friend", unqualified_id);
7773 /* Friends are treated specially. */
7774 if (ctype == current_class_type)
7775 warning ("member functions are implicitly friends of their class");
7776 else if (decl && DECL_NAME (decl))
7778 if (template_class_depth (current_class_type) == 0)
7780 decl = check_explicit_specialization
7781 (unqualified_id, decl, template_count,
7782 2 * (funcdef_flag != 0) + 4);
7783 if (decl == error_mark_node)
7784 return error_mark_node;
7787 decl = do_friend (ctype, unqualified_id, decl,
7788 *attrlist, flags, quals, funcdef_flag);
7792 return void_type_node;
7795 /* Structure field. It may not be a function, except for C++. */
7797 if (decl == NULL_TREE)
7803 /* An attempt is being made to initialize a non-static
7804 member. But, from [class.mem]:
7806 4 A member-declarator can contain a
7807 constant-initializer only if it declares a static
7808 member (_class.static_) of integral or enumeration
7809 type, see _class.static.data_.
7811 This used to be relatively common practice, but
7812 the rest of the compiler does not correctly
7813 handle the initialization unless the member is
7814 static so we make it static below. */
7815 pedwarn ("ISO C++ forbids initialization of member `%D'",
7817 pedwarn ("making `%D' static", unqualified_id);
7821 if (uses_template_parms (type))
7822 /* We'll check at instantiation time. */
7824 else if (check_static_variable_definition (unqualified_id,
7826 /* If we just return the declaration, crashes
7827 will sometimes occur. We therefore return
7828 void_type_node, as if this was a friend
7829 declaration, to cause callers to completely
7830 ignore this declaration. */
7831 return void_type_node;
7836 /* C++ allows static class members. All other work
7837 for this is done by grokfield. */
7838 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
7839 TREE_STATIC (decl) = 1;
7840 /* In class context, 'static' means public access. */
7841 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
7845 decl = build_decl (FIELD_DECL, unqualified_id, type);
7846 DECL_NONADDRESSABLE_P (decl) = bitfield;
7847 if (storage_class == sc_mutable)
7849 DECL_MUTABLE_P (decl) = 1;
7850 storage_class = sc_none;
7854 bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
7855 inlinep, friendp, raises != NULL_TREE);
7858 else if (TREE_CODE (type) == FUNCTION_TYPE
7859 || TREE_CODE (type) == METHOD_TYPE)
7864 if (!unqualified_id)
7867 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
7868 original_name = dname;
7870 original_name = unqualified_id;
7872 if (storage_class == sc_auto)
7873 error ("storage class `auto' invalid for function `%s'", name);
7874 else if (storage_class == sc_register)
7875 error ("storage class `register' invalid for function `%s'", name);
7877 error ("storage class `__thread' invalid for function `%s'", name);
7879 /* Function declaration not at top level.
7880 Storage classes other than `extern' are not allowed
7881 and `extern' makes no difference. */
7882 if (! toplevel_bindings_p ()
7883 && (storage_class == sc_static
7884 || declspecs->specs[(int)ds_inline])
7887 if (storage_class == sc_static)
7888 pedwarn ("`static' specified invalid for function `%s' declared out of global scope", name);
7890 pedwarn ("`inline' specifier invalid for function `%s' declared out of global scope", name);
7893 if (ctype == NULL_TREE)
7897 error ("virtual non-class function `%s'", name);
7901 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
7902 && !NEW_DELETE_OPNAME_P (original_name))
7903 type = build_method_type_directly (ctype,
7905 TYPE_ARG_TYPES (type));
7907 /* Record presence of `static'. */
7908 publicp = (ctype != NULL_TREE
7909 || storage_class == sc_extern
7910 || storage_class != sc_static);
7912 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
7913 virtualp, flags, quals, raises,
7915 publicp, inlinep, funcdef_flag,
7916 template_count, in_namespace);
7917 if (decl == NULL_TREE)
7922 int invalid_static = 0;
7924 /* Don't allow a static member function in a class, and forbid
7925 declaring main to be static. */
7926 if (TREE_CODE (type) == METHOD_TYPE)
7928 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
7931 else if (current_function_decl)
7933 /* FIXME need arm citation */
7934 error ("cannot declare static function inside another function");
7941 storage_class = sc_none;
7947 /* It's a variable. */
7949 /* An uninitialized decl with `extern' is a reference. */
7950 decl = grokvardecl (type, unqualified_id,
7953 (type_quals & TYPE_QUAL_CONST) != 0,
7954 ctype ? ctype : in_namespace);
7955 bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
7956 inlinep, friendp, raises != NULL_TREE);
7960 DECL_CONTEXT (decl) = ctype;
7963 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
7965 storage_class = sc_none;
7967 if (storage_class == sc_register && TREE_STATIC (decl))
7969 error ("static member `%D' declared `register'", decl);
7970 storage_class = sc_none;
7972 if (storage_class == sc_extern && pedantic)
7974 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
7976 storage_class = sc_none;
7981 /* Record `register' declaration for warnings on &
7982 and in case doing stupid register allocation. */
7984 if (storage_class == sc_register)
7985 DECL_REGISTER (decl) = 1;
7986 else if (storage_class == sc_extern)
7987 DECL_THIS_EXTERN (decl) = 1;
7988 else if (storage_class == sc_static)
7989 DECL_THIS_STATIC (decl) = 1;
7991 /* Record constancy and volatility. There's no need to do this
7992 when processing a template; we'll do this for the instantiated
7993 declaration based on the type of DECL. */
7994 if (!processing_template_decl)
7995 c_apply_type_quals_to_decl (type_quals, decl);
8001 /* Subroutine of start_function. Ensure that each of the parameter
8002 types (as listed in PARMS) is complete, as is required for a
8003 function definition. */
8006 require_complete_types_for_parms (tree parms)
8008 for (; parms; parms = TREE_CHAIN (parms))
8010 if (VOID_TYPE_P (TREE_TYPE (parms)))
8011 /* grokparms will have already issued an error. */
8012 TREE_TYPE (parms) = error_mark_node;
8013 else if (complete_type_or_else (TREE_TYPE (parms), parms))
8015 layout_decl (parms, 0);
8016 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8021 /* Returns nonzero if T is a local variable. */
8024 local_variable_p (tree t)
8026 if ((TREE_CODE (t) == VAR_DECL
8027 /* A VAR_DECL with a context that is a _TYPE is a static data
8029 && !TYPE_P (CP_DECL_CONTEXT (t))
8030 /* Any other non-local variable must be at namespace scope. */
8031 && !DECL_NAMESPACE_SCOPE_P (t))
8032 || (TREE_CODE (t) == PARM_DECL))
8038 /* Returns nonzero if T is an automatic local variable or a label.
8039 (These are the declarations that need to be remapped when the code
8040 containing them is duplicated.) */
8043 nonstatic_local_decl_p (tree t)
8045 return ((local_variable_p (t) && !TREE_STATIC (t))
8046 || TREE_CODE (t) == LABEL_DECL
8047 || TREE_CODE (t) == RESULT_DECL);
8050 /* Like local_variable_p, but suitable for use as a tree-walking
8054 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8055 void *data ATTRIBUTE_UNUSED)
8057 if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8059 else if (TYPE_P (*tp))
8066 /* Check that ARG, which is a default-argument expression for a
8067 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
8068 something goes wrong. DECL may also be a _TYPE node, rather than a
8069 DECL, if there is no DECL available. */
8072 check_default_argument (tree decl, tree arg)
8077 if (TREE_CODE (arg) == DEFAULT_ARG)
8078 /* We get a DEFAULT_ARG when looking at an in-class declaration
8079 with a default argument. Ignore the argument for now; we'll
8080 deal with it after the class is complete. */
8083 if (processing_template_decl || uses_template_parms (arg))
8084 /* We don't do anything checking until instantiation-time. Note
8085 that there may be uninstantiated arguments even for an
8086 instantiated function, since default arguments are not
8087 instantiated until they are needed. */
8096 decl_type = TREE_TYPE (decl);
8098 if (arg == error_mark_node
8099 || decl == error_mark_node
8100 || TREE_TYPE (arg) == error_mark_node
8101 || decl_type == error_mark_node)
8102 /* Something already went wrong. There's no need to check
8104 return error_mark_node;
8106 /* [dcl.fct.default]
8108 A default argument expression is implicitly converted to the
8110 if (!TREE_TYPE (arg)
8111 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8114 error ("default argument for `%#D' has type `%T'",
8115 decl, TREE_TYPE (arg));
8117 error ("default argument for parameter of type `%T' has type `%T'",
8118 decl_type, TREE_TYPE (arg));
8120 return error_mark_node;
8123 /* [dcl.fct.default]
8125 Local variables shall not be used in default argument
8128 The keyword `this' shall not be used in a default argument of a
8130 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8134 error ("default argument `%E' uses local variable `%D'",
8136 return error_mark_node;
8143 /* Decode the list of parameter types for a function type.
8144 Given the list of things declared inside the parens,
8145 return a list of types.
8147 If this parameter does not end with an ellipsis, we append
8150 *PARMS is set to the chain of PARM_DECLs created. */
8153 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8155 tree result = NULL_TREE;
8156 tree decls = NULL_TREE;
8157 int ellipsis = !first_parm || first_parm->ellipsis_p;
8158 cp_parameter_declarator *parm;
8161 for (parm = first_parm; parm != NULL; parm = parm->next)
8163 tree type = NULL_TREE;
8164 tree init = parm->default_argument;
8168 if (parm == no_parameters)
8171 attrs = parm->decl_specifiers.attributes;
8172 parm->decl_specifiers.attributes = NULL_TREE;
8173 decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8174 PARM, init != NULL_TREE, &attrs);
8175 if (! decl || TREE_TYPE (decl) == error_mark_node)
8179 cplus_decl_attributes (&decl, attrs, 0);
8181 type = TREE_TYPE (decl);
8182 if (VOID_TYPE_P (type))
8184 if (same_type_p (type, void_type_node)
8185 && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8186 /* this is a parmlist of `(void)', which is ok. */
8188 cxx_incomplete_type_error (decl, type);
8189 /* It's not a good idea to actually create parameters of
8190 type `void'; other parts of the compiler assume that a
8191 void type terminates the parameter list. */
8192 type = error_mark_node;
8193 TREE_TYPE (decl) = error_mark_node;
8196 if (type != error_mark_node)
8198 /* Top-level qualifiers on the parameters are
8199 ignored for function types. */
8200 type = cp_build_qualified_type (type, 0);
8201 if (TREE_CODE (type) == METHOD_TYPE)
8203 error ("parameter `%D' invalidly declared method type", decl);
8204 type = build_pointer_type (type);
8205 TREE_TYPE (decl) = type;
8207 else if (abstract_virtuals_error (decl, type))
8208 any_error = 1; /* Seems like a good idea. */
8209 else if (POINTER_TYPE_P (type))
8211 /* [dcl.fct]/6, parameter types cannot contain pointers
8212 (references) to arrays of unknown bound. */
8213 tree t = TREE_TYPE (type);
8214 int ptr = TYPE_PTR_P (type);
8220 else if (TREE_CODE (t) != ARRAY_TYPE)
8222 else if (!TYPE_DOMAIN (t))
8226 if (TREE_CODE (t) == ARRAY_TYPE)
8227 error ("parameter `%D' includes %s to array of unknown bound `%T'",
8228 decl, ptr ? "pointer" : "reference", t);
8231 if (!any_error && init)
8232 init = check_default_argument (decl, init);
8237 TREE_CHAIN (decl) = decls;
8239 result = tree_cons (init, type, result);
8241 decls = nreverse (decls);
8242 result = nreverse (result);
8244 result = chainon (result, void_list_node);
8251 /* D is a constructor or overloaded `operator='.
8253 Let T be the class in which D is declared. Then, this function
8256 -1 if D's is an ill-formed constructor or copy assignment operator
8257 whose first parameter is of type `T'.
8258 0 if D is not a copy constructor or copy assignment
8260 1 if D is a copy constructor or copy assignment operator whose
8261 first parameter is a reference to const qualified T.
8262 2 if D is a copy constructor or copy assignment operator whose
8263 first parameter is a reference to non-const qualified T.
8265 This function can be used as a predicate. Positive values indicate
8266 a copy constructor and nonzero values indicate a copy assignment
8276 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
8278 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
8279 /* Instantiations of template member functions are never copy
8280 functions. Note that member functions of templated classes are
8281 represented as template functions internally, and we must
8282 accept those as copy functions. */
8285 args = FUNCTION_FIRST_USER_PARMTYPE (d);
8289 arg_type = TREE_VALUE (args);
8291 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8293 /* Pass by value copy assignment operator. */
8296 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8297 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8299 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8305 args = TREE_CHAIN (args);
8307 if (args && args != void_list_node && !TREE_PURPOSE (args))
8308 /* There are more non-optional args. */
8314 /* Remember any special properties of member function DECL. */
8316 void grok_special_member_properties (tree decl)
8318 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8319 ; /* Not special. */
8320 else if (DECL_CONSTRUCTOR_P (decl))
8322 int ctor = copy_fn_p (decl);
8328 A non-template constructor for class X is a copy
8329 constructor if its first parameter is of type X&, const
8330 X&, volatile X& or const volatile X&, and either there
8331 are no other parameters or else all other parameters have
8332 default arguments. */
8333 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8335 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8337 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8338 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8340 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8344 A non-template assignment operator for class X is a copy
8345 assignment operator if its parameter is of type X, X&, const
8346 X&, volatile X& or const volatile X&. */
8348 int assop = copy_fn_p (decl);
8352 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8354 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8355 if (DECL_PURE_VIRTUAL_P (decl))
8356 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8361 /* Check a constructor DECL has the correct form. Complains
8362 if the class has a constructor of the form X(X). */
8365 grok_ctor_properties (tree ctype, tree decl)
8367 int ctor_parm = copy_fn_p (decl);
8373 A declaration of a constructor for a class X is ill-formed if
8374 its first parameter is of type (optionally cv-qualified) X
8375 and either there are no other parameters or else all other
8376 parameters have default arguments.
8378 We *don't* complain about member template instantiations that
8379 have this form, though; they can occur as we try to decide
8380 what constructor to use during overload resolution. Since
8381 overload resolution will never prefer such a constructor to
8382 the non-template copy constructor (which is either explicitly
8383 or implicitly defined), there's no need to worry about their
8384 existence. Theoretically, they should never even be
8385 instantiated, but that's hard to forestall. */
8386 error ("invalid constructor; you probably meant `%T (const %T&)'",
8394 /* An operator with this code is unary, but can also be binary. */
8397 ambi_op_p (enum tree_code code)
8399 return (code == INDIRECT_REF
8400 || code == ADDR_EXPR
8401 || code == CONVERT_EXPR
8402 || code == NEGATE_EXPR
8403 || code == PREINCREMENT_EXPR
8404 || code == PREDECREMENT_EXPR);
8407 /* An operator with this name can only be unary. */
8410 unary_op_p (enum tree_code code)
8412 return (code == TRUTH_NOT_EXPR
8413 || code == BIT_NOT_EXPR
8414 || code == COMPONENT_REF
8415 || code == TYPE_EXPR);
8418 /* DECL is a declaration for an overloaded operator. Returns true if
8419 the declaration is valid; false otherwise. If COMPLAIN is true,
8420 errors are issued for invalid declarations. */
8423 grok_op_properties (tree decl, int friendp, bool complain)
8425 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8427 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8428 tree name = DECL_NAME (decl);
8429 enum tree_code operator_code;
8433 /* Assume that the declaration is valid. */
8436 /* Count the number of arguments. */
8437 for (argtype = argtypes, arity = 0;
8438 argtype && argtype != void_list_node;
8439 argtype = TREE_CHAIN (argtype))
8442 if (current_class_type == NULL_TREE)
8445 if (DECL_CONV_FN_P (decl))
8446 operator_code = TYPE_EXPR;
8450 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
8451 if (ansi_opname (CODE) == name) \
8453 operator_code = (CODE); \
8456 else if (ansi_assopname (CODE) == name) \
8458 operator_code = (CODE); \
8459 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
8463 #include "operators.def"
8469 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
8470 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8474 switch (operator_code)
8477 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8481 TYPE_GETS_DELETE (current_class_type) |= 1;
8485 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8488 case VEC_DELETE_EXPR:
8489 TYPE_GETS_DELETE (current_class_type) |= 2;
8497 /* [basic.std.dynamic.allocation]/1:
8499 A program is ill-formed if an allocation function is declared
8500 in a namespace scope other than global scope or declared static
8503 The same also holds true for deallocation functions. */
8504 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
8505 || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8507 if (DECL_NAMESPACE_SCOPE_P (decl))
8509 if (CP_DECL_CONTEXT (decl) != global_namespace)
8510 error ("`%D' may not be declared within a namespace", decl);
8511 else if (!TREE_PUBLIC (decl))
8512 error ("`%D' may not be declared as static", decl);
8516 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8517 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8518 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8519 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8522 /* An operator function must either be a non-static member function
8523 or have at least one parameter of a class, a reference to a class,
8524 an enumeration, or a reference to an enumeration. 13.4.0.6 */
8525 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8527 if (operator_code == TYPE_EXPR
8528 || operator_code == CALL_EXPR
8529 || operator_code == COMPONENT_REF
8530 || operator_code == ARRAY_REF
8531 || operator_code == NOP_EXPR)
8532 error ("`%D' must be a nonstatic member function", decl);
8537 if (DECL_STATIC_FUNCTION_P (decl))
8538 error ("`%D' must be either a non-static member function or a non-member function", decl);
8540 for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8542 tree arg = non_reference (TREE_VALUE (p));
8543 /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8544 because these checks are performed even on
8545 template functions. */
8546 if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8550 if (!p || p == void_list_node)
8555 error ("`%D' must have an argument of class or "
8563 /* There are no restrictions on the arguments to an overloaded
8565 if (operator_code == CALL_EXPR)
8568 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
8570 tree t = TREE_TYPE (name);
8573 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8574 const char *what = 0;
8577 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8579 if (TREE_CODE (t) == VOID_TYPE)
8581 else if (t == current_class_type)
8582 what = "the same type";
8583 /* Don't force t to be complete here. */
8584 else if (IS_AGGR_TYPE (t)
8585 && COMPLETE_TYPE_P (t)
8586 && DERIVED_FROM_P (t, current_class_type))
8587 what = "a base class";
8589 if (what && warn_conversion)
8590 warning ("conversion to %s%s will never use a type conversion operator",
8591 ref ? "a reference to " : "", what);
8594 if (operator_code == COND_EXPR)
8597 error ("ISO C++ prohibits overloading operator ?:");
8599 else if (ambi_op_p (operator_code))
8602 /* We pick the one-argument operator codes by default, so
8603 we don't have to change anything. */
8605 else if (arity == 2)
8607 /* If we thought this was a unary operator, we now know
8608 it to be a binary operator. */
8609 switch (operator_code)
8612 operator_code = MULT_EXPR;
8616 operator_code = BIT_AND_EXPR;
8620 operator_code = PLUS_EXPR;
8624 operator_code = MINUS_EXPR;
8627 case PREINCREMENT_EXPR:
8628 operator_code = POSTINCREMENT_EXPR;
8631 case PREDECREMENT_EXPR:
8632 operator_code = POSTDECREMENT_EXPR;
8639 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8641 if ((operator_code == POSTINCREMENT_EXPR
8642 || operator_code == POSTDECREMENT_EXPR)
8643 && ! processing_template_decl
8644 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8647 error ("postfix `%D' must take `int' as its argument",
8651 ("postfix `%D' must take `int' as its second argument",
8658 error ("`%D' must take either zero or one argument", decl);
8660 error ("`%D' must take either one or two arguments", decl);
8663 /* More Effective C++ rule 6. */
8665 && (operator_code == POSTINCREMENT_EXPR
8666 || operator_code == POSTDECREMENT_EXPR
8667 || operator_code == PREINCREMENT_EXPR
8668 || operator_code == PREDECREMENT_EXPR))
8670 tree arg = TREE_VALUE (argtypes);
8671 tree ret = TREE_TYPE (TREE_TYPE (decl));
8672 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
8673 arg = TREE_TYPE (arg);
8674 arg = TYPE_MAIN_VARIANT (arg);
8675 if (operator_code == PREINCREMENT_EXPR
8676 || operator_code == PREDECREMENT_EXPR)
8678 if (TREE_CODE (ret) != REFERENCE_TYPE
8679 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
8681 warning ("prefix `%D' should return `%T'", decl,
8682 build_reference_type (arg));
8686 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8687 warning ("postfix `%D' should return `%T'", decl, arg);
8691 else if (unary_op_p (operator_code))
8696 error ("`%D' must take `void'", decl);
8698 error ("`%D' must take exactly one argument", decl);
8701 else /* if (binary_op_p (operator_code)) */
8706 error ("`%D' must take exactly one argument", decl);
8708 error ("`%D' must take exactly two arguments", decl);
8711 /* More Effective C++ rule 7. */
8713 && (operator_code == TRUTH_ANDIF_EXPR
8714 || operator_code == TRUTH_ORIF_EXPR
8715 || operator_code == COMPOUND_EXPR))
8716 warning ("user-defined `%D' always evaluates both arguments",
8720 /* Effective C++ rule 23. */
8723 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
8724 && (operator_code == PLUS_EXPR
8725 || operator_code == MINUS_EXPR
8726 || operator_code == TRUNC_DIV_EXPR
8727 || operator_code == MULT_EXPR
8728 || operator_code == TRUNC_MOD_EXPR)
8729 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
8730 warning ("`%D' should return by value", decl);
8733 for (; argtypes && argtypes != void_list_node;
8734 argtypes = TREE_CHAIN (argtypes))
8735 if (TREE_PURPOSE (argtypes))
8737 TREE_PURPOSE (argtypes) = NULL_TREE;
8738 if (operator_code == POSTINCREMENT_EXPR
8739 || operator_code == POSTDECREMENT_EXPR)
8742 pedwarn ("`%D' cannot have default arguments", decl);
8745 error ("`%D' cannot have default arguments", decl);
8754 tag_name (enum tag_types code)
8771 /* Name lookup in an elaborated-type-specifier (after the keyword
8772 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
8773 elaborated-type-specifier is invalid, issue a diagnostic and return
8774 error_mark_node; otherwise, return the *_TYPE to which it referred.
8775 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
8778 check_elaborated_type_specifier (enum tag_types tag_code,
8780 bool allow_template_p)
8786 struct S { struct S *p; };
8788 name lookup will find the TYPE_DECL for the implicit "S::S"
8789 typedef. Adjust for that here. */
8790 if (DECL_SELF_REFERENCE_P (decl))
8791 decl = TYPE_NAME (TREE_TYPE (decl));
8793 type = TREE_TYPE (decl);
8797 If the identifier resolves to a typedef-name or a template
8798 type-parameter, the elaborated-type-specifier is ill-formed.
8800 In other words, the only legitimate declaration to use in the
8801 elaborated type specifier is the implicit typedef created when
8802 the type is declared. */
8803 if (!DECL_IMPLICIT_TYPEDEF_P (decl))
8805 error ("using typedef-name `%D' after `%s'", decl, tag_name (tag_code));
8806 return IS_AGGR_TYPE (type) ? type : error_mark_node;
8809 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8811 error ("using template type parameter `%T' after `%s'",
8812 type, tag_name (tag_code));
8813 return error_mark_node;
8815 else if (TREE_CODE (type) != RECORD_TYPE
8816 && TREE_CODE (type) != UNION_TYPE
8817 && tag_code != enum_type)
8819 error ("`%T' referred to as `%s'", type, tag_name (tag_code));
8820 return error_mark_node;
8822 else if (TREE_CODE (type) != ENUMERAL_TYPE
8823 && tag_code == enum_type)
8825 error ("`%T' referred to as enum", type);
8826 return error_mark_node;
8828 else if (!allow_template_p
8829 && TREE_CODE (type) == RECORD_TYPE
8830 && CLASSTYPE_IS_TEMPLATE (type))
8832 /* If a class template appears as elaborated type specifier
8833 without a template header such as:
8835 template <class T> class C {};
8836 void f(class C); // No template header here
8838 then the required template argument is missing. */
8840 error ("template argument required for `%s %T'",
8841 tag_name (tag_code),
8842 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
8843 return error_mark_node;
8849 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
8850 Define the tag as a forward-reference if it is not defined.
8852 If a declaration is given, process it here, and report an error if
8853 multiple declarations are not identical.
8855 GLOBALIZE is false when this is also a definition. Only look in
8856 the current frame for the name (since C++ allows new names in any
8859 TEMPLATE_HEADER_P is true when this declaration is preceded by
8860 a set of template parameters. */
8863 xref_tag (enum tag_types tag_code, tree name,
8864 bool globalize, bool template_header_p)
8866 enum tree_code code;
8868 struct cp_binding_level *b = current_binding_level;
8869 tree context = NULL_TREE;
8871 timevar_push (TV_NAME_LOOKUP);
8873 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 0);
8885 code = ENUMERAL_TYPE;
8893 /* If we know we are defining this tag, only look it up in
8894 this scope and don't try to find it as a type. */
8895 t = lookup_tag (code, name, b, 1);
8899 tree decl = lookup_name (name, 2);
8901 if (decl && DECL_CLASS_TEMPLATE_P (decl))
8902 decl = DECL_TEMPLATE_RESULT (decl);
8904 if (decl && TREE_CODE (decl) == TYPE_DECL)
8906 /* Two cases we need to consider when deciding if a class
8907 template is allowed as an elaborated type specifier:
8908 1. It is a self reference to its own class.
8909 2. It comes with a template header.
8913 template <class T> class C {
8914 class C *c1; // DECL_SELF_REFERENCE_P is true
8917 template <class U> class C; // template_header_p is true
8918 template <class T> class C<T>::D {
8919 class C *c2; // DECL_SELF_REFERENCE_P is true
8922 t = check_elaborated_type_specifier (tag_code,
8925 | DECL_SELF_REFERENCE_P (decl));
8926 if (t == error_mark_node)
8927 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8932 if (t && current_class_type
8933 && template_class_depth (current_class_type)
8934 && template_header_p)
8936 /* Since GLOBALIZE is nonzero, we are not looking at a
8937 definition of this tag. Since, in addition, we are currently
8938 processing a (member) template declaration of a template
8939 class, we must be very careful; consider:
8946 { template <class V>
8947 friend struct S1; };
8949 Here, the S2::S1 declaration should not be confused with the
8950 outer declaration. In particular, the inner version should
8951 have a template parameter of level 2, not level 1. This
8952 would be particularly important if the member declaration
8955 template <class V = U> friend struct S1;
8957 say, when we should tsubst into `U' when instantiating
8958 S2. On the other hand, when presented with:
8968 we must find the inner binding eventually. We
8969 accomplish this by making sure that the new type we
8970 create to represent this declaration has the right
8972 context = TYPE_CONTEXT (t);
8979 /* If no such tag is yet defined, create a forward-reference node
8980 and record it as the "definition".
8981 When a real declaration of this type is found,
8982 the forward-reference will be altered into a real type. */
8983 if (code == ENUMERAL_TYPE)
8985 error ("use of enum `%#D' without previous declaration", name);
8986 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8990 t = make_aggr_type (code);
8991 TYPE_CONTEXT (t) = context;
8992 pushtag (name, t, globalize);
8997 if (!globalize && processing_template_decl && IS_AGGR_TYPE (t))
8998 redeclare_class_template (t, current_template_parms);
8999 else if (!processing_template_decl
9001 && CLASSTYPE_IS_TEMPLATE (t))
9003 error ("redeclaration of `%T' as a non-template", t);
9004 t = error_mark_node;
9008 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9012 xref_tag_from_type (tree old, tree id, int globalize)
9014 enum tag_types tag_kind;
9016 if (TREE_CODE (old) == RECORD_TYPE)
9017 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9019 tag_kind = union_type;
9021 if (id == NULL_TREE)
9022 id = TYPE_IDENTIFIER (old);
9024 return xref_tag (tag_kind, id, globalize, false);
9027 /* REF is a type (named NAME), for which we have just seen some
9028 baseclasses. BASE_LIST is a list of those baseclasses; the
9029 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
9030 the base-class. Non-NULL TREE_TYPE indicates virtual inheritance.
9031 CODE_TYPE_NODE indicates whether REF is a class, struct, or
9035 xref_basetypes (tree ref, tree base_list)
9037 /* In the declaration `A : X, Y, ... Z' we mark all the types
9038 (A, X, Y, ..., Z) so we can check for duplicates. */
9040 unsigned max_vbases = 0;
9042 enum tag_types tag_code;
9044 if (ref == error_mark_node)
9047 tag_code = TREE_CODE (ref) == UNION_TYPE ? union_type
9048 : (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
9050 /* First, make sure that any templates in base-classes are
9051 instantiated. This ensures that if we call ourselves recursively
9052 we do not get confused about which classes are marked and which
9057 tree basetype = TREE_VALUE (*basep);
9059 if (!(processing_template_decl && uses_template_parms (basetype))
9060 && !complete_type_or_else (basetype, NULL))
9061 /* An incomplete type. Remove it from the list. */
9062 *basep = TREE_CHAIN (*basep);
9064 basep = &TREE_CHAIN (*basep);
9067 SET_CLASSTYPE_MARKED (ref);
9068 i = list_length (base_list);
9069 /* The binfo slot should be empty, unless this is an (ill-formed)
9071 my_friendly_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref), 20040706);
9072 my_friendly_assert (TYPE_MAIN_VARIANT (ref) == ref, 20040712);
9073 TYPE_BINFO (ref) = make_tree_binfo (BINFO_LANG_SLOTS);
9074 BINFO_OFFSET (TYPE_BINFO (ref)) = size_zero_node;
9075 BINFO_TYPE (TYPE_BINFO (ref)) = ref;
9079 tree binfo = TYPE_BINFO (ref);
9080 tree binfos = make_tree_vec (i);
9081 tree accesses = make_tree_vec (i);
9083 BINFO_BASE_BINFOS (binfo) = binfos;
9084 BINFO_BASE_ACCESSES (binfo) = accesses;
9086 for (i = 0; base_list; base_list = TREE_CHAIN (base_list))
9088 tree access = TREE_PURPOSE (base_list);
9089 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9090 tree basetype = TREE_VALUE (base_list);
9095 if (access == access_default_node)
9096 /* The base of a derived struct is public by default. */
9097 access = (tag_code == class_type
9098 ? access_private_node : access_public_node);
9100 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
9101 basetype = TREE_TYPE (basetype);
9103 || (TREE_CODE (basetype) != RECORD_TYPE
9104 && TREE_CODE (basetype) != TYPENAME_TYPE
9105 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9106 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
9108 error ("base type `%T' fails to be a struct or class type",
9113 if (CLASSTYPE_MARKED (basetype))
9115 if (basetype == ref)
9116 error ("recursive type `%T' undefined", basetype);
9118 error ("duplicate base type `%T' invalid", basetype);
9122 if (TYPE_FOR_JAVA (basetype)
9123 && (current_lang_depth () == 0))
9124 TYPE_FOR_JAVA (ref) = 1;
9126 if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9128 base_binfo = TYPE_BINFO (basetype);
9130 my_friendly_assert (base_binfo, 20040706);
9134 base_binfo = make_tree_binfo (BINFO_LANG_SLOTS);
9136 BINFO_TYPE (base_binfo) = basetype;
9137 BINFO_DEPENDENT_BASE_P (base_binfo) = 1;
9140 TREE_VEC_ELT (binfos, i) = base_binfo;
9141 TREE_VEC_ELT (accesses, i) = access;
9142 /* This flag will be in the binfo of the base type, we must
9143 clear it after copying the base binfos. */
9144 BINFO_VIRTUAL_P (base_binfo) = via_virtual;
9146 SET_CLASSTYPE_MARKED (basetype);
9148 /* We are free to modify these bits because they are meaningless
9149 at top level, and BASETYPE is a top-level type. */
9150 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
9152 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
9153 /* Converting to a virtual base class requires looking
9154 up the offset of the virtual base. */
9155 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9158 if (CLASS_TYPE_P (basetype))
9160 TYPE_HAS_NEW_OPERATOR (ref)
9161 |= TYPE_HAS_NEW_OPERATOR (basetype);
9162 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9163 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9164 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9165 /* If the base-class uses multiple inheritance, so do we. */
9166 TYPE_USES_MULTIPLE_INHERITANCE (ref)
9167 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
9168 /* Likewise, if converting to a base of the base may require
9169 code, then we may need to generate code to convert to a
9171 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
9172 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
9173 max_vbases += VEC_length
9174 (tree, CLASSTYPE_VBASECLASSES (basetype));
9179 TREE_VEC_LENGTH (accesses) = TREE_VEC_LENGTH (binfos) = i;
9181 BINFO_BASE_ACCESSES (binfo) = BINFO_BASE_BINFOS (binfo) = NULL_TREE;
9183 CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, max_vbases);
9187 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
9188 /* If there is more than one non-empty they cannot be at the same
9190 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9194 /* Copy the base binfos, collect the virtual bases and set the
9195 inheritance order chain. */
9196 copy_base_binfos (TYPE_BINFO (ref), ref, NULL_TREE);
9198 if (TREE_CODE (ref) == UNION_TYPE)
9201 error ("derived union `%T' invalid", ref);
9204 if (TYPE_FOR_JAVA (ref))
9206 if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
9207 error ("Java class '%T' cannot have multiple bases", ref);
9208 if (CLASSTYPE_VBASECLASSES (ref))
9209 error ("Java class '%T' cannot have virtual bases", ref);
9212 /* Unmark all the types. */
9215 tree binfo = BINFO_BASE_BINFO (TYPE_BINFO (ref), i);
9216 tree basetype = BINFO_TYPE (binfo);
9218 CLEAR_CLASSTYPE_MARKED (basetype);
9219 if (!BINFO_DEPENDENT_BASE_P (binfo))
9220 BINFO_VIRTUAL_P (TYPE_BINFO (basetype)) = 0;
9222 CLEAR_CLASSTYPE_MARKED (ref);
9226 /* Begin compiling the definition of an enumeration type.
9227 NAME is its name (or null if anonymous).
9228 Returns the type object, as yet incomplete.
9229 Also records info about it so that build_enumerator
9230 may be used to declare the individual values as they are read. */
9233 start_enum (tree name)
9235 tree enumtype = NULL_TREE;
9236 struct cp_binding_level *b = current_binding_level;
9238 /* If this is the real definition for a previous forward reference,
9239 fill in the contents in the same object that used to be the
9240 forward reference. */
9242 if (name != NULL_TREE)
9243 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
9245 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9247 error ("multiple definition of `%#T'", enumtype);
9248 error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9249 /* Clear out TYPE_VALUES, and start again. */
9250 TYPE_VALUES (enumtype) = NULL_TREE;
9254 enumtype = make_node (ENUMERAL_TYPE);
9255 pushtag (name, enumtype, 0);
9261 /* After processing and defining all the values of an enumeration type,
9262 install their decls in the enumeration type and finish it off.
9263 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
9266 finish_enum (tree enumtype)
9278 integer_type_kind itk;
9279 tree underlying_type = NULL_TREE;
9281 /* We built up the VALUES in reverse order. */
9282 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9284 /* For an enum defined in a template, just set the type of the values;
9285 all further processing is postponed until the template is
9286 instantiated. We need to set the type so that tsubst of a CONST_DECL
9288 if (processing_template_decl)
9290 for (values = TYPE_VALUES (enumtype);
9292 values = TREE_CHAIN (values))
9293 TREE_TYPE (TREE_VALUE (values)) = enumtype;
9294 if (at_function_scope_p ())
9295 add_stmt (build_min (TAG_DEFN, enumtype));
9299 /* Determine the minimum and maximum values of the enumerators. */
9300 if (TYPE_VALUES (enumtype))
9302 minnode = maxnode = NULL_TREE;
9304 for (values = TYPE_VALUES (enumtype);
9306 values = TREE_CHAIN (values))
9308 decl = TREE_VALUE (values);
9310 /* [dcl.enum]: Following the closing brace of an enum-specifier,
9311 each enumerator has the type of its enumeration. Prior to the
9312 closing brace, the type of each enumerator is the type of its
9313 initializing value. */
9314 TREE_TYPE (decl) = enumtype;
9316 /* Update the minimum and maximum values, if appropriate. */
9317 value = DECL_INITIAL (decl);
9318 /* Figure out what the minimum and maximum values of the
9321 minnode = maxnode = value;
9322 else if (tree_int_cst_lt (maxnode, value))
9324 else if (tree_int_cst_lt (value, minnode))
9327 /* Set the TREE_TYPE for the values as well. That's so that when
9328 we call decl_constant_value we get an entity of the right type
9329 (but with the constant value). But first make a copy so we
9330 don't clobber shared INTEGER_CSTs. */
9331 if (TREE_TYPE (value) != enumtype)
9333 value = DECL_INITIAL (decl) = copy_node (value);
9334 TREE_TYPE (value) = enumtype;
9341 If the enumerator-list is empty, the underlying type is as if
9342 the enumeration had a single enumerator with value 0. */
9343 minnode = maxnode = integer_zero_node;
9345 /* Compute the number of bits require to represent all values of the
9346 enumeration. We must do this before the type of MINNODE and
9347 MAXNODE are transformed, since min_precision relies on the
9348 TREE_TYPE of the value it is passed. */
9349 unsignedp = tree_int_cst_sgn (minnode) >= 0;
9350 lowprec = min_precision (minnode, unsignedp);
9351 highprec = min_precision (maxnode, unsignedp);
9352 precision = MAX (lowprec, highprec);
9354 /* Determine the underlying type of the enumeration.
9358 The underlying type of an enumeration is an integral type that
9359 can represent all the enumerator values defined in the
9360 enumeration. It is implementation-defined which integral type is
9361 used as the underlying type for an enumeration except that the
9362 underlying type shall not be larger than int unless the value of
9363 an enumerator cannot fit in an int or unsigned int.
9365 We use "int" or an "unsigned int" as the underlying type, even if
9366 a smaller integral type would work, unless the user has
9367 explicitly requested that we use the smallest possible type. */
9368 for (itk = (flag_short_enums ? itk_char : itk_int);
9372 underlying_type = integer_types[itk];
9373 if (TYPE_PRECISION (underlying_type) >= precision
9374 && TYPE_UNSIGNED (underlying_type) == unsignedp)
9377 if (itk == itk_none)
9381 IF no integral type can represent all the enumerator values, the
9382 enumeration is ill-formed. */
9383 error ("no integral type can represent all of the enumerator values "
9384 "for `%T'", enumtype);
9385 precision = TYPE_PRECISION (long_long_integer_type_node);
9386 underlying_type = integer_types[itk_unsigned_long_long];
9389 /* Compute the minium and maximum values for the type.
9393 For an enumeration where emin is the smallest enumerator and emax
9394 is the largest, the values of the enumeration are the values of the
9395 underlying type in the range bmin to bmax, where bmin and bmax are,
9396 respectively, the smallest and largest values of the smallest bit-
9397 field that can store emin and emax. */
9398 TYPE_PRECISION (enumtype) = precision;
9399 set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9403 The value of sizeof() applied to an enumeration type, an object
9404 of an enumeration type, or an enumerator, is the value of sizeof()
9405 applied to the underlying type. */
9406 TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9407 TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9408 TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9409 TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9410 TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9411 TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9413 /* Convert each of the enumerators to the type of the underlying
9414 type of the enumeration. */
9415 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9417 decl = TREE_VALUE (values);
9418 value = perform_implicit_conversion (underlying_type,
9419 DECL_INITIAL (decl));
9420 TREE_TYPE (value) = enumtype;
9421 DECL_INITIAL (decl) = value;
9422 TREE_VALUE (values) = value;
9425 /* Fix up all variant types of this enum type. */
9426 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9428 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9429 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9430 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9431 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9432 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9433 TYPE_MODE (t) = TYPE_MODE (enumtype);
9434 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9435 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9436 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9437 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9440 /* Finish debugging output for this type. */
9441 rest_of_type_compilation (enumtype, namespace_bindings_p ());
9444 /* Build and install a CONST_DECL for an enumeration constant of the
9445 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9446 Assignment of sequential values by default is handled here. */
9449 build_enumerator (tree name, tree value, tree enumtype)
9455 /* Remove no-op casts from the value. */
9457 STRIP_TYPE_NOPS (value);
9459 if (! processing_template_decl)
9461 /* Validate and default VALUE. */
9462 if (value != NULL_TREE)
9464 value = decl_constant_value (value);
9466 if (TREE_CODE (value) == INTEGER_CST)
9468 value = perform_integral_promotions (value);
9469 constant_expression_warning (value);
9473 error ("enumerator value for `%D' not integer constant", name);
9478 /* Default based on previous value. */
9479 if (value == NULL_TREE)
9483 if (TYPE_VALUES (enumtype))
9485 /* The next value is the previous value ... */
9486 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9488 value = cp_build_binary_op (PLUS_EXPR,
9492 if (tree_int_cst_lt (value, prev_value))
9493 error ("overflow in enumeration values at `%D'", name);
9496 value = integer_zero_node;
9499 /* Remove no-op casts from the value. */
9500 STRIP_TYPE_NOPS (value);
9503 /* C++ associates enums with global, function, or class declarations. */
9504 context = current_scope ();
9506 context = current_namespace;
9508 /* Build the actual enumeration constant. Note that the enumeration
9509 constants have the type of their initializers until the
9510 enumeration is complete:
9514 Following the closing brace of an enum-specifier, each enumer-
9515 ator has the type of its enumeration. Prior to the closing
9516 brace, the type of each enumerator is the type of its
9519 In finish_enum we will reset the type. Of course, if we're
9520 processing a template, there may be no value. */
9521 type = value ? TREE_TYPE (value) : NULL_TREE;
9523 if (context && context == current_class_type)
9524 /* This enum declaration is local to the class. We need the full
9525 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
9526 decl = build_lang_decl (CONST_DECL, name, type);
9528 /* It's a global enum, or it's local to a function. (Note local to
9529 a function could mean local to a class method. */
9530 decl = build_decl (CONST_DECL, name, type);
9532 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9533 TREE_CONSTANT (decl) = 1;
9534 TREE_INVARIANT (decl) = 1;
9535 TREE_READONLY (decl) = 1;
9536 DECL_INITIAL (decl) = value;
9538 if (context && context == current_class_type)
9539 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9540 on the TYPE_FIELDS list for `S'. (That's so that you can say
9541 things like `S::i' later.) */
9542 finish_member_declaration (decl);
9546 /* Add this enumeration constant to the list for this type. */
9547 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9551 /* We're defining DECL. Make sure that it's type is OK. */
9554 check_function_type (tree decl, tree current_function_parms)
9556 tree fntype = TREE_TYPE (decl);
9557 tree return_type = complete_type (TREE_TYPE (fntype));
9559 /* In a function definition, arg types must be complete. */
9560 require_complete_types_for_parms (current_function_parms);
9562 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9564 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
9566 /* Make it return void instead, but don't change the
9567 type of the DECL_RESULT, in case we have a named return value. */
9568 if (TREE_CODE (fntype) == METHOD_TYPE)
9570 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9572 = build_method_type_directly (ctype,
9574 FUNCTION_ARG_CHAIN (decl));
9578 = build_function_type (void_type_node,
9579 TYPE_ARG_TYPES (TREE_TYPE (decl)));
9581 = build_exception_variant (fntype,
9582 TYPE_RAISES_EXCEPTIONS (fntype));
9585 abstract_virtuals_error (decl, TREE_TYPE (fntype));
9588 /* Create the FUNCTION_DECL for a function definition.
9589 DECLSPECS and DECLARATOR are the parts of the declaration;
9590 they describe the function's name and the type it returns,
9591 but twisted together in a fashion that parallels the syntax of C.
9593 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9594 DECLARATOR is really the DECL for the function we are about to
9595 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9596 indicating that the function is an inline defined in-class.
9598 This function creates a binding context for the function body
9599 as well as setting up the FUNCTION_DECL in current_function_decl.
9601 For C++, we must first check whether that datum makes any sense.
9602 For example, "class A local_a(1,2);" means that variable local_a
9603 is an aggregate of type A, which should have a constructor
9604 applied to it with the argument list [1, 2]. */
9607 start_preparsed_function (tree decl1, tree attrs, int flags)
9609 tree ctype = NULL_TREE;
9612 int doing_friend = 0;
9613 struct cp_binding_level *bl;
9614 tree current_function_parms;
9617 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
9618 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
9620 fntype = TREE_TYPE (decl1);
9621 if (TREE_CODE (fntype) == METHOD_TYPE)
9622 ctype = TYPE_METHOD_BASETYPE (fntype);
9624 /* ISO C++ 11.4/5. A friend function defined in a class is in
9625 the (lexical) scope of the class in which it is defined. */
9626 if (!ctype && DECL_FRIEND_P (decl1))
9628 ctype = DECL_FRIEND_CONTEXT (decl1);
9630 /* CTYPE could be null here if we're dealing with a template;
9631 for example, `inline friend float foo()' inside a template
9632 will have no CTYPE set. */
9633 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
9639 if (DECL_DECLARED_INLINE_P (decl1)
9640 && lookup_attribute ("noinline", attrs))
9641 warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
9643 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
9644 /* This is a constructor, we must ensure that any default args
9645 introduced by this definition are propagated to the clones
9646 now. The clones are used directly in overload resolution. */
9647 adjust_clone_args (decl1);
9649 /* Sometimes we don't notice that a function is a static member, and
9650 build a METHOD_TYPE for it. Fix that up now. */
9651 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
9652 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
9654 revert_static_member_fn (decl1);
9658 /* Set up current_class_type, and enter the scope of the class, if
9661 push_nested_class (ctype);
9662 else if (DECL_STATIC_FUNCTION_P (decl1))
9663 push_nested_class (DECL_CONTEXT (decl1));
9665 /* Now that we have entered the scope of the class, we must restore
9666 the bindings for any template parameters surrounding DECL1, if it
9667 is an inline member template. (Order is important; consider the
9668 case where a template parameter has the same name as a field of
9669 the class.) It is not until after this point that
9670 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
9671 if (flags & SF_INCLASS_INLINE)
9672 maybe_begin_member_template_processing (decl1);
9674 /* Effective C++ rule 15. */
9676 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
9677 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
9678 warning ("`operator=' should return a reference to `*this'");
9680 /* Make the init_value nonzero so pushdecl knows this is not tentative.
9681 error_mark_node is replaced below (in poplevel) with the BLOCK. */
9682 if (!DECL_INITIAL (decl1))
9683 DECL_INITIAL (decl1) = error_mark_node;
9685 /* This function exists in static storage.
9686 (This does not mean `static' in the C sense!) */
9687 TREE_STATIC (decl1) = 1;
9689 /* We must call push_template_decl after current_class_type is set
9690 up. (If we are processing inline definitions after exiting a
9691 class scope, current_class_type will be NULL_TREE until set above
9692 by push_nested_class.) */
9693 if (processing_template_decl)
9694 decl1 = push_template_decl (decl1);
9696 /* We are now in the scope of the function being defined. */
9697 current_function_decl = decl1;
9699 /* Save the parm names or decls from this function's declarator
9700 where store_parm_decls will find them. */
9701 current_function_parms = DECL_ARGUMENTS (decl1);
9703 /* Make sure the parameter and return types are reasonable. When
9704 you declare a function, these types can be incomplete, but they
9705 must be complete when you define the function. */
9706 if (! processing_template_decl)
9707 check_function_type (decl1, current_function_parms);
9709 /* Build the return declaration for the function. */
9710 restype = TREE_TYPE (fntype);
9711 /* Promote the value to int before returning it. */
9712 if (c_promoting_integer_type_p (restype))
9713 restype = type_promotes_to (restype);
9714 if (DECL_RESULT (decl1) == NULL_TREE)
9717 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
9718 c_apply_type_quals_to_decl (cp_type_quals (restype),
9719 DECL_RESULT (decl1));
9722 /* Initialize RTL machinery. We cannot do this until
9723 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
9724 even when processing a template; this is how we get
9725 CFUN set up, and our per-function variables initialized.
9726 FIXME factor out the non-RTL stuff. */
9727 bl = current_binding_level;
9728 allocate_struct_function (decl1);
9729 current_binding_level = bl;
9731 /* Even though we're inside a function body, we still don't want to
9732 call expand_expr to calculate the size of a variable-sized array.
9733 We haven't necessarily assigned RTL to all variables yet, so it's
9734 not safe to try to expand expressions involving them. */
9735 cfun->x_dont_save_pending_sizes_p = 1;
9737 /* Start the statement-tree, start the tree now. */
9738 DECL_SAVED_TREE (decl1) = push_stmt_list ();
9740 /* Let the user know we're compiling this function. */
9741 announce_function (decl1);
9743 /* Record the decl so that the function name is defined.
9744 If we already have a decl for this name, and it is a FUNCTION_DECL,
9745 use the old decl. */
9746 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
9748 /* A specialization is not used to guide overload resolution. */
9749 if (!DECL_FUNCTION_MEMBER_P (decl1)
9750 && !(DECL_USE_TEMPLATE (decl1) &&
9751 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
9753 tree olddecl = pushdecl (decl1);
9755 if (olddecl == error_mark_node)
9756 /* If something went wrong when registering the declaration,
9757 use DECL1; we have to have a FUNCTION_DECL to use when
9758 parsing the body of the function. */
9761 /* Otherwise, OLDDECL is either a previous declaration of
9762 the same function or DECL1 itself. */
9767 /* We need to set the DECL_CONTEXT. */
9768 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
9769 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
9770 /* And make sure we have enough default args. */
9771 check_default_args (decl1);
9773 fntype = TREE_TYPE (decl1);
9776 /* Reset these in case the call to pushdecl changed them. */
9777 current_function_decl = decl1;
9780 /* If we are (erroneously) defining a function that we have already
9781 defined before, wipe out what we knew before. */
9782 if (!DECL_PENDING_INLINE_P (decl1))
9783 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
9785 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
9787 /* We know that this was set up by `grokclassfn'. We do not
9788 wait until `store_parm_decls', since evil parse errors may
9789 never get us to that point. Here we keep the consistency
9790 between `current_class_type' and `current_class_ptr'. */
9791 tree t = DECL_ARGUMENTS (decl1);
9793 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
9795 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
9798 cp_function_chain->x_current_class_ref
9799 = build_indirect_ref (t, NULL);
9800 cp_function_chain->x_current_class_ptr = t;
9802 /* Constructors and destructors need to know whether they're "in
9803 charge" of initializing virtual base classes. */
9805 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
9807 current_in_charge_parm = t;
9810 if (DECL_HAS_VTT_PARM_P (decl1))
9812 if (DECL_NAME (t) != vtt_parm_identifier)
9814 current_vtt_parm = t;
9818 if (DECL_INTERFACE_KNOWN (decl1))
9820 tree ctx = decl_function_context (decl1);
9822 if (DECL_NOT_REALLY_EXTERN (decl1))
9823 DECL_EXTERNAL (decl1) = 0;
9825 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
9826 && TREE_PUBLIC (ctx))
9827 /* This is a function in a local class in an extern inline
9829 comdat_linkage (decl1);
9831 /* If this function belongs to an interface, it is public.
9832 If it belongs to someone else's interface, it is also external.
9833 This only affects inlines and template instantiations. */
9834 else if (interface_unknown == 0
9835 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
9837 if (DECL_DECLARED_INLINE_P (decl1)
9838 || DECL_TEMPLATE_INSTANTIATION (decl1)
9839 || processing_template_decl)
9841 DECL_EXTERNAL (decl1)
9843 || (DECL_DECLARED_INLINE_P (decl1)
9844 && ! flag_implement_inlines
9845 && !DECL_VINDEX (decl1)));
9847 /* For WIN32 we also want to put these in linkonce sections. */
9848 maybe_make_one_only (decl1);
9851 DECL_EXTERNAL (decl1) = 0;
9852 DECL_NOT_REALLY_EXTERN (decl1) = 0;
9853 DECL_INTERFACE_KNOWN (decl1) = 1;
9855 else if (interface_unknown && interface_only
9856 && ! DECL_TEMPLATE_INSTANTIATION (decl1))
9858 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
9859 interface, we will have interface_only set but not
9860 interface_known. In that case, we don't want to use the normal
9861 heuristics because someone will supply a #pragma implementation
9862 elsewhere, and deducing it here would produce a conflict. */
9863 comdat_linkage (decl1);
9864 DECL_EXTERNAL (decl1) = 0;
9865 DECL_INTERFACE_KNOWN (decl1) = 1;
9866 DECL_DEFER_OUTPUT (decl1) = 1;
9870 /* This is a definition, not a reference.
9871 So clear DECL_EXTERNAL. */
9872 DECL_EXTERNAL (decl1) = 0;
9874 if ((DECL_DECLARED_INLINE_P (decl1)
9875 || DECL_TEMPLATE_INSTANTIATION (decl1))
9876 && ! DECL_INTERFACE_KNOWN (decl1)
9877 /* Don't try to defer nested functions for now. */
9878 && ! decl_function_context (decl1))
9879 DECL_DEFER_OUTPUT (decl1) = 1;
9881 DECL_INTERFACE_KNOWN (decl1) = 1;
9884 begin_scope (sk_function_parms, decl1);
9888 if (DECL_DESTRUCTOR_P (decl1))
9890 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
9891 DECL_CONTEXT (dtor_label) = current_function_decl;
9894 start_fname_decls ();
9896 store_parm_decls (current_function_parms);
9900 /* Like start_preparsed_function, except that instead of a
9901 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
9903 Returns 1 on success. If the DECLARATOR is not suitable for a function
9904 (it defines a datum instead), we return 0, which tells
9905 yyparse to report a parse error. */
9908 start_function (cp_decl_specifier_seq *declspecs,
9909 const cp_declarator *declarator,
9914 if (have_extern_spec)
9916 declspecs->storage_class = sc_extern;
9917 /* This should only be done once on the outermost decl. */
9918 have_extern_spec = false;
9921 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
9922 /* If the declarator is not suitable for a function definition,
9923 cause a syntax error. */
9924 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
9927 cplus_decl_attributes (&decl1, attrs, 0);
9929 /* If #pragma weak was used, mark the decl weak now. */
9930 if (global_scope_p (current_binding_level))
9931 maybe_apply_pragma_weak (decl1);
9933 if (DECL_MAIN_P (decl1))
9935 /* If this doesn't return integer_type, or a typedef to
9936 integer_type, complain. */
9937 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl1)), integer_type_node))
9939 if (pedantic || warn_return_type)
9940 pedwarn ("return type for `main' changed to `int'");
9941 TREE_TYPE (decl1) = default_function_type;
9945 start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
9950 /* Store the parameter declarations into the current function declaration.
9951 This is called after parsing the parameter declarations, before
9952 digesting the body of the function.
9954 Also install to binding contour return value identifier, if any. */
9957 store_parm_decls (tree current_function_parms)
9959 tree fndecl = current_function_decl;
9962 /* This is a chain of any other decls that came in among the parm
9963 declarations. If a parm is declared with enum {foo, bar} x;
9964 then CONST_DECLs for foo and bar are put here. */
9965 tree nonparms = NULL_TREE;
9967 if (current_function_parms)
9969 /* This case is when the function was defined with an ANSI prototype.
9970 The parms already have decls, so we need not do anything here
9971 except record them as in effect
9972 and complain if any redundant old-style parm decls were written. */
9974 tree specparms = current_function_parms;
9977 /* Must clear this because it might contain TYPE_DECLs declared
9979 current_binding_level->names = NULL;
9981 /* If we're doing semantic analysis, then we'll call pushdecl
9982 for each of these. We must do them in reverse order so that
9983 they end in the correct forward order. */
9984 specparms = nreverse (specparms);
9986 for (parm = specparms; parm; parm = next)
9988 next = TREE_CHAIN (parm);
9989 if (TREE_CODE (parm) == PARM_DECL)
9991 if (DECL_NAME (parm) == NULL_TREE
9992 || TREE_CODE (parm) != VOID_TYPE)
9995 error ("parameter `%D' declared void", parm);
9999 /* If we find an enum constant or a type tag,
10000 put it aside for the moment. */
10001 TREE_CHAIN (parm) = NULL_TREE;
10002 nonparms = chainon (nonparms, parm);
10006 /* Get the decls in their original chain order and record in the
10007 function. This is all and only the PARM_DECLs that were
10008 pushed into scope by the loop above. */
10009 DECL_ARGUMENTS (fndecl) = getdecls ();
10012 DECL_ARGUMENTS (fndecl) = NULL_TREE;
10014 /* Now store the final chain of decls for the arguments
10015 as the decl-chain of the current lexical scope.
10016 Put the enumerators in as well, at the front so that
10017 DECL_ARGUMENTS is not modified. */
10018 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10020 /* Do the starting of the exception specifications, if we have any. */
10021 if (flag_exceptions && !processing_template_decl
10022 && flag_enforce_eh_specs
10023 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10024 current_eh_spec_block = begin_eh_spec_block ();
10028 /* We have finished doing semantic analysis on DECL, but have not yet
10029 generated RTL for its body. Save away our current state, so that
10030 when we want to generate RTL later we know what to do. */
10033 save_function_data (tree decl)
10035 struct language_function *f;
10037 /* Save the language-specific per-function data so that we can
10038 get it back when we really expand this function. */
10039 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
10043 f = ggc_alloc (sizeof (struct language_function));
10044 memcpy (f, cp_function_chain, sizeof (struct language_function));
10045 DECL_SAVED_FUNCTION_DATA (decl) = f;
10047 /* Clear out the bits we don't need. */
10048 f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10049 f->x_named_label_uses = NULL;
10050 f->bindings = NULL;
10051 f->x_local_names = NULL;
10054 /* Add a note to mark the beginning of the main body of the constructor.
10055 This is used to set up the data structures for the cleanup regions for
10056 fully-constructed bases and members. */
10059 begin_constructor_body (void)
10063 /* Add a note to mark the end of the main body of the constructor. This is
10064 used to end the cleanup regions for fully-constructed bases and
10068 finish_constructor_body (void)
10072 /* Do all the processing for the beginning of a destructor; set up the
10073 vtable pointers and cleanups for bases and members. */
10076 begin_destructor_body (void)
10079 tree compound_stmt;
10081 /* If the dtor is empty, and we know there is not any possible
10082 way we could use any vtable entries, before they are possibly
10083 set by a base class dtor, we don't have to setup the vtables,
10084 as we know that any base class dtor will set up any vtables
10085 it needs. We avoid MI, because one base class dtor can do a
10086 virtual dispatch to an overridden function that would need to
10087 have a non-related vtable set up, we cannot avoid setting up
10088 vtables in that case. We could change this to see if there
10089 is just one vtable.
10091 ??? In the destructor for a class, the vtables are set
10092 appropriately for that class. There will be no non-related
10093 vtables. jason 2001-12-11. */
10094 if_stmt = begin_if_stmt ();
10096 /* If it is not safe to avoid setting up the vtables, then
10097 someone will change the condition to be boolean_true_node.
10098 (Actually, for now, we do not have code to set the condition
10099 appropriately, so we just assume that we always need to
10100 initialize the vtables.) */
10101 finish_if_stmt_cond (boolean_true_node, if_stmt);
10103 compound_stmt = begin_compound_stmt (0);
10105 /* Make all virtual function table pointers in non-virtual base
10106 classes point to CURRENT_CLASS_TYPE's virtual function
10108 initialize_vtbl_ptrs (current_class_ptr);
10110 finish_compound_stmt (compound_stmt);
10111 finish_then_clause (if_stmt);
10112 finish_if_stmt (if_stmt);
10114 /* And insert cleanups for our bases and members so that they
10115 will be properly destroyed if we throw. */
10116 push_base_cleanups ();
10119 /* At the end of every destructor we generate code to delete the object if
10120 necessary. Do that now. */
10123 finish_destructor_body (void)
10127 /* Any return from a destructor will end up here; that way all base
10128 and member cleanups will be run when the function returns. */
10129 add_stmt (build_stmt (LABEL_EXPR, dtor_label));
10131 /* In a virtual destructor, we must call delete. */
10132 if (DECL_VIRTUAL_P (current_function_decl))
10135 tree virtual_size = cxx_sizeof (current_class_type);
10139 At the point of definition of a virtual destructor (including
10140 an implicit definition), non-placement operator delete shall
10141 be looked up in the scope of the destructor's class and if
10142 found shall be accessible and unambiguous. */
10143 exprstmt = build_op_delete_call
10144 (DELETE_EXPR, current_class_ptr, virtual_size,
10145 /*global_p=*/false, NULL_TREE);
10147 if_stmt = begin_if_stmt ();
10148 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
10149 current_in_charge_parm,
10152 finish_expr_stmt (exprstmt);
10153 finish_then_clause (if_stmt);
10154 finish_if_stmt (if_stmt);
10158 /* Do the necessary processing for the beginning of a function body, which
10159 in this case includes member-initializers, but not the catch clauses of
10160 a function-try-block. Currently, this means opening a binding level
10161 for the member-initializers (in a ctor) and member cleanups (in a dtor).
10162 In other functions, this isn't necessary, but it doesn't hurt. */
10165 begin_function_body (void)
10169 if (processing_template_decl)
10170 /* Do nothing now. */;
10172 /* Always keep the BLOCK node associated with the outermost pair of
10173 curly braces of a function. These are needed for correct
10174 operation of dwarfout.c. */
10175 keep_next_level (true);
10177 stmt = begin_compound_stmt (BCS_FN_BODY);
10179 if (processing_template_decl)
10180 /* Do nothing now. */;
10181 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10182 begin_constructor_body ();
10183 else if (DECL_DESTRUCTOR_P (current_function_decl))
10184 begin_destructor_body ();
10189 /* Do the processing for the end of a function body. Currently, this means
10190 closing out the cleanups for fully-constructed bases and members, and in
10191 the case of the destructor, deleting the object if desired. Again, this
10192 is only meaningful for [cd]tors, since they are the only functions where
10193 there is a significant distinction between the main body and any
10194 function catch clauses. Handling, say, main() return semantics here
10195 would be wrong, as flowing off the end of a function catch clause for
10196 main() would also need to return 0. */
10199 finish_function_body (tree compstmt)
10201 /* Close the block. */
10202 finish_compound_stmt (compstmt);
10204 if (processing_template_decl)
10205 /* Do nothing now. */;
10206 else if (DECL_CONSTRUCTOR_P (current_function_decl))
10207 finish_constructor_body ();
10208 else if (DECL_DESTRUCTOR_P (current_function_decl))
10209 finish_destructor_body ();
10212 /* Finish up a function declaration and compile that function
10213 all the way to assembler language output. The free the storage
10214 for the function definition.
10216 FLAGS is a bitwise or of the following values:
10218 We just finished processing the body of an in-class inline
10219 function definition. (This processing will have taken place
10220 after the class definition is complete.) */
10223 finish_function (int flags)
10225 tree fndecl = current_function_decl;
10226 tree fntype, ctype = NULL_TREE;
10227 int inclass_inline = (flags & 2) != 0;
10230 /* When we get some parse errors, we can end up without a
10231 current_function_decl, so cope. */
10232 if (fndecl == NULL_TREE)
10233 return error_mark_node;
10235 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10236 && DECL_VIRTUAL_P (fndecl)
10237 && !processing_template_decl)
10239 tree fnclass = DECL_CONTEXT (fndecl);
10240 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10241 keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10244 nested = function_depth > 1;
10245 fntype = TREE_TYPE (fndecl);
10247 /* TREE_READONLY (fndecl) = 1;
10248 This caused &foo to be of type ptr-to-const-function
10249 which then got a warning when stored in a ptr-to-function variable. */
10251 my_friendly_assert (building_stmt_tree (), 20000911);
10253 /* For a cloned function, we've already got all the code we need;
10254 there's no need to add any extra bits. */
10255 if (!DECL_CLONED_FUNCTION_P (fndecl))
10257 if (DECL_MAIN_P (current_function_decl))
10259 /* Make it so that `main' always returns 0 by default. */
10261 finish_return_stmt (integer_one_node);
10263 finish_return_stmt (integer_zero_node);
10267 /* Finish dealing with exception specifiers. */
10268 if (flag_exceptions && !processing_template_decl
10269 && flag_enforce_eh_specs
10270 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10271 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10272 (TREE_TYPE (current_function_decl)),
10273 current_eh_spec_block);
10276 /* If we're saving up tree structure, tie off the function now. */
10277 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10279 finish_fname_decls ();
10281 /* If this function can't throw any exceptions, remember that. */
10282 if (!processing_template_decl
10283 && !cp_function_chain->can_throw
10284 && !flag_non_call_exceptions)
10285 TREE_NOTHROW (fndecl) = 1;
10287 /* This must come after expand_function_end because cleanups might
10288 have declarations (from inline functions) that need to go into
10289 this function's blocks. */
10291 /* If the current binding level isn't the outermost binding level
10292 for this function, either there is a bug, or we have experienced
10293 syntax errors and the statement tree is malformed. */
10294 if (current_binding_level->kind != sk_function_parms)
10296 /* Make sure we have already experienced errors. */
10297 if (errorcount == 0)
10300 /* Throw away the broken statement tree and extra binding
10302 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10304 while (current_binding_level->kind != sk_function_parms)
10306 if (current_binding_level->kind == sk_class)
10307 pop_nested_class ();
10309 poplevel (0, 0, 0);
10312 poplevel (1, 0, 1);
10314 /* Statements should always be full-expressions at the outermost set
10315 of curly braces for a function. */
10316 my_friendly_assert (stmts_are_full_exprs_p (), 19990831);
10318 /* Set up the named return value optimization, if we can. Candidate
10319 variables are selected in check_return_value. */
10320 if (current_function_return_value)
10322 tree r = current_function_return_value;
10325 if (r != error_mark_node
10326 /* This is only worth doing for fns that return in memory--and
10327 simpler, since we don't have to worry about promoted modes. */
10328 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10329 /* Only allow this for variables declared in the outer scope of
10330 the function so we know that their lifetime always ends with a
10331 return; see g++.dg/opt/nrv6.C. We could be more flexible if
10332 we were to do this optimization in tree-ssa. */
10333 && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)))
10334 /* Skip the artificial function body block. */
10335 && (outer = BLOCK_SUBBLOCKS (outer))
10336 && chain_member (r, BLOCK_VARS (outer)))
10337 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10339 current_function_return_value = NULL_TREE;
10342 /* Remember that we were in class scope. */
10343 if (current_class_name)
10344 ctype = current_class_type;
10346 /* Must mark the RESULT_DECL as being in this function. */
10347 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10349 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10350 to the FUNCTION_DECL node itself. */
10351 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10353 /* Save away current state, if appropriate. */
10354 if (!processing_template_decl)
10355 save_function_data (fndecl);
10357 /* Complain if there's just no return statement. */
10358 if (warn_return_type
10359 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10360 && !dependent_type_p (TREE_TYPE (fntype))
10361 && !current_function_returns_value && !current_function_returns_null
10362 /* Don't complain if we abort or throw. */
10363 && !current_function_returns_abnormally
10364 && !DECL_NAME (DECL_RESULT (fndecl))
10365 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
10366 inline function, as we might never be compiled separately. */
10367 && (DECL_INLINE (fndecl) || processing_template_decl))
10368 warning ("no return statement in function returning non-void");
10370 /* Store the end of the function, so that we get good line number
10371 info for the epilogue. */
10372 cfun->function_end_locus = input_location;
10374 /* Genericize before inlining. */
10375 if (!processing_template_decl)
10377 cp_genericize (fndecl);
10379 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
10380 c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10383 /* We're leaving the context of this function, so zap cfun. It's still in
10384 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
10386 current_function_decl = NULL;
10388 /* If this is an in-class inline definition, we may have to pop the
10389 bindings for the template parameters that we added in
10390 maybe_begin_member_template_processing when start_function was
10392 if (inclass_inline)
10393 maybe_end_member_template_processing ();
10395 /* Leave the scope of the class. */
10397 pop_nested_class ();
10403 /* Let the error reporting routines know that we're outside a
10404 function. For a nested function, this value is used in
10405 cxx_pop_function_context and then reset via pop_function_context. */
10406 current_function_decl = NULL_TREE;
10411 /* Create the FUNCTION_DECL for a function definition.
10412 DECLSPECS and DECLARATOR are the parts of the declaration;
10413 they describe the return type and the name of the function,
10414 but twisted together in a fashion that parallels the syntax of C.
10416 This function creates a binding context for the function body
10417 as well as setting up the FUNCTION_DECL in current_function_decl.
10419 Returns a FUNCTION_DECL on success.
10421 If the DECLARATOR is not suitable for a function (it defines a datum
10422 instead), we return 0, which tells yyparse to report a parse error.
10424 May return void_type_node indicating that this method is actually
10425 a friend. See grokfield for more details.
10427 Came here with a `.pushlevel' .
10429 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10430 CHANGES TO CODE IN `grokfield'. */
10433 start_method (cp_decl_specifier_seq *declspecs,
10434 const cp_declarator *declarator, tree attrlist)
10436 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10439 if (fndecl == error_mark_node)
10440 return error_mark_node;
10442 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10444 error ("invalid member function declaration");
10445 return error_mark_node;
10449 cplus_decl_attributes (&fndecl, attrlist, 0);
10451 /* Pass friends other than inline friend functions back. */
10452 if (fndecl == void_type_node)
10455 if (DECL_IN_AGGR_P (fndecl))
10457 if (DECL_CONTEXT (fndecl)
10458 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10459 error ("`%D' is already defined in class `%T'", fndecl,
10460 DECL_CONTEXT (fndecl));
10461 return void_type_node;
10464 check_template_shadow (fndecl);
10466 DECL_DECLARED_INLINE_P (fndecl) = 1;
10467 if (flag_default_inline)
10468 DECL_INLINE (fndecl) = 1;
10470 /* We process method specializations in finish_struct_1. */
10471 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10473 fndecl = push_template_decl (fndecl);
10474 if (fndecl == error_mark_node)
10478 if (! DECL_FRIEND_P (fndecl))
10480 if (TREE_CHAIN (fndecl))
10482 fndecl = copy_node (fndecl);
10483 TREE_CHAIN (fndecl) = NULL_TREE;
10485 grok_special_member_properties (fndecl);
10488 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10490 /* Make a place for the parms. */
10491 begin_scope (sk_function_parms, fndecl);
10493 DECL_IN_AGGR_P (fndecl) = 1;
10497 /* Go through the motions of finishing a function definition.
10498 We don't compile this method until after the whole class has
10501 FINISH_METHOD must return something that looks as though it
10502 came from GROKFIELD (since we are defining a method, after all).
10504 This is called after parsing the body of the function definition.
10505 STMTS is the chain of statements that makes up the function body.
10507 DECL is the ..._DECL that `start_method' provided. */
10510 finish_method (tree decl)
10512 tree fndecl = decl;
10517 if (decl == void_type_node)
10520 old_initial = DECL_INITIAL (fndecl);
10522 /* Undo the level for the parms (from start_method).
10523 This is like poplevel, but it causes nothing to be
10524 saved. Saving information here confuses symbol-table
10525 output routines. Besides, this information will
10526 be correctly output when this method is actually
10529 /* Clear out the meanings of the local variables of this level;
10530 also record in each decl which block it belongs to. */
10532 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10534 if (DECL_NAME (link) != NULL_TREE)
10535 pop_binding (DECL_NAME (link), link);
10536 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
10537 DECL_CONTEXT (link) = NULL_TREE;
10540 poplevel (0, 0, 0);
10542 DECL_INITIAL (fndecl) = old_initial;
10544 /* We used to check if the context of FNDECL was different from
10545 current_class_type as another way to get inside here. This didn't work
10546 for String.cc in libg++. */
10547 if (DECL_FRIEND_P (fndecl))
10549 CLASSTYPE_INLINE_FRIENDS (current_class_type)
10550 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
10551 decl = void_type_node;
10558 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
10559 we can lay it out later, when and if its type becomes complete. */
10562 maybe_register_incomplete_var (tree var)
10564 my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
10566 /* Keep track of variables with incomplete types. */
10567 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
10568 && DECL_EXTERNAL (var))
10570 tree inner_type = TREE_TYPE (var);
10572 while (TREE_CODE (inner_type) == ARRAY_TYPE)
10573 inner_type = TREE_TYPE (inner_type);
10574 inner_type = TYPE_MAIN_VARIANT (inner_type);
10576 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10577 /* RTTI TD entries are created while defining the type_info. */
10578 || (TYPE_LANG_SPECIFIC (inner_type)
10579 && TYPE_BEING_DEFINED (inner_type)))
10580 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10584 /* Called when a class type (given by TYPE) is defined. If there are
10585 any existing VAR_DECLs whose type hsa been completed by this
10586 declaration, update them now. */
10589 complete_vars (tree type)
10591 tree *list = &incomplete_vars;
10593 my_friendly_assert (CLASS_TYPE_P (type), 20020406);
10596 if (same_type_p (type, TREE_PURPOSE (*list)))
10598 tree var = TREE_VALUE (*list);
10599 /* Complete the type of the variable. The VAR_DECL itself
10600 will be laid out in expand_expr. */
10601 complete_type (TREE_TYPE (var));
10602 /* Remove this entry from the list. */
10603 *list = TREE_CHAIN (*list);
10606 list = &TREE_CHAIN (*list);
10609 /* Check for pending declarations which may have abstract type. */
10610 complete_type_check_abstract (type);
10613 /* If DECL is of a type which needs a cleanup, build that cleanup
10617 cxx_maybe_build_cleanup (tree decl)
10619 tree type = TREE_TYPE (decl);
10621 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
10623 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
10626 if (TREE_CODE (type) == ARRAY_TYPE)
10630 cxx_mark_addressable (decl);
10631 rval = build_unary_op (ADDR_EXPR, decl, 0);
10634 /* Optimize for space over speed here. */
10635 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
10636 || flag_expensive_optimizations)
10637 flags |= LOOKUP_NONVIRTUAL;
10639 rval = build_delete (TREE_TYPE (rval), rval,
10640 sfk_complete_destructor, flags, 0);
10642 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
10643 && ! TYPE_HAS_DESTRUCTOR (type))
10644 rval = build_compound_expr (rval, build_vbase_delete (type, decl));
10651 /* When a stmt has been parsed, this function is called. */
10658 /* DECL was originally constructed as a non-static member function,
10659 but turned out to be static. Update it accordingly. */
10662 revert_static_member_fn (tree decl)
10665 tree function = TREE_TYPE (decl);
10666 tree args = TYPE_ARG_TYPES (function);
10668 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
10669 != TYPE_UNQUALIFIED)
10670 error ("static member function `%#D' declared with type qualifiers",
10673 args = TREE_CHAIN (args);
10674 tmp = build_function_type (TREE_TYPE (function), args);
10675 tmp = build_qualified_type (tmp, cp_type_quals (function));
10676 tmp = build_exception_variant (tmp,
10677 TYPE_RAISES_EXCEPTIONS (function));
10678 TREE_TYPE (decl) = tmp;
10679 if (DECL_ARGUMENTS (decl))
10680 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
10681 DECL_STATIC_FUNCTION_P (decl) = 1;
10684 /* Initialize the variables used during compilation of a C++
10688 cxx_push_function_context (struct function * f)
10690 struct language_function *p
10691 = ggc_alloc_cleared (sizeof (struct language_function));
10694 /* Whenever we start a new function, we destroy temporaries in the
10696 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
10702 if (DECL_SAVED_FUNCTION_DATA (fn))
10704 /* If we already parsed this function, and we're just expanding it
10705 now, restore saved state. */
10706 *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
10708 /* We don't need the saved data anymore. Unless this is an inline
10709 function; we need the named return value info for
10710 cp_copy_res_decl_for_inlining. */
10711 if (! DECL_INLINE (fn))
10712 DECL_SAVED_FUNCTION_DATA (fn) = NULL;
10717 /* Free the language-specific parts of F, now that we've finished
10718 compiling the function. */
10721 cxx_pop_function_context (struct function * f)
10726 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
10727 one of the language-independent trees. */
10729 enum cp_tree_node_structure_enum
10730 cp_tree_node_structure (union lang_tree_node * t)
10732 switch (TREE_CODE (&t->generic))
10734 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
10735 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
10736 case OVERLOAD: return TS_CP_OVERLOAD;
10737 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
10738 case PTRMEM_CST: return TS_CP_PTRMEM;
10739 case BASELINK: return TS_CP_BASELINK;
10740 default: return TS_CP_GENERIC;
10744 /* Build the void_list_node (void_type_node having been created). */
10746 build_void_list_node (void)
10748 tree t = build_tree_list (NULL_TREE, void_type_node);
10753 cp_missing_noreturn_ok_p (tree decl)
10755 /* A missing noreturn is ok for the `main' function. */
10756 return DECL_MAIN_P (decl);
10759 #include "gt-cp-decl.h"
10760 #include "gtype-cp.h"