1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002 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"
52 #include "diagnostic.h"
55 static tree grokparms PARAMS ((tree));
56 static const char *redeclaration_error_message PARAMS ((tree, tree));
58 static void push_binding_level PARAMS ((struct cp_binding_level *, int,
60 static void pop_binding_level PARAMS ((void));
61 static void suspend_binding_level PARAMS ((void));
62 static void resume_binding_level PARAMS ((struct cp_binding_level *));
63 static struct cp_binding_level *make_binding_level PARAMS ((void));
64 static void declare_namespace_level PARAMS ((void));
65 static int decl_jump_unsafe PARAMS ((tree));
66 static void storedecls PARAMS ((tree));
67 static void require_complete_types_for_parms PARAMS ((tree));
68 static int ambi_op_p PARAMS ((enum tree_code));
69 static int unary_op_p PARAMS ((enum tree_code));
70 static tree store_bindings PARAMS ((tree, tree));
71 static tree lookup_tag_reverse PARAMS ((tree, tree));
72 static void push_local_name PARAMS ((tree));
73 static void warn_extern_redeclared_static PARAMS ((tree, tree));
74 static tree grok_reference_init PARAMS ((tree, tree, tree));
75 static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
76 enum overload_flags, tree,
77 tree, int, int, int, int, int, int, tree));
78 static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
79 static tree follow_tag_typedef PARAMS ((tree));
80 static tree lookup_tag PARAMS ((enum tree_code, tree,
81 struct cp_binding_level *, int));
82 static void set_identifier_type_value_with_scope
83 PARAMS ((tree, tree, struct cp_binding_level *));
84 static void record_unknown_type PARAMS ((tree, const char *));
85 static tree builtin_function_1 PARAMS ((const char *, tree, tree, int,
86 enum built_in_class, const char *,
88 static tree build_library_fn_1 PARAMS ((tree, enum tree_code, tree));
89 static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
90 static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
92 static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct cp_binding_level*));
93 static void check_for_uninitialized_const_var PARAMS ((tree));
94 static hashval_t typename_hash PARAMS ((const void *));
95 static int typename_compare PARAMS ((const void *, const void *));
96 static void push_binding PARAMS ((tree, tree, struct cp_binding_level*));
97 static int add_binding PARAMS ((tree, tree));
98 static void pop_binding PARAMS ((tree, tree));
99 static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
100 static tree find_binding PARAMS ((tree, tree));
101 static tree select_decl PARAMS ((tree, int));
102 static int lookup_flags PARAMS ((int, int));
103 static tree qualify_lookup PARAMS ((tree, int));
104 static tree record_builtin_java_type PARAMS ((const char *, int));
105 static const char *tag_name PARAMS ((enum tag_types code));
106 static void find_class_binding_level PARAMS ((void));
107 static struct cp_binding_level *innermost_nonclass_level PARAMS ((void));
108 static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
109 static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
110 static int walk_globals_r PARAMS ((tree, void *));
111 static int walk_vtables_r PARAMS ((tree, void*));
112 static void add_decl_to_level PARAMS ((tree, struct cp_binding_level *));
113 static tree make_label_decl PARAMS ((tree, int));
114 static void use_label PARAMS ((tree));
115 static void check_previous_goto_1 PARAMS ((tree, struct cp_binding_level *, tree,
117 static void check_previous_goto PARAMS ((struct named_label_use_list *));
118 static void check_switch_goto PARAMS ((struct cp_binding_level *));
119 static void check_previous_gotos PARAMS ((tree));
120 static void pop_label PARAMS ((tree, tree));
121 static void pop_labels PARAMS ((tree));
122 static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
123 static void layout_var_decl PARAMS ((tree));
124 static void maybe_commonize_var PARAMS ((tree));
125 static tree check_initializer (tree, tree, int);
126 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
127 static void save_function_data PARAMS ((tree));
128 static void check_function_type PARAMS ((tree, tree));
129 static void begin_constructor_body PARAMS ((void));
130 static void finish_constructor_body PARAMS ((void));
131 static void begin_destructor_body PARAMS ((void));
132 static void finish_destructor_body PARAMS ((void));
133 static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
134 static tree get_atexit_node PARAMS ((void));
135 static tree get_dso_handle_node PARAMS ((void));
136 static tree start_cleanup_fn PARAMS ((void));
137 static void end_cleanup_fn PARAMS ((void));
138 static tree cp_make_fname_decl PARAMS ((tree, int));
139 static void initialize_predefined_identifiers PARAMS ((void));
140 static tree check_special_function_return_type
141 PARAMS ((special_function_kind, tree, tree));
142 static tree push_cp_library_fn PARAMS ((enum tree_code, tree));
143 static tree build_cp_library_fn PARAMS ((tree, enum tree_code, tree));
144 static void store_parm_decls PARAMS ((tree));
145 static int cp_missing_noreturn_ok_p PARAMS ((tree));
146 static void initialize_local_var (tree, tree);
147 static void expand_static_init (tree, tree);
148 static tree next_initializable_field (tree);
149 static tree reshape_init (tree, tree *);
151 #if defined (DEBUG_BINDING_LEVELS)
152 static void indent PARAMS ((void));
155 /* Erroneous argument lists can use this *IFF* they do not modify it. */
156 tree error_mark_list;
158 /* The following symbols are subsumed in the cp_global_trees array, and
159 listed here individually for documentation purposes.
162 tree wchar_decl_node;
164 tree vtable_entry_type;
165 tree delta_type_node;
166 tree __t_desc_type_node;
167 tree ti_desc_type_node;
168 tree bltn_desc_type_node, ptr_desc_type_node;
169 tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
170 tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
171 tree ptm_desc_type_node;
172 tree base_desc_type_node;
174 tree class_type_node, record_type_node, union_type_node, enum_type_node;
175 tree unknown_type_node;
177 Array type `vtable_entry_type[]'
180 tree vtbl_ptr_type_node;
187 A FUNCTION_DECL which can call `abort'. Not necessarily the
188 one that the user will declare, but sufficient to be called
189 by routines that want to abort the program.
193 The FUNCTION_DECL for the default `::operator delete'.
195 tree global_delete_fndecl;
198 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
203 tree cp_global_trees[CPTI_MAX];
205 /* Indicates that there is a type value in some namespace, although
206 that is not necessarily in scope at the moment. */
208 static GTY(()) tree global_type_node;
210 /* Expect only namespace names now. */
211 static int only_namespace_names;
213 /* Used only for jumps to as-yet undefined labels, since jumps to
214 defined labels can have their validity checked immediately. */
216 struct named_label_use_list GTY(())
218 struct cp_binding_level *binding_level;
221 const char *filename_o_goto;
223 struct named_label_use_list *next;
226 #define named_label_uses cp_function_chain->x_named_label_uses
228 #define local_names cp_function_chain->x_local_names
230 /* A list of objects which have constructors or destructors
231 which reside in the global scope. The decl is stored in
232 the TREE_VALUE slot and the initializer is stored
233 in the TREE_PURPOSE slot. */
234 tree static_aggregates;
238 /* A node for the integer constants 2, and 3. */
240 tree integer_two_node, integer_three_node;
242 /* Similar, for last_function_parm_tags. */
243 tree last_function_parms;
245 /* A list of all LABEL_DECLs in the function that have names. Here so
246 we can clear out their names' definitions at the end of the
247 function, and so we can check the validity of jumps to these labels. */
249 struct named_label_list GTY(())
251 struct cp_binding_level *binding_level;
256 struct named_label_list *next;
257 unsigned int in_try_scope : 1;
258 unsigned int in_catch_scope : 1;
261 #define named_labels cp_function_chain->x_named_labels
263 /* The name of the anonymous namespace, throughout this translation
265 tree anonymous_namespace_name;
267 /* The number of function bodies which we are currently processing.
268 (Zero if we are at namespace scope, one inside the body of a
269 function, two inside the body of a function in a local class, etc.) */
272 /* States indicating how grokdeclarator() should handle declspecs marked
273 with __attribute__((deprecated)). An object declared as
274 __attribute__((deprecated)) suppresses warnings of uses of other
277 enum deprecated_states {
282 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
284 /* Set by add_implicitly_declared_members() to keep those members from
285 being flagged as deprecated or reported as using deprecated
287 int adding_implicit_members = 0;
289 /* True if a declaration with an `extern' linkage specifier is being
291 bool have_extern_spec;
294 /* For each binding contour we allocate a binding_level structure
295 which records the names defined in that contour.
298 1) one for each function definition,
299 where internal declarations of the parameters appear.
300 2) one for each compound statement,
301 to record its declarations.
303 The current meaning of a name can be found by searching the levels
304 from the current one out to the global one.
306 Off to the side, may be the class_binding_level. This exists only
307 to catch class-local declarations. It is otherwise nonexistent.
309 Also there may be binding levels that catch cleanups that must be
310 run when exceptions occur. Thus, to see whether a name is bound in
311 the current scope, it is not enough to look in the
312 CURRENT_BINDING_LEVEL. You should use lookup_name_current_level
315 /* Note that the information in the `names' component of the global contour
316 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
318 struct cp_binding_level GTY(())
320 /* A chain of _DECL nodes for all variables, constants, functions,
321 and typedef types. These are in the reverse of the order
322 supplied. There may be OVERLOADs on this list, too, but they
323 are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD. */
326 /* Count of elements in names chain. */
329 /* A chain of NAMESPACE_DECL nodes. */
332 /* A chain of VTABLE_DECL nodes. */
335 /* A list of structure, union and enum definitions, for looking up
337 It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
338 or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
339 or ENUMERAL_TYPE node.
341 C++: the TREE_VALUE nodes can be simple types for
342 component_bindings. */
345 /* A list of USING_DECL nodes. */
348 /* A list of used namespaces. PURPOSE is the namespace,
349 VALUE the common ancestor with this binding_level's namespace. */
350 tree using_directives;
352 /* If this binding level is the binding level for a class, then
353 class_shadowed is a TREE_LIST. The TREE_PURPOSE of each node
354 is the name of an entity bound in the class. The TREE_TYPE is
355 the DECL bound by this name in the class. */
358 /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
359 is used for all binding levels. In addition the TREE_VALUE is the
360 IDENTIFIER_TYPE_VALUE before we entered the class. */
363 /* A TREE_LIST. Each TREE_VALUE is the LABEL_DECL for a local
364 label in this scope. The TREE_PURPOSE is the previous value of
365 the IDENTIFIER_LABEL VALUE. */
366 tree shadowed_labels;
368 /* For each level (except not the global one),
369 a chain of BLOCK nodes for all the levels
370 that were entered and exited one level down. */
373 /* The _TYPE node for this level, if parm_flag == 2. */
376 /* The binding level which this one is contained in (inherits from). */
377 struct cp_binding_level *level_chain;
379 /* List of VAR_DECLS saved from a previous for statement.
380 These would be dead in ISO-conforming code, but might
381 be referenced in ARM-era code. These are stored in a
382 TREE_LIST; the TREE_VALUE is the actual declaration. */
383 tree dead_vars_from_for;
385 /* 1 for the level that holds the parameters of a function.
386 2 for the level that holds a class declaration. */
387 unsigned parm_flag : 2;
389 /* 1 means make a BLOCK for this level regardless of all else.
390 2 for temporary binding contours created by the compiler. */
393 /* Nonzero if this level "doesn't exist" for tags. */
394 unsigned tag_transparent : 1;
396 /* Nonzero if this level can safely have additional
397 cleanup-needing variables added to it. */
398 unsigned more_cleanups_ok : 1;
399 unsigned have_cleanups : 1;
401 /* Nonzero if this scope is for storing the decls for template
402 parameters and generic decls; these decls will be discarded and
403 replaced with a TEMPLATE_DECL. */
404 unsigned template_parms_p : 1;
406 /* Nonzero if this scope corresponds to the `<>' in a
407 `template <>' clause. Whenever this flag is set,
408 TEMPLATE_PARMS_P will be set as well. */
409 unsigned template_spec_p : 1;
411 /* This is set for a namespace binding level. */
412 unsigned namespace_p : 1;
414 /* True if this level is that of a for-statement where we need to
415 worry about ambiguous (ARM or ISO) scope rules. */
416 unsigned is_for_scope : 1;
418 /* True if this level corresponds to a TRY block. Currently this
419 information is only available while building the tree structure. */
420 unsigned is_try_scope : 1;
422 /* True if this level corresponds to a CATCH block. Currently this
423 information is only available while building the tree structure. */
424 unsigned is_catch_scope : 1;
426 /* Three bits left for this word. */
428 /* Binding depth at which this level began. */
429 unsigned binding_depth;
432 #define NULL_BINDING_LEVEL ((struct cp_binding_level *) NULL)
434 /* The binding level currently in effect. */
436 #define current_binding_level \
437 (cfun && cp_function_chain->bindings \
438 ? cp_function_chain->bindings \
439 : scope_chain->bindings)
441 /* The binding level of the current class, if any. */
443 #define class_binding_level scope_chain->class_bindings
445 /* A chain of binding_level structures awaiting reuse. */
447 static GTY((deletable (""))) struct cp_binding_level *free_binding_level;
449 /* The outermost binding level, for names of file scope.
450 This is created when the compiler is started and exists
451 through the entire run. */
453 static GTY(()) struct cp_binding_level *global_binding_level;
455 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
457 static int keep_next_level_flag;
459 /* A TREE_LIST of VAR_DECLs. The TREE_PURPOSE is a RECORD_TYPE or
460 UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type. At the
461 time the VAR_DECL was declared, the type was incomplete. */
463 static GTY(()) tree incomplete_vars;
465 #if defined(DEBUG_BINDING_LEVELS)
466 static int binding_depth = 0;
467 static int is_class_level = 0;
474 for (i = 0; i < binding_depth*2; i++)
477 #endif /* defined(DEBUG_BINDING_LEVELS) */
479 static tree pushdecl_with_scope PARAMS ((tree, struct cp_binding_level *));
482 push_binding_level (newlevel, tag_transparent, keep)
483 struct cp_binding_level *newlevel;
484 int tag_transparent, keep;
486 /* Add this level to the front of the chain (stack) of levels that
488 memset ((char*) newlevel, 0, sizeof (struct cp_binding_level));
489 newlevel->level_chain = current_binding_level;
490 current_binding_level = newlevel;
491 newlevel->tag_transparent = tag_transparent;
492 newlevel->more_cleanups_ok = 1;
494 newlevel->keep = keep;
495 #if defined(DEBUG_BINDING_LEVELS)
496 newlevel->binding_depth = binding_depth;
498 fprintf (stderr, "push %s level 0x%08x line %d\n",
499 (is_class_level) ? "class" : "block", newlevel, lineno);
502 #endif /* defined(DEBUG_BINDING_LEVELS) */
505 /* Find the innermost enclosing class scope, and reset
506 CLASS_BINDING_LEVEL appropriately. */
509 find_class_binding_level ()
511 struct cp_binding_level *level = current_binding_level;
513 while (level && level->parm_flag != 2)
514 level = level->level_chain;
515 if (level && level->parm_flag == 2)
516 class_binding_level = level;
518 class_binding_level = 0;
524 if (global_binding_level)
526 /* Cannot pop a level, if there are none left to pop. */
527 if (current_binding_level == global_binding_level)
530 /* Pop the current level, and free the structure for reuse. */
531 #if defined(DEBUG_BINDING_LEVELS)
534 fprintf (stderr, "pop %s level 0x%08x line %d\n",
535 (is_class_level) ? "class" : "block",
536 current_binding_level, lineno);
537 if (is_class_level != (current_binding_level == class_binding_level))
540 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
543 #endif /* defined(DEBUG_BINDING_LEVELS) */
545 register struct cp_binding_level *level = current_binding_level;
546 current_binding_level = current_binding_level->level_chain;
547 level->level_chain = free_binding_level;
548 #if 0 /* defined(DEBUG_BINDING_LEVELS) */
549 if (level->binding_depth != binding_depth)
551 #endif /* defined(DEBUG_BINDING_LEVELS) */
552 free_binding_level = level;
553 find_class_binding_level ();
558 suspend_binding_level ()
560 if (class_binding_level)
561 current_binding_level = class_binding_level;
563 if (global_binding_level)
565 /* Cannot suspend a level, if there are none left to suspend. */
566 if (current_binding_level == global_binding_level)
569 /* Suspend the current level. */
570 #if defined(DEBUG_BINDING_LEVELS)
573 fprintf (stderr, "suspend %s level 0x%08x line %d\n",
574 (is_class_level) ? "class" : "block",
575 current_binding_level, lineno);
576 if (is_class_level != (current_binding_level == class_binding_level))
579 fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
582 #endif /* defined(DEBUG_BINDING_LEVELS) */
583 current_binding_level = current_binding_level->level_chain;
584 find_class_binding_level ();
588 resume_binding_level (b)
589 struct cp_binding_level *b;
591 /* Resuming binding levels is meant only for namespaces,
592 and those cannot nest into classes. */
593 my_friendly_assert(!class_binding_level, 386);
594 /* Also, resuming a non-directly nested namespace is a no-no. */
595 my_friendly_assert(b->level_chain == current_binding_level, 386);
596 current_binding_level = b;
597 #if defined(DEBUG_BINDING_LEVELS)
598 b->binding_depth = binding_depth;
600 fprintf (stderr, "resume %s level 0x%08x line %d\n",
601 (is_class_level) ? "class" : "block", b, lineno);
604 #endif /* defined(DEBUG_BINDING_LEVELS) */
607 /* Create a new `struct cp_binding_level'. */
610 struct cp_binding_level *
611 make_binding_level ()
614 return (struct cp_binding_level *) ggc_alloc (sizeof (struct cp_binding_level));
617 /* Nonzero if we are currently in the global binding level. */
622 return current_binding_level == global_binding_level;
625 /* Return the innermost binding level that is not for a class scope. */
627 static struct cp_binding_level *
628 innermost_nonclass_level ()
630 struct cp_binding_level *b;
632 b = current_binding_level;
633 while (b->parm_flag == 2)
639 /* Nonzero if we are currently in a toplevel binding level. This
640 means either the global binding level or a namespace in a toplevel
641 binding level. Since there are no non-toplevel namespace levels,
642 this really means any namespace or template parameter level. We
643 also include a class whose context is toplevel. */
646 toplevel_bindings_p ()
648 struct cp_binding_level *b = innermost_nonclass_level ();
650 return b->namespace_p || b->template_parms_p;
653 /* Nonzero if this is a namespace scope, or if we are defining a class
654 which is itself at namespace scope, or whose enclosing class is
655 such a class, etc. */
658 namespace_bindings_p ()
660 struct cp_binding_level *b = innermost_nonclass_level ();
662 return b->namespace_p;
665 /* If KEEP is nonzero, make a BLOCK node for the next binding level,
666 unconditionally. Otherwise, use the normal logic to decide whether
667 or not to create a BLOCK. */
670 keep_next_level (keep)
673 keep_next_level_flag = keep;
676 /* Nonzero if the current level needs to have a BLOCK made. */
681 return (current_binding_level->blocks != NULL_TREE
682 || current_binding_level->keep
683 || current_binding_level->names != NULL_TREE
684 || (current_binding_level->tags != NULL_TREE
685 && !current_binding_level->tag_transparent));
689 declare_namespace_level ()
691 current_binding_level->namespace_p = 1;
694 /* Returns nonzero if this scope was created to store template
698 template_parm_scope_p ()
700 return current_binding_level->template_parms_p;
703 /* Returns the kind of template specialization we are currently
704 processing, given that it's declaration contained N_CLASS_SCOPES
705 explicit scope qualifications. */
708 current_tmpl_spec_kind (n_class_scopes)
711 int n_template_parm_scopes = 0;
712 int seen_specialization_p = 0;
713 int innermost_specialization_p = 0;
714 struct cp_binding_level *b;
716 /* Scan through the template parameter scopes. */
717 for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
719 /* If we see a specialization scope inside a parameter scope,
720 then something is wrong. That corresponds to a declaration
723 template <class T> template <> ...
725 which is always invalid since [temp.expl.spec] forbids the
726 specialization of a class member template if the enclosing
727 class templates are not explicitly specialized as well. */
728 if (b->template_spec_p)
730 if (n_template_parm_scopes == 0)
731 innermost_specialization_p = 1;
733 seen_specialization_p = 1;
735 else if (seen_specialization_p == 1)
736 return tsk_invalid_member_spec;
738 ++n_template_parm_scopes;
741 /* Handle explicit instantiations. */
742 if (processing_explicit_instantiation)
744 if (n_template_parm_scopes != 0)
745 /* We've seen a template parameter list during an explicit
746 instantiation. For example:
748 template <class T> template void f(int);
750 This is erroneous. */
751 return tsk_invalid_expl_inst;
753 return tsk_expl_inst;
756 if (n_template_parm_scopes < n_class_scopes)
757 /* We've not seen enough template headers to match all the
758 specialized classes present. For example:
760 template <class T> void R<T>::S<T>::f(int);
762 This is invalid; there needs to be one set of template
763 parameters for each class. */
764 return tsk_insufficient_parms;
765 else if (n_template_parm_scopes == n_class_scopes)
766 /* We're processing a non-template declaration (even though it may
767 be a member of a template class.) For example:
769 template <class T> void S<T>::f(int);
771 The `class T' maches the `S<T>', leaving no template headers
772 corresponding to the `f'. */
774 else if (n_template_parm_scopes > n_class_scopes + 1)
775 /* We've got too many template headers. For example:
777 template <> template <class T> void f (T);
779 There need to be more enclosing classes. */
780 return tsk_excessive_parms;
782 /* This must be a template. It's of the form:
784 template <class T> template <class U> void S<T>::f(U);
786 This is a specialization if the innermost level was a
787 specialization; otherwise it's just a definition of the
789 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
793 set_class_shadows (shadows)
796 class_binding_level->class_shadowed = shadows;
799 /* Enter a new binding level.
800 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
801 not for that of tags. */
804 pushlevel (tag_transparent)
807 struct cp_binding_level *newlevel;
809 if (cfun && !doing_semantic_analysis_p ())
812 /* Reuse or create a struct for this binding level. */
813 #if defined(DEBUG_BINDING_LEVELS)
815 #else /* !defined(DEBUG_BINDING_LEVELS) */
816 if (free_binding_level)
817 #endif /* !defined(DEBUG_BINDING_LEVELS) */
819 newlevel = free_binding_level;
820 free_binding_level = free_binding_level->level_chain;
823 newlevel = make_binding_level ();
825 push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
826 keep_next_level_flag = 0;
829 /* We're defining an object of type TYPE. If it needs a cleanup, but
830 we're not allowed to add any more objects with cleanups to the current
831 scope, create a new binding level. */
834 maybe_push_cleanup_level (type)
837 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
838 && current_binding_level->more_cleanups_ok == 0)
843 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
847 /* Enter a new scope. The KIND indicates what kind of scope is being
858 case sk_template_spec:
859 current_binding_level->template_spec_p = 1;
862 case sk_template_parms:
863 current_binding_level->template_parms_p = 1;
871 /* Exit the current scope. */
880 note_level_for_for ()
882 current_binding_level->is_for_scope = 1;
885 /* Record that the current binding level represents a try block. */
888 note_level_for_try ()
890 current_binding_level->is_try_scope = 1;
893 /* Record that the current binding level represents a catch block. */
896 note_level_for_catch ()
898 current_binding_level->is_catch_scope = 1;
901 /* For a binding between a name and an entity at a block scope,
902 this is the `struct cp_binding_level' for the block. */
903 #define BINDING_LEVEL(NODE) \
904 (((struct tree_binding*)(NODE))->scope.level)
906 /* A free list of CPLUS_BINDING nodes, connected by their
909 static GTY((deletable (""))) tree free_bindings;
911 /* Make DECL the innermost binding for ID. The LEVEL is the binding
912 level at which this declaration is being bound. */
915 push_binding (id, decl, level)
918 struct cp_binding_level* level;
924 binding = free_bindings;
925 free_bindings = TREE_CHAIN (binding);
928 binding = make_node (CPLUS_BINDING);
930 /* Now, fill in the binding information. */
931 BINDING_VALUE (binding) = decl;
932 BINDING_TYPE (binding) = NULL_TREE;
933 BINDING_LEVEL (binding) = level;
934 INHERITED_VALUE_BINDING_P (binding) = 0;
935 LOCAL_BINDING_P (binding) = (level != class_binding_level);
936 BINDING_HAS_LEVEL_P (binding) = 1;
938 /* And put it on the front of the list of bindings for ID. */
939 TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
940 IDENTIFIER_BINDING (id) = binding;
943 /* ID is already bound in the current scope. But, DECL is an
944 additional binding for ID in the same scope. This is the `struct
945 stat' hack whereby a non-typedef class-name or enum-name can be
946 bound at the same level as some other kind of entity. It's the
947 responsibility of the caller to check that inserting this name is
948 valid here. Returns nonzero if the new binding was successful. */
950 add_binding (id, decl)
954 tree binding = IDENTIFIER_BINDING (id);
957 if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
958 /* The new name is the type name. */
959 BINDING_TYPE (binding) = decl;
960 else if (!BINDING_VALUE (binding))
961 /* This situation arises when push_class_level_binding moves an
962 inherited type-binding out of the way to make room for a new
964 BINDING_VALUE (binding) = decl;
965 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
966 && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
968 /* The old binding was a type name. It was placed in
969 BINDING_VALUE because it was thought, at the point it was
970 declared, to be the only entity with such a name. Move the
971 type name into the type slot; it is now hidden by the new
973 BINDING_TYPE (binding) = BINDING_VALUE (binding);
974 BINDING_VALUE (binding) = decl;
975 INHERITED_VALUE_BINDING_P (binding) = 0;
977 else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
978 && TREE_CODE (decl) == TYPE_DECL
979 && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
980 && (same_type_p (TREE_TYPE (decl),
981 TREE_TYPE (BINDING_VALUE (binding)))
982 /* If either type involves template parameters, we must
983 wait until instantiation. */
984 || uses_template_parms (TREE_TYPE (decl))
985 || uses_template_parms (TREE_TYPE (BINDING_VALUE (binding)))))
986 /* We have two typedef-names, both naming the same type to have
987 the same name. This is OK because of:
991 In a given scope, a typedef specifier can be used to redefine
992 the name of any type declared in that scope to refer to the
993 type to which it already refers. */
995 /* There can be two block-scope declarations of the same variable,
996 so long as they are `extern' declarations. */
997 else if (TREE_CODE (decl) == VAR_DECL
998 && TREE_CODE (BINDING_VALUE (binding)) == VAR_DECL
999 && DECL_EXTERNAL (decl)
1000 && DECL_EXTERNAL (BINDING_VALUE (binding)))
1002 duplicate_decls (decl, BINDING_VALUE (binding));
1007 error ("declaration of `%#D'", decl);
1008 cp_error_at ("conflicts with previous declaration `%#D'",
1009 BINDING_VALUE (binding));
1016 /* Add DECL to the list of things declared in B. */
1019 add_decl_to_level (decl, b)
1021 struct cp_binding_level *b;
1023 if (TREE_CODE (decl) == NAMESPACE_DECL
1024 && !DECL_NAMESPACE_ALIAS (decl))
1026 TREE_CHAIN (decl) = b->namespaces;
1027 b->namespaces = decl;
1029 else if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
1031 TREE_CHAIN (decl) = b->vtables;
1036 /* We build up the list in reverse order, and reverse it later if
1038 TREE_CHAIN (decl) = b->names;
1044 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1045 binding level. If PUSH_USING is set in FLAGS, we know that DECL
1046 doesn't really belong to this binding level, that it got here
1047 through a using-declaration. */
1050 push_local_binding (id, decl, flags)
1055 struct cp_binding_level *b;
1057 /* Skip over any local classes. This makes sense if we call
1058 push_local_binding with a friend decl of a local class. */
1059 b = current_binding_level;
1060 while (b->parm_flag == 2)
1063 if (lookup_name_current_level (id))
1065 /* Supplement the existing binding. */
1066 if (!add_binding (id, decl))
1067 /* It didn't work. Something else must be bound at this
1068 level. Do not add DECL to the list of things to pop
1073 /* Create a new binding. */
1074 push_binding (id, decl, b);
1076 if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1077 /* We must put the OVERLOAD into a TREE_LIST since the
1078 TREE_CHAIN of an OVERLOAD is already used. Similarly for
1079 decls that got here through a using-declaration. */
1080 decl = build_tree_list (NULL_TREE, decl);
1082 /* And put DECL on the list of things declared by the current
1084 add_decl_to_level (decl, b);
1087 /* Bind DECL to ID in the class_binding_level. Returns nonzero if the
1088 binding was successful. */
1091 push_class_binding (id, decl)
1096 tree binding = IDENTIFIER_BINDING (id);
1099 /* Note that we declared this value so that we can issue an error if
1100 this is an invalid redeclaration of a name already used for some
1102 note_name_declared_in_class (id, decl);
1104 if (binding && BINDING_LEVEL (binding) == class_binding_level)
1105 /* Supplement the existing binding. */
1106 result = add_binding (id, decl);
1108 /* Create a new binding. */
1109 push_binding (id, decl, class_binding_level);
1111 /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1112 class-level declaration. Note that we do not use DECL here
1113 because of the possibility of the `struct stat' hack; if DECL is
1114 a class-name or enum-name we might prefer a field-name, or some
1116 IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1118 /* If this is a binding from a base class, mark it as such. */
1119 binding = IDENTIFIER_BINDING (id);
1120 if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1122 /* Any implicit typename must be from a base-class. The
1123 context for an implicit typename declaration is always
1124 the derived class in which the lookup was done, so the checks
1125 based on the context of DECL below will not trigger. */
1126 if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1127 INHERITED_VALUE_BINDING_P (binding) = 1;
1130 if (TREE_CODE (decl) == OVERLOAD)
1131 context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
1134 my_friendly_assert (DECL_P (decl), 0);
1135 context = context_for_name_lookup (decl);
1138 if (is_properly_derived_from (current_class_type, context))
1139 INHERITED_VALUE_BINDING_P (binding) = 1;
1141 INHERITED_VALUE_BINDING_P (binding) = 0;
1144 else if (BINDING_VALUE (binding) == decl)
1145 /* We only encounter a TREE_LIST when push_class_decls detects an
1146 ambiguity. Such an ambiguity can be overridden by a definition
1148 INHERITED_VALUE_BINDING_P (binding) = 1;
1153 /* Remove the binding for DECL which should be the innermost binding
1157 pop_binding (id, decl)
1163 if (id == NULL_TREE)
1164 /* It's easiest to write the loops that call this function without
1165 checking whether or not the entities involved have names. We
1166 get here for such an entity. */
1169 /* Get the innermost binding for ID. */
1170 binding = IDENTIFIER_BINDING (id);
1172 /* The name should be bound. */
1173 my_friendly_assert (binding != NULL_TREE, 0);
1175 /* The DECL will be either the ordinary binding or the type
1176 binding for this identifier. Remove that binding. */
1177 if (BINDING_VALUE (binding) == decl)
1178 BINDING_VALUE (binding) = NULL_TREE;
1179 else if (BINDING_TYPE (binding) == decl)
1180 BINDING_TYPE (binding) = NULL_TREE;
1184 if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1186 /* We're completely done with the innermost binding for this
1187 identifier. Unhook it from the list of bindings. */
1188 IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1190 /* Add it to the free list. */
1191 TREE_CHAIN (binding) = free_bindings;
1192 free_bindings = binding;
1194 /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
1196 BINDING_LEVEL (binding) = NULL;
1200 /* When a label goes out of scope, check to see if that label was used
1201 in a valid manner, and issue any appropriate warnings or errors. */
1204 pop_label (label, old_value)
1208 if (!processing_template_decl && doing_semantic_analysis_p ())
1210 if (DECL_INITIAL (label) == NULL_TREE)
1212 cp_error_at ("label `%D' used but not defined", label);
1213 /* Avoid crashing later. */
1214 define_label (input_filename, 1, DECL_NAME (label));
1216 else if (warn_unused_label && !TREE_USED (label))
1217 cp_warning_at ("label `%D' defined but not used", label);
1220 SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
1223 /* At the end of a function, all labels declared within the function
1224 go out of scope. BLOCK is the top-level block for the
1231 struct named_label_list *link;
1233 /* Clear out the definitions of all label names, since their scopes
1235 for (link = named_labels; link; link = link->next)
1237 pop_label (link->label_decl, link->old_value);
1238 /* Put the labels into the "variables" of the top-level block,
1239 so debugger can see them. */
1240 TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
1241 BLOCK_VARS (block) = link->label_decl;
1244 named_labels = NULL;
1247 /* Exit a binding level.
1248 Pop the level off, and restore the state of the identifier-decl mappings
1249 that were in effect when this level was entered.
1251 If KEEP == 1, this level had explicit declarations, so
1252 and create a "block" (a BLOCK node) for the level
1253 to record its declarations and subblocks for symbol table output.
1255 If FUNCTIONBODY is nonzero, this level is the body of a function,
1256 so create a block as if KEEP were set and also clear out all
1259 If REVERSE is nonzero, reverse the order of decls before putting
1260 them into the BLOCK. */
1263 poplevel (keep, reverse, functionbody)
1269 /* The chain of decls was accumulated in reverse order.
1270 Put it into forward order, just for cleanliness. */
1272 int tmp = functionbody;
1273 int real_functionbody;
1276 tree block = NULL_TREE;
1278 int leaving_for_scope;
1280 if (cfun && !doing_semantic_analysis_p ())
1283 my_friendly_assert (current_binding_level->parm_flag != 2,
1286 real_functionbody = (current_binding_level->keep == 2
1287 ? ((functionbody = 0), tmp) : functionbody);
1288 tags = functionbody >= 0 ? current_binding_level->tags : 0;
1289 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1291 my_friendly_assert (!current_binding_level->class_shadowed,
1294 /* We used to use KEEP == 2 to indicate that the new block should go
1295 at the beginning of the list of blocks at this binding level,
1296 rather than the end. This hack is no longer used. */
1297 my_friendly_assert (keep == 0 || keep == 1, 0);
1299 if (current_binding_level->keep == 1)
1302 /* Any uses of undefined labels, and any defined labels, now operate
1303 under constraints of next binding contour. */
1304 if (cfun && !functionbody)
1306 struct cp_binding_level *level_chain;
1307 level_chain = current_binding_level->level_chain;
1310 struct named_label_use_list *uses;
1311 struct named_label_list *labels;
1312 for (labels = named_labels; labels; labels = labels->next)
1313 if (labels->binding_level == current_binding_level)
1316 if (current_binding_level->is_try_scope)
1317 labels->in_try_scope = 1;
1318 if (current_binding_level->is_catch_scope)
1319 labels->in_catch_scope = 1;
1320 for (decl = labels->names_in_scope; decl;
1321 decl = TREE_CHAIN (decl))
1322 if (decl_jump_unsafe (decl))
1323 labels->bad_decls = tree_cons (NULL_TREE, decl,
1325 labels->binding_level = level_chain;
1326 labels->names_in_scope = level_chain->names;
1329 for (uses = named_label_uses; uses; uses = uses->next)
1330 if (uses->binding_level == current_binding_level)
1332 uses->binding_level = level_chain;
1333 uses->names_in_scope = level_chain->names;
1338 /* Get the decls in the order they were written.
1339 Usually current_binding_level->names is in reverse order.
1340 But parameter decls were previously put in forward order. */
1343 current_binding_level->names
1344 = decls = nreverse (current_binding_level->names);
1346 decls = current_binding_level->names;
1348 /* Output any nested inline functions within this block
1349 if they weren't already output. */
1350 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1351 if (TREE_CODE (decl) == FUNCTION_DECL
1352 && ! TREE_ASM_WRITTEN (decl)
1353 && DECL_INITIAL (decl) != NULL_TREE
1354 && TREE_ADDRESSABLE (decl)
1355 && decl_function_context (decl) == current_function_decl)
1357 /* If this decl was copied from a file-scope decl
1358 on account of a block-scope extern decl,
1359 propagate TREE_ADDRESSABLE to the file-scope decl. */
1360 if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1361 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1364 push_function_context ();
1365 output_inline_function (decl);
1366 pop_function_context ();
1370 /* When not in function-at-a-time mode, expand_end_bindings will
1371 warn about unused variables. But, in function-at-a-time mode
1372 expand_end_bindings is not passed the list of variables in the
1373 current scope, and therefore no warning is emitted. So, we
1374 explicitly warn here. */
1375 if (!processing_template_decl)
1376 warn_about_unused_variables (getdecls ());
1378 /* If there were any declarations or structure tags in that level,
1379 or if this level is a function body,
1380 create a BLOCK to record them for the life of this function. */
1382 if (keep == 1 || functionbody)
1383 block = make_node (BLOCK);
1384 if (block != NULL_TREE)
1386 BLOCK_VARS (block) = decls;
1387 BLOCK_SUBBLOCKS (block) = subblocks;
1390 /* In each subblock, record that this is its superior. */
1392 for (link = subblocks; link; link = TREE_CHAIN (link))
1393 BLOCK_SUPERCONTEXT (link) = block;
1395 /* We still support the old for-scope rules, whereby the variables
1396 in a for-init statement were in scope after the for-statement
1397 ended. We only use the new rules in flag_new_for_scope is
1400 = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1402 /* Remove declarations for all the DECLs in this level. */
1403 for (link = decls; link; link = TREE_CHAIN (link))
1405 if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
1406 && DECL_NAME (link))
1409 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1413 ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1415 ns_binding = NULL_TREE;
1418 && (BINDING_LEVEL (outer_binding)
1419 == current_binding_level->level_chain))
1420 /* We have something like:
1425 and we are leaving the `for' scope. There's no reason to
1426 keep the binding of the inner `i' in this case. */
1427 pop_binding (DECL_NAME (link), link);
1428 else if ((outer_binding
1429 && (TREE_CODE (BINDING_VALUE (outer_binding))
1432 && TREE_CODE (ns_binding) == TYPE_DECL))
1433 /* Here, we have something like:
1441 We must pop the for-scope binding so we know what's a
1442 type and what isn't. */
1443 pop_binding (DECL_NAME (link), link);
1446 /* Mark this VAR_DECL as dead so that we can tell we left it
1447 there only for backward compatibility. */
1448 DECL_DEAD_FOR_LOCAL (link) = 1;
1450 /* Keep track of what should of have happenned when we
1451 popped the binding. */
1452 if (outer_binding && BINDING_VALUE (outer_binding))
1453 DECL_SHADOWED_FOR_VAR (link)
1454 = BINDING_VALUE (outer_binding);
1456 /* Add it to the list of dead variables in the next
1457 outermost binding to that we can remove these when we
1458 leave that binding. */
1459 current_binding_level->level_chain->dead_vars_from_for
1460 = tree_cons (NULL_TREE, link,
1461 current_binding_level->level_chain->
1462 dead_vars_from_for);
1464 /* Although we don't pop the CPLUS_BINDING, we do clear
1465 its BINDING_LEVEL since the level is going away now. */
1466 BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1472 /* Remove the binding. */
1474 if (TREE_CODE (decl) == TREE_LIST)
1475 decl = TREE_VALUE (decl);
1477 pop_binding (DECL_NAME (decl), decl);
1478 else if (TREE_CODE (decl) == OVERLOAD)
1479 pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1485 /* Remove declarations for any `for' variables from inner scopes
1486 that we kept around. */
1487 for (link = current_binding_level->dead_vars_from_for;
1488 link; link = TREE_CHAIN (link))
1489 pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1491 /* Restore the IDENTIFIER_TYPE_VALUEs. */
1492 for (link = current_binding_level->type_shadowed;
1493 link; link = TREE_CHAIN (link))
1494 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1496 /* Restore the IDENTIFIER_LABEL_VALUEs for local labels. */
1497 for (link = current_binding_level->shadowed_labels;
1499 link = TREE_CHAIN (link))
1500 pop_label (TREE_VALUE (link), TREE_PURPOSE (link));
1502 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1503 list if a `using' declaration put them there. The debugging
1504 back-ends won't understand OVERLOAD, so we remove them here.
1505 Because the BLOCK_VARS are (temporarily) shared with
1506 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1507 popped all the bindings. */
1512 for (d = &BLOCK_VARS (block); *d; )
1514 if (TREE_CODE (*d) == TREE_LIST)
1515 *d = TREE_CHAIN (*d);
1517 d = &TREE_CHAIN (*d);
1521 /* If the level being exited is the top level of a function,
1522 check over all the labels. */
1525 /* Since this is the top level block of a function, the vars are
1526 the function's parameters. Don't leave them in the BLOCK
1527 because they are found in the FUNCTION_DECL instead. */
1528 BLOCK_VARS (block) = 0;
1532 tmp = current_binding_level->keep;
1534 pop_binding_level ();
1536 DECL_INITIAL (current_function_decl) = block;
1538 current_binding_level->blocks
1539 = chainon (current_binding_level->blocks, block);
1541 /* If we did not make a block for the level just exited,
1542 any blocks made for inner levels
1543 (since they cannot be recorded as subblocks in that level)
1544 must be carried forward so they will later become subblocks
1545 of something else. */
1547 current_binding_level->blocks
1548 = chainon (current_binding_level->blocks, subblocks);
1550 /* Each and every BLOCK node created here in `poplevel' is important
1551 (e.g. for proper debugging information) so if we created one
1552 earlier, mark it as "used". */
1554 TREE_USED (block) = 1;
1556 /* Take care of compiler's internal binding structures. */
1562 = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1565 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1566 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1569 block = poplevel (keep, reverse, functionbody);
1575 /* Delete the node BLOCK from the current binding level.
1576 This is used for the block inside a stmt expr ({...})
1577 so that the block can be reinserted where appropriate. */
1580 delete_block (block)
1584 if (current_binding_level->blocks == block)
1585 current_binding_level->blocks = TREE_CHAIN (block);
1586 for (t = current_binding_level->blocks; t;)
1588 if (TREE_CHAIN (t) == block)
1589 TREE_CHAIN (t) = TREE_CHAIN (block);
1593 TREE_CHAIN (block) = NULL_TREE;
1594 /* Clear TREE_USED which is always set by poplevel.
1595 The flag is set again if insert_block is called. */
1596 TREE_USED (block) = 0;
1599 /* Insert BLOCK at the end of the list of subblocks of the
1600 current binding level. This is used when a BIND_EXPR is expanded,
1601 to handle the BLOCK node inside the BIND_EXPR. */
1604 insert_block (block)
1607 TREE_USED (block) = 1;
1608 current_binding_level->blocks
1609 = chainon (current_binding_level->blocks, block);
1612 /* Set the BLOCK node for the innermost scope
1613 (the one we are currently in). */
1617 tree block ATTRIBUTE_UNUSED;
1619 /* The RTL expansion machinery requires us to provide this callback,
1620 but it is not applicable in function-at-a-time mode. */
1621 my_friendly_assert (cfun && !doing_semantic_analysis_p (), 20000911);
1624 /* Do a pushlevel for class declarations. */
1629 register struct cp_binding_level *newlevel;
1631 /* Reuse or create a struct for this binding level. */
1632 #if defined(DEBUG_BINDING_LEVELS)
1634 #else /* !defined(DEBUG_BINDING_LEVELS) */
1635 if (free_binding_level)
1636 #endif /* !defined(DEBUG_BINDING_LEVELS) */
1638 newlevel = free_binding_level;
1639 free_binding_level = free_binding_level->level_chain;
1642 newlevel = make_binding_level ();
1644 #if defined(DEBUG_BINDING_LEVELS)
1646 #endif /* defined(DEBUG_BINDING_LEVELS) */
1648 push_binding_level (newlevel, 0, 0);
1650 class_binding_level = current_binding_level;
1651 class_binding_level->parm_flag = 2;
1652 class_binding_level->this_class = current_class_type;
1655 /* ...and a poplevel for class declarations. */
1660 register struct cp_binding_level *level = class_binding_level;
1663 my_friendly_assert (level != 0, 354);
1665 /* If we're leaving a toplevel class, don't bother to do the setting
1666 of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1667 shouldn't even be used when current_class_type isn't set, and second,
1668 if we don't touch it here, we're able to use the cache effect if the
1669 next time we're entering a class scope, it is the same class. */
1670 if (current_class_depth != 1)
1672 struct cp_binding_level* b;
1674 /* Clear out our IDENTIFIER_CLASS_VALUEs. */
1675 for (shadowed = level->class_shadowed;
1677 shadowed = TREE_CHAIN (shadowed))
1678 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1680 /* Find the next enclosing class, and recreate
1681 IDENTIFIER_CLASS_VALUEs appropriate for that class. */
1682 b = level->level_chain;
1683 while (b && b->parm_flag != 2)
1687 for (shadowed = b->class_shadowed;
1689 shadowed = TREE_CHAIN (shadowed))
1693 t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1694 while (t && BINDING_LEVEL (t) != b)
1698 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1699 = BINDING_VALUE (t);
1703 /* Remember to save what IDENTIFIER's were bound in this scope so we
1704 can recover from cache misses. */
1706 previous_class_type = current_class_type;
1707 previous_class_values = class_binding_level->class_shadowed;
1709 for (shadowed = level->type_shadowed;
1711 shadowed = TREE_CHAIN (shadowed))
1712 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1714 /* Remove the bindings for all of the class-level declarations. */
1715 for (shadowed = level->class_shadowed;
1717 shadowed = TREE_CHAIN (shadowed))
1718 pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1720 /* Now, pop out of the binding level which we created up in the
1721 `pushlevel_class' routine. */
1722 #if defined(DEBUG_BINDING_LEVELS)
1724 #endif /* defined(DEBUG_BINDING_LEVELS) */
1726 pop_binding_level ();
1729 /* We are entering the scope of a class. Clear IDENTIFIER_CLASS_VALUE
1730 for any names in enclosing classes. */
1733 clear_identifier_class_values ()
1737 if (!class_binding_level)
1740 for (t = class_binding_level->class_shadowed;
1743 IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1746 /* Returns nonzero if T is a virtual function table. */
1749 vtable_decl_p (t, data)
1751 void *data ATTRIBUTE_UNUSED;
1753 return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1756 /* Returns nonzero if T is a TYPE_DECL for a type with virtual
1760 vtype_decl_p (t, data)
1762 void *data ATTRIBUTE_UNUSED;
1764 return (TREE_CODE (t) == TYPE_DECL
1765 && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1766 && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
1769 /* Return the declarations that are members of the namespace NS. */
1772 cp_namespace_decls (ns)
1775 return NAMESPACE_LEVEL (ns)->names;
1778 struct walk_globals_data {
1779 walk_globals_pred p;
1784 /* Walk the vtable declarations in NAMESPACE. Whenever one is found
1785 for which P returns nonzero, call F with its address. If any call
1786 to F returns a nonzero value, return a nonzero value. */
1789 walk_vtables_r (namespace, data)
1793 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1794 walk_globals_fn f = wgd->f;
1795 void *d = wgd->data;
1796 tree decl = NAMESPACE_LEVEL (namespace)->vtables;
1799 for (; decl ; decl = TREE_CHAIN (decl))
1800 result |= (*f) (&decl, d);
1805 /* Walk the vtable declarations. Whenever one is found for which P
1806 returns nonzero, call F with its address. If any call to F
1807 returns a nonzero value, return a nonzero value. */
1809 walk_vtables (walk_globals_pred p, walk_globals_fn f, void *data)
1811 struct walk_globals_data wgd;
1816 return walk_namespaces (walk_vtables_r, &wgd);
1819 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1820 itself, calling F for each. The DATA is passed to F as well. */
1823 walk_namespaces_r (namespace, f, data)
1825 walk_namespaces_fn f;
1829 tree current = NAMESPACE_LEVEL (namespace)->namespaces;
1831 result |= (*f) (namespace, data);
1833 for (; current; current = TREE_CHAIN (current))
1834 result |= walk_namespaces_r (current, f, data);
1839 /* Walk all the namespaces, calling F for each. The DATA is passed to
1843 walk_namespaces (f, data)
1844 walk_namespaces_fn f;
1847 return walk_namespaces_r (global_namespace, f, data);
1850 /* Walk the global declarations in NAMESPACE. Whenever one is found
1851 for which P returns nonzero, call F with its address. If any call
1852 to F returns a nonzero value, return a nonzero value. */
1855 walk_globals_r (namespace, data)
1859 struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1860 walk_globals_pred p = wgd->p;
1861 walk_globals_fn f = wgd->f;
1862 void *d = wgd->data;
1866 t = &NAMESPACE_LEVEL (namespace)->names;
1873 result |= (*f) (t, d);
1875 /* If F changed *T, then *T still points at the next item to
1878 t = &TREE_CHAIN (*t);
1884 /* Walk the global declarations. Whenever one is found for which P
1885 returns true, call F with its address. If any call to F
1886 returns true, return true. */
1889 walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
1891 struct walk_globals_data wgd;
1896 return walk_namespaces (walk_globals_r, &wgd);
1899 /* Call wrapup_globals_declarations for the globals in NAMESPACE. If
1900 DATA is non-NULL, this is the last time we will call
1901 wrapup_global_declarations for this NAMESPACE. */
1904 wrapup_globals_for_namespace (namespace, data)
1908 tree globals = cp_namespace_decls (namespace);
1909 int len = NAMESPACE_LEVEL (namespace)->names_size;
1910 tree *vec = (tree *) alloca (sizeof (tree) * len);
1914 int last_time = (data != 0);
1916 if (last_time && namespace == global_namespace)
1917 /* Let compile_file handle the global namespace. */
1920 /* Process the decls in reverse order--earliest first.
1921 Put them into VEC from back to front, then take out from front. */
1922 for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1923 vec[len - i - 1] = decl;
1927 check_global_declarations (vec, len);
1931 /* Write out any globals that need to be output. */
1932 result = wrapup_global_declarations (vec, len);
1938 /* For debugging. */
1939 static int no_print_functions = 0;
1940 static int no_print_builtins = 0;
1943 print_binding_level (lvl)
1944 struct cp_binding_level *lvl;
1948 fprintf (stderr, " blocks=");
1949 fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1950 if (lvl->tag_transparent)
1951 fprintf (stderr, " tag-transparent");
1952 if (lvl->more_cleanups_ok)
1953 fprintf (stderr, " more-cleanups-ok");
1954 if (lvl->have_cleanups)
1955 fprintf (stderr, " have-cleanups");
1956 fprintf (stderr, "\n");
1959 fprintf (stderr, " names:\t");
1960 /* We can probably fit 3 names to a line? */
1961 for (t = lvl->names; t; t = TREE_CHAIN (t))
1963 if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
1965 if (no_print_builtins
1966 && (TREE_CODE (t) == TYPE_DECL)
1967 && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1970 /* Function decls tend to have longer names. */
1971 if (TREE_CODE (t) == FUNCTION_DECL)
1978 fprintf (stderr, "\n\t");
1981 print_node_brief (stderr, "", t, 0);
1982 if (t == error_mark_node)
1986 fprintf (stderr, "\n");
1990 fprintf (stderr, " tags:\t");
1992 for (t = lvl->tags; t; t = TREE_CHAIN (t))
1994 if (TREE_PURPOSE (t) == NULL_TREE)
1996 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2003 fprintf (stderr, "\n\t");
2006 if (TREE_PURPOSE (t) == NULL_TREE)
2008 print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2009 fprintf (stderr, ">");
2011 else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2012 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2015 print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2016 print_node_brief (stderr, "", TREE_VALUE (t), 0);
2017 fprintf (stderr, ">");
2021 fprintf (stderr, "\n");
2023 if (lvl->class_shadowed)
2025 fprintf (stderr, " class-shadowed:");
2026 for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2028 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2030 fprintf (stderr, "\n");
2032 if (lvl->type_shadowed)
2034 fprintf (stderr, " type-shadowed:");
2035 for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2037 fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2039 fprintf (stderr, "\n");
2044 print_other_binding_stack (stack)
2045 struct cp_binding_level *stack;
2047 struct cp_binding_level *level;
2048 for (level = stack; level != global_binding_level; level = level->level_chain)
2050 fprintf (stderr, "binding level ");
2051 fprintf (stderr, HOST_PTR_PRINTF, level);
2052 fprintf (stderr, "\n");
2053 print_binding_level (level);
2058 print_binding_stack ()
2060 struct cp_binding_level *b;
2061 fprintf (stderr, "current_binding_level=");
2062 fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2063 fprintf (stderr, "\nclass_binding_level=");
2064 fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2065 fprintf (stderr, "\nglobal_binding_level=");
2066 fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2067 fprintf (stderr, "\n");
2068 if (class_binding_level)
2070 for (b = class_binding_level; b; b = b->level_chain)
2071 if (b == current_binding_level)
2074 b = class_binding_level;
2076 b = current_binding_level;
2079 b = current_binding_level;
2080 print_other_binding_stack (b);
2081 fprintf (stderr, "global:\n");
2082 print_binding_level (global_binding_level);
2085 /* Namespace binding access routines: The namespace_bindings field of
2086 the identifier is polymorphic, with three possible values:
2087 NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2088 indicating the BINDING_VALUE of global_namespace. */
2090 /* Check whether the a binding for the name to scope is known.
2091 Assumes that the bindings of the name are already a list
2092 of bindings. Returns the binding found, or NULL_TREE. */
2095 find_binding (name, scope)
2099 tree iter, prev = NULL_TREE;
2101 scope = ORIGINAL_NAMESPACE (scope);
2103 for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2104 iter = TREE_CHAIN (iter))
2106 my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2107 if (BINDING_SCOPE (iter) == scope)
2109 /* Move binding found to the front of the list, so
2110 subsequent lookups will find it faster. */
2113 TREE_CHAIN (prev) = TREE_CHAIN (iter);
2114 TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2115 IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2124 /* Always returns a binding for name in scope. If the
2125 namespace_bindings is not a list, convert it to one first.
2126 If no binding is found, make a new one. */
2129 binding_for_name (name, scope)
2133 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2136 scope = ORIGINAL_NAMESPACE (scope);
2138 if (b && TREE_CODE (b) != CPLUS_BINDING)
2140 /* Get rid of optimization for global scope. */
2141 IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2142 BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2143 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2145 if (b && (result = find_binding (name, scope)))
2147 /* Not found, make a new one. */
2148 result = make_node (CPLUS_BINDING);
2149 TREE_CHAIN (result) = b;
2150 IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2151 BINDING_SCOPE (result) = scope;
2152 BINDING_TYPE (result) = NULL_TREE;
2153 BINDING_VALUE (result) = NULL_TREE;
2157 /* Return the binding value for name in scope, considering that
2158 namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2161 namespace_binding (name, scope)
2165 tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2168 if (scope == NULL_TREE)
2169 scope = global_namespace;
2170 if (TREE_CODE (b) != CPLUS_BINDING)
2171 return (scope == global_namespace) ? b : NULL_TREE;
2172 name = find_binding (name,scope);
2173 if (name == NULL_TREE)
2175 return BINDING_VALUE (name);
2178 /* Set the binding value for name in scope. If modifying the binding
2179 of global_namespace is attempted, try to optimize it. */
2182 set_namespace_binding (name, scope, val)
2189 if (scope == NULL_TREE)
2190 scope = global_namespace;
2192 if (scope == global_namespace)
2194 b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2195 if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2197 IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2201 b = binding_for_name (name, scope);
2202 BINDING_VALUE (b) = val;
2205 /* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
2206 select a name that is unique to this compilation unit. */
2209 push_namespace (name)
2214 int implicit_use = 0;
2216 if (!global_namespace)
2218 /* This must be ::. */
2219 my_friendly_assert (name == get_identifier ("::"), 377);
2224 /* The name of anonymous namespace is unique for the translation
2226 if (!anonymous_namespace_name)
2227 anonymous_namespace_name = get_file_function_name ('N');
2228 name = anonymous_namespace_name;
2229 d = IDENTIFIER_NAMESPACE_VALUE (name);
2231 /* Reopening anonymous namespace. */
2237 /* Check whether this is an extended namespace definition. */
2238 d = IDENTIFIER_NAMESPACE_VALUE (name);
2239 if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2242 if (DECL_NAMESPACE_ALIAS (d))
2244 error ("namespace alias `%D' not allowed here, assuming `%D'",
2245 d, DECL_NAMESPACE_ALIAS (d));
2246 d = DECL_NAMESPACE_ALIAS (d);
2253 /* Make a new namespace, binding the name to it. */
2254 d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2255 /* The global namespace is not pushed, and the global binding
2256 level is set elsewhere. */
2259 DECL_CONTEXT (d) = FROB_CONTEXT (current_namespace);
2262 declare_namespace_level ();
2263 NAMESPACE_LEVEL (d) = current_binding_level;
2267 resume_binding_level (NAMESPACE_LEVEL (d));
2270 do_using_directive (d);
2271 /* Enter the name space. */
2272 current_namespace = d;
2275 /* Pop from the scope of the current namespace. */
2280 my_friendly_assert (current_namespace != global_namespace, 20010801);
2281 current_namespace = CP_DECL_CONTEXT (current_namespace);
2282 /* The binding level is not popped, as it might be re-opened later. */
2283 suspend_binding_level ();
2286 /* Push into the scope of the namespace NS, even if it is deeply
2287 nested within another namespace. */
2290 push_nested_namespace (ns)
2293 if (ns == global_namespace)
2294 push_to_top_level ();
2297 push_nested_namespace (CP_DECL_CONTEXT (ns));
2298 push_namespace (DECL_NAME (ns));
2302 /* Pop back from the scope of the namespace NS, which was previously
2303 entered with push_nested_namespace. */
2306 pop_nested_namespace (ns)
2309 while (ns != global_namespace)
2312 ns = CP_DECL_CONTEXT (ns);
2315 pop_from_top_level ();
2319 /* Subroutines for reverting temporarily to top-level for instantiation
2320 of templates and such. We actually need to clear out the class- and
2321 local-value slots of all identifiers, so that only the global values
2322 are at all visible. Simply setting current_binding_level to the global
2323 scope isn't enough, because more binding levels may be pushed. */
2324 struct saved_scope *scope_chain;
2327 store_bindings (names, old_bindings)
2328 tree names, old_bindings;
2331 tree search_bindings = old_bindings;
2333 for (t = names; t; t = TREE_CHAIN (t))
2335 tree binding, t1, id;
2337 if (TREE_CODE (t) == TREE_LIST)
2338 id = TREE_PURPOSE (t);
2343 /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2344 we have no IDENTIFIER_BINDING if we have left the class
2345 scope, but cached the class-level declarations. */
2346 || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2349 for (t1 = search_bindings; t1; t1 = TREE_CHAIN (t1))
2350 if (TREE_VEC_ELT (t1, 0) == id)
2353 my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2354 binding = make_tree_vec (4);
2355 TREE_VEC_ELT (binding, 0) = id;
2356 TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2357 TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2358 TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2359 IDENTIFIER_BINDING (id) = NULL_TREE;
2360 IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2361 TREE_CHAIN (binding) = old_bindings;
2362 old_bindings = binding;
2366 return old_bindings;
2370 maybe_push_to_top_level (pseudo)
2373 struct saved_scope *s;
2374 struct cp_binding_level *b;
2378 s = (struct saved_scope *) ggc_alloc_cleared (sizeof (struct saved_scope));
2380 b = scope_chain ? current_binding_level : 0;
2382 /* If we're in the middle of some function, save our state. */
2386 push_function_context_to (NULL_TREE);
2391 old_bindings = NULL_TREE;
2392 if (scope_chain && previous_class_type)
2393 old_bindings = store_bindings (previous_class_values, old_bindings);
2395 /* Have to include global_binding_level, because class-level decls
2396 aren't listed anywhere useful. */
2397 for (; b; b = b->level_chain)
2401 /* Template IDs are inserted into the global level. If they were
2402 inserted into namespace level, finish_file wouldn't find them
2403 when doing pending instantiations. Therefore, don't stop at
2404 namespace level, but continue until :: . */
2405 if (b == global_binding_level || (pseudo && b->template_parms_p))
2408 old_bindings = store_bindings (b->names, old_bindings);
2409 /* We also need to check class_shadowed to save class-level type
2410 bindings, since pushclass doesn't fill in b->names. */
2411 if (b->parm_flag == 2)
2412 old_bindings = store_bindings (b->class_shadowed, old_bindings);
2414 /* Unwind type-value slots back to top level. */
2415 for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2416 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2418 s->prev = scope_chain;
2419 s->old_bindings = old_bindings;
2421 s->need_pop_function_context = need_pop;
2422 s->function_decl = current_function_decl;
2423 s->last_parms = last_function_parms;
2424 s->check_access = flag_access_control;
2427 current_function_decl = NULL_TREE;
2428 VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2429 current_lang_name = lang_name_cplusplus;
2430 current_namespace = global_namespace;
2434 push_to_top_level ()
2436 maybe_push_to_top_level (0);
2440 pop_from_top_level ()
2442 struct saved_scope *s = scope_chain;
2445 /* Clear out class-level bindings cache. */
2446 if (previous_class_type)
2447 invalidate_class_lookup_cache ();
2449 current_lang_base = 0;
2451 scope_chain = s->prev;
2452 for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2454 tree id = TREE_VEC_ELT (t, 0);
2456 SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2457 IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2458 IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2461 /* If we were in the middle of compiling a function, restore our
2463 if (s->need_pop_function_context)
2464 pop_function_context_from (NULL_TREE);
2465 current_function_decl = s->function_decl;
2466 last_function_parms = s->last_parms;
2469 /* Push a definition of struct, union or enum tag "name".
2470 into binding_level "b". "type" should be the type node,
2471 We assume that the tag "name" is not already defined.
2473 Note that the definition may really be just a forward reference.
2474 In that case, the TYPE_SIZE will be a NULL_TREE.
2476 C++ gratuitously puts all these tags in the name space. */
2478 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2479 record the shadowed value for this binding contour. TYPE is
2480 the type that ID maps to. */
2483 set_identifier_type_value_with_scope (id, type, b)
2486 struct cp_binding_level *b;
2488 if (!b->namespace_p)
2490 /* Shadow the marker, not the real thing, so that the marker
2491 gets restored later. */
2492 tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2494 = tree_cons (id, old_type_value, b->type_shadowed);
2498 tree binding = binding_for_name (id, current_namespace);
2499 BINDING_TYPE (binding) = type;
2500 /* Store marker instead of real type. */
2501 type = global_type_node;
2503 SET_IDENTIFIER_TYPE_VALUE (id, type);
2506 /* As set_identifier_type_value_with_scope, but using current_binding_level. */
2509 set_identifier_type_value (id, type)
2513 set_identifier_type_value_with_scope (id, type, current_binding_level);
2516 /* Return the type associated with id. */
2519 identifier_type_value (id)
2522 /* There is no type with that name, anywhere. */
2523 if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2525 /* This is not the type marker, but the real thing. */
2526 if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2527 return REAL_IDENTIFIER_TYPE_VALUE (id);
2528 /* Have to search for it. It must be on the global level, now.
2529 Ask lookup_name not to return non-types. */
2530 id = lookup_name_real (id, 2, 1, 0, LOOKUP_COMPLAIN);
2532 return TREE_TYPE (id);
2536 /* Pop off extraneous binding levels left over due to syntax errors.
2538 We don't pop past namespaces, as they might be valid. */
2543 #ifdef DEBUG_BINDING_LEVELS
2544 fprintf (stderr, "XXX entering pop_everything ()\n");
2546 while (!toplevel_bindings_p ())
2548 if (current_binding_level->parm_flag == 2)
2549 pop_nested_class ();
2553 #ifdef DEBUG_BINDING_LEVELS
2554 fprintf (stderr, "XXX leaving pop_everything ()\n");
2558 /* The type TYPE is being declared. If it is a class template, or a
2559 specialization of a class template, do any processing required and
2560 perform error-checking. If IS_FRIEND is nonzero, this TYPE is
2561 being declared a friend. B is the binding level at which this TYPE
2564 Returns the TYPE_DECL for TYPE, which may have been altered by this
2568 maybe_process_template_type_declaration (type, globalize, b)
2571 struct cp_binding_level* b;
2573 tree decl = TYPE_NAME (type);
2575 if (processing_template_parmlist)
2576 /* You can't declare a new template type in a template parameter
2577 list. But, you can declare a non-template type:
2579 template <class A*> struct S;
2581 is a forward-declaration of `A'. */
2585 maybe_check_template_type (type);
2587 my_friendly_assert (IS_AGGR_TYPE (type)
2588 || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2591 if (processing_template_decl)
2593 /* This may change after the call to
2594 push_template_decl_real, but we want the original value. */
2595 tree name = DECL_NAME (decl);
2597 decl = push_template_decl_real (decl, globalize);
2598 /* If the current binding level is the binding level for the
2599 template parameters (see the comment in
2600 begin_template_parm_list) and the enclosing level is a class
2601 scope, and we're not looking at a friend, push the
2602 declaration of the member class into the class scope. In the
2603 friend case, push_template_decl will already have put the
2604 friend into global scope, if appropriate. */
2605 if (TREE_CODE (type) != ENUMERAL_TYPE
2606 && !globalize && b->template_parms_p
2607 && b->level_chain->parm_flag == 2)
2609 finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2610 /* Put this tag on the list of tags for the class, since
2611 that won't happen below because B is not the class
2612 binding level, but is instead the pseudo-global level. */
2613 b->level_chain->tags =
2614 tree_cons (name, type, b->level_chain->tags);
2615 if (!COMPLETE_TYPE_P (current_class_type))
2617 maybe_add_class_template_decl_list (current_class_type,
2618 type, /*friend_p=*/0);
2619 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2628 /* In C++, you don't have to write `struct S' to refer to `S'; you
2629 can just use `S'. We accomplish this by creating a TYPE_DECL as
2630 if the user had written `typedef struct S S'. Create and return
2631 the TYPE_DECL for TYPE. */
2634 create_implicit_typedef (name, type)
2640 decl = build_decl (TYPE_DECL, name, type);
2641 DECL_ARTIFICIAL (decl) = 1;
2642 /* There are other implicit type declarations, like the one *within*
2643 a class that allows you to write `S::S'. We must distinguish
2645 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2646 TYPE_NAME (type) = decl;
2651 /* Remember a local name for name-mangling purposes. */
2654 push_local_name (decl)
2661 VARRAY_TREE_INIT (local_names, 8, "local_names");
2663 name = DECL_NAME (decl);
2665 nelts = VARRAY_ACTIVE_SIZE (local_names);
2666 for (i = 0; i < nelts; i++)
2668 t = VARRAY_TREE (local_names, i);
2669 if (DECL_NAME (t) == name)
2671 if (!DECL_LANG_SPECIFIC (decl))
2672 retrofit_lang_decl (decl);
2673 DECL_LANG_SPECIFIC (decl)->decl_flags.u2sel = 1;
2674 if (DECL_LANG_SPECIFIC (t))
2675 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
2677 DECL_DISCRIMINATOR (decl) = 1;
2679 VARRAY_TREE (local_names, i) = decl;
2684 VARRAY_PUSH_TREE (local_names, decl);
2687 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2688 Normally put it into the inner-most non-tag-transparent scope,
2689 but if GLOBALIZE is true, put it in the inner-most non-class scope.
2690 The latter is needed for implicit declarations. */
2693 pushtag (name, type, globalize)
2697 register struct cp_binding_level *b;
2699 b = current_binding_level;
2700 while (b->tag_transparent
2701 || (b->parm_flag == 2
2703 /* We may be defining a new type in the initializer
2704 of a static member variable. We allow this when
2705 not pedantic, and it is particularly useful for
2706 type punning via an anonymous union. */
2707 || COMPLETE_TYPE_P (b->this_class))))
2710 b->tags = tree_cons (name, type, b->tags);
2714 /* Do C++ gratuitous typedefing. */
2715 if (IDENTIFIER_TYPE_VALUE (name) != type)
2717 register tree d = NULL_TREE;
2719 tree context = TYPE_CONTEXT (type);
2723 tree cs = current_scope ();
2727 else if (cs != NULL_TREE && TYPE_P (cs))
2728 /* When declaring a friend class of a local class, we want
2729 to inject the newly named class into the scope
2730 containing the local class, not the namespace scope. */
2731 context = decl_function_context (get_type_decl (cs));
2734 context = current_namespace;
2736 if ((b->template_parms_p && b->level_chain->parm_flag == 2)
2737 || b->parm_flag == 2)
2740 if (current_lang_name == lang_name_java)
2741 TYPE_FOR_JAVA (type) = 1;
2743 d = create_implicit_typedef (name, type);
2744 DECL_CONTEXT (d) = FROB_CONTEXT (context);
2746 set_identifier_type_value_with_scope (name, type, b);
2748 d = maybe_process_template_type_declaration (type,
2751 if (b->parm_flag == 2)
2753 if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2754 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2755 class. But if it's a member template class, we
2756 want the TEMPLATE_DECL, not the TYPE_DECL, so this
2758 finish_member_declaration (d);
2760 pushdecl_class_level (d);
2763 d = pushdecl_with_scope (d, b);
2765 /* FIXME what if it gets a name from typedef? */
2766 if (ANON_AGGRNAME_P (name))
2767 DECL_IGNORED_P (d) = 1;
2769 TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2771 /* If this is a local class, keep track of it. We need this
2772 information for name-mangling, and so that it is possible to find
2773 all function definitions in a translation unit in a convenient
2774 way. (It's otherwise tricky to find a member function definition
2775 it's only pointed to from within a local class.) */
2776 if (TYPE_CONTEXT (type)
2777 && TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL
2778 && !processing_template_decl)
2779 VARRAY_PUSH_TREE (local_classes, type);
2781 if (b->parm_flag == 2)
2783 if (!COMPLETE_TYPE_P (current_class_type))
2785 maybe_add_class_template_decl_list (current_class_type,
2786 type, /*friend_p=*/0);
2787 CLASSTYPE_TAGS (current_class_type) = b->tags;
2792 if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2793 /* Use the canonical TYPE_DECL for this node. */
2794 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2797 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2798 will be the tagged type we just added to the current
2799 binding level. This fake NULL-named TYPE_DECL node helps
2800 dwarfout.c to know when it needs to output a
2801 representation of a tagged type, and it also gives us a
2802 convenient place to record the "scope start" address for
2805 tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2806 TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2810 /* Counter used to create anonymous type names. */
2812 static int anon_cnt = 0;
2814 /* Return an IDENTIFIER which can be used as a name for
2815 anonymous structs and unions. */
2822 sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2823 return get_identifier (buf);
2826 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2827 This keeps dbxout from getting confused. */
2832 register struct cp_binding_level *b;
2834 static int last_cnt = 0;
2836 /* Fast out if no new anon names were declared. */
2837 if (last_cnt == anon_cnt)
2840 b = current_binding_level;
2841 while (b->tag_transparent)
2846 /* A NULL purpose means we have already processed all tags
2847 from here to the end of the list. */
2848 if (TREE_PURPOSE (tags) == NULL_TREE)
2850 if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2851 TREE_PURPOSE (tags) = NULL_TREE;
2852 tags = TREE_CHAIN (tags);
2854 last_cnt = anon_cnt;
2857 /* Subroutine of duplicate_decls: return truthvalue of whether
2858 or not types of these decls match.
2860 For C++, we must compare the parameter list so that `int' can match
2861 `int&' in a parameter position, but `int&' is not confused with
2865 decls_match (newdecl, olddecl)
2866 tree newdecl, olddecl;
2870 if (newdecl == olddecl)
2873 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2874 /* If the two DECLs are not even the same kind of thing, we're not
2875 interested in their types. */
2878 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2880 tree f1 = TREE_TYPE (newdecl);
2881 tree f2 = TREE_TYPE (olddecl);
2882 tree p1 = TYPE_ARG_TYPES (f1);
2883 tree p2 = TYPE_ARG_TYPES (f2);
2885 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
2886 && ! (DECL_EXTERN_C_P (newdecl)
2887 && DECL_EXTERN_C_P (olddecl)))
2890 if (TREE_CODE (f1) != TREE_CODE (f2))
2893 if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2895 if (p2 == NULL_TREE && DECL_EXTERN_C_P (olddecl)
2896 && (DECL_BUILT_IN (olddecl)
2897 #ifndef NO_IMPLICIT_EXTERN_C
2898 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
2899 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
2903 types_match = self_promoting_args_p (p1);
2904 if (p1 == void_list_node)
2905 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2907 #ifndef NO_IMPLICIT_EXTERN_C
2908 else if (p1 == NULL_TREE
2909 && (DECL_EXTERN_C_P (olddecl)
2910 && DECL_IN_SYSTEM_HEADER (olddecl)
2911 && !DECL_CLASS_SCOPE_P (olddecl))
2912 && (DECL_EXTERN_C_P (newdecl)
2913 && DECL_IN_SYSTEM_HEADER (newdecl)
2914 && !DECL_CLASS_SCOPE_P (newdecl)))
2916 types_match = self_promoting_args_p (p2);
2917 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2921 types_match = compparms (p1, p2);
2926 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2928 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2929 DECL_TEMPLATE_PARMS (olddecl)))
2932 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
2933 != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
2936 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2939 types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2940 DECL_TEMPLATE_RESULT (newdecl));
2944 if (TREE_TYPE (newdecl) == error_mark_node)
2945 types_match = TREE_TYPE (olddecl) == error_mark_node;
2946 else if (TREE_TYPE (olddecl) == NULL_TREE)
2947 types_match = TREE_TYPE (newdecl) == NULL_TREE;
2948 else if (TREE_TYPE (newdecl) == NULL_TREE)
2951 types_match = comptypes (TREE_TYPE (newdecl),
2952 TREE_TYPE (olddecl),
2953 COMPARE_REDECLARATION);
2959 /* If NEWDECL is `static' and an `extern' was seen previously,
2960 warn about it. OLDDECL is the previous declaration.
2962 Note that this does not apply to the C++ case of declaring
2963 a variable `extern const' and then later `const'.
2965 Don't complain about built-in functions, since they are beyond
2966 the user's control. */
2969 warn_extern_redeclared_static (newdecl, olddecl)
2970 tree newdecl, olddecl;
2972 static const char *const explicit_extern_static_warning
2973 = "`%D' was declared `extern' and later `static'";
2974 static const char *const implicit_extern_static_warning
2975 = "`%D' was declared implicitly `extern' and later `static'";
2979 if (TREE_CODE (newdecl) == TYPE_DECL
2980 || TREE_CODE (newdecl) == TEMPLATE_DECL
2981 || TREE_CODE (newdecl) == CONST_DECL)
2984 /* Don't get confused by static member functions; that's a different
2986 if (TREE_CODE (newdecl) == FUNCTION_DECL
2987 && DECL_STATIC_FUNCTION_P (newdecl))
2990 /* If the old declaration was `static', or the new one isn't, then
2991 then everything is OK. */
2992 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2995 /* It's OK to declare a builtin function as `static'. */
2996 if (TREE_CODE (olddecl) == FUNCTION_DECL
2997 && DECL_ARTIFICIAL (olddecl))
3000 name = DECL_ASSEMBLER_NAME (newdecl);
3001 pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3002 ? implicit_extern_static_warning
3003 : explicit_extern_static_warning, newdecl);
3004 cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3007 /* Handle when a new declaration NEWDECL has the same name as an old
3008 one OLDDECL in the same binding contour. Prints an error message
3011 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3012 Otherwise, return 0. */
3015 duplicate_decls (newdecl, olddecl)
3016 tree newdecl, olddecl;
3018 unsigned olddecl_uid = DECL_UID (olddecl);
3019 int olddecl_friend = 0, types_match = 0;
3020 int new_defines_function = 0;
3022 if (newdecl == olddecl)
3025 types_match = decls_match (newdecl, olddecl);
3027 /* If either the type of the new decl or the type of the old decl is an
3028 error_mark_node, then that implies that we have already issued an
3029 error (earlier) for some bogus type specification, and in that case,
3030 it is rather pointless to harass the user with yet more error message
3031 about the same declaration, so just pretend the types match here. */
3032 if (TREE_TYPE (newdecl) == error_mark_node
3033 || TREE_TYPE (olddecl) == error_mark_node)
3036 if (DECL_P (olddecl)
3037 && TREE_CODE (newdecl) == FUNCTION_DECL
3038 && TREE_CODE (olddecl) == FUNCTION_DECL
3039 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
3041 if (DECL_DECLARED_INLINE_P (newdecl)
3042 && DECL_UNINLINABLE (newdecl)
3043 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3044 /* Already warned elsewhere. */;
3045 else if (DECL_DECLARED_INLINE_P (olddecl)
3046 && DECL_UNINLINABLE (olddecl)
3047 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3048 /* Already warned. */;
3049 else if (DECL_DECLARED_INLINE_P (newdecl)
3050 && DECL_UNINLINABLE (olddecl)
3051 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
3053 warning_with_decl (newdecl,
3054 "function `%s' redeclared as inline");
3055 warning_with_decl (olddecl,
3056 "previous declaration of function `%s' with attribute noinline");
3058 else if (DECL_DECLARED_INLINE_P (olddecl)
3059 && DECL_UNINLINABLE (newdecl)
3060 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
3062 warning_with_decl (newdecl,
3063 "function `%s' redeclared with attribute noinline");
3064 warning_with_decl (olddecl,
3065 "previous declaration of function `%s' was inline");
3069 /* Check for redeclaration and other discrepancies. */
3070 if (TREE_CODE (olddecl) == FUNCTION_DECL
3071 && DECL_ARTIFICIAL (olddecl))
3073 if (TREE_CODE (newdecl) != FUNCTION_DECL)
3075 /* Avoid warnings redeclaring anticipated built-ins. */
3076 if (DECL_ANTICIPATED (olddecl))
3079 /* If you declare a built-in or predefined function name as static,
3080 the old definition is overridden, but optionally warn this was a
3081 bad choice of name. */
3082 if (! TREE_PUBLIC (newdecl))
3085 warning ("shadowing %s function `%#D'",
3086 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3088 /* Discard the old built-in function. */
3091 /* If the built-in is not ansi, then programs can override
3092 it even globally without an error. */
3093 else if (! DECL_BUILT_IN (olddecl))
3094 warning ("library function `%#D' redeclared as non-function `%#D'",
3098 error ("declaration of `%#D'", newdecl);
3099 error ("conflicts with built-in declaration `%#D'",
3104 else if (!types_match)
3106 /* Avoid warnings redeclaring anticipated built-ins. */
3107 if (DECL_ANTICIPATED (olddecl))
3108 ; /* Do nothing yet. */
3109 else if ((DECL_EXTERN_C_P (newdecl)
3110 && DECL_EXTERN_C_P (olddecl))
3111 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3112 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3114 /* A near match; override the builtin. */
3116 if (TREE_PUBLIC (newdecl))
3118 warning ("new declaration `%#D'", newdecl);
3119 warning ("ambiguates built-in declaration `%#D'",
3122 else if (warn_shadow)
3123 warning ("shadowing %s function `%#D'",
3124 DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3128 /* Discard the old built-in function. */
3131 /* Replace the old RTL to avoid problems with inlining. */
3132 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
3135 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3137 /* If a builtin function is redeclared as `static', merge
3138 the declarations, but make the original one static. */
3139 DECL_THIS_STATIC (olddecl) = 1;
3140 TREE_PUBLIC (olddecl) = 0;
3142 /* Make the old declaration consistent with the new one so
3143 that all remnants of the builtin-ness of this function
3144 will be banished. */
3145 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
3146 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
3149 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3151 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3152 && TREE_CODE (newdecl) != TYPE_DECL
3153 && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3154 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3155 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3156 && TREE_CODE (olddecl) != TYPE_DECL
3157 && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3158 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3161 /* We do nothing special here, because C++ does such nasty
3162 things with TYPE_DECLs. Instead, just let the TYPE_DECL
3163 get shadowed, and know that if we need to find a TYPE_DECL
3164 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3165 slot of the identifier. */
3169 if ((TREE_CODE (newdecl) == FUNCTION_DECL
3170 && DECL_FUNCTION_TEMPLATE_P (olddecl))
3171 || (TREE_CODE (olddecl) == FUNCTION_DECL
3172 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3175 error ("`%#D' redeclared as different kind of symbol", newdecl);
3176 if (TREE_CODE (olddecl) == TREE_LIST)
3177 olddecl = TREE_VALUE (olddecl);
3178 cp_error_at ("previous declaration of `%#D'", olddecl);
3180 /* New decl is completely inconsistent with the old one =>
3181 tell caller to replace the old one. */
3185 else if (!types_match)
3187 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3188 /* These are certainly not duplicate declarations; they're
3189 from different scopes. */
3192 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3194 /* The name of a class template may not be declared to refer to
3195 any other template, class, function, object, namespace, value,
3196 or type in the same scope. */
3197 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3198 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3200 error ("declaration of template `%#D'", newdecl);
3201 cp_error_at ("conflicts with previous declaration `%#D'",
3204 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3205 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3206 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3207 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3208 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3209 DECL_TEMPLATE_PARMS (olddecl))
3210 /* Template functions can be disambiguated by
3212 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
3213 TREE_TYPE (TREE_TYPE (olddecl))))
3215 error ("new declaration `%#D'", newdecl);
3216 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3220 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3222 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
3224 error ("declaration of C function `%#D' conflicts with",
3226 cp_error_at ("previous declaration `%#D' here", olddecl);
3228 else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3229 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3231 error ("new declaration `%#D'", newdecl);
3232 cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3238 /* Already complained about this, so don't do so again. */
3239 else if (current_class_type == NULL_TREE
3240 || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3242 error ("conflicting types for `%#D'", newdecl);
3243 cp_error_at ("previous declaration as `%#D'", olddecl);
3246 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3247 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3248 && (!DECL_TEMPLATE_INFO (newdecl)
3249 || (DECL_TI_TEMPLATE (newdecl)
3250 != DECL_TI_TEMPLATE (olddecl))))
3251 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3252 && (!DECL_TEMPLATE_INFO (olddecl)
3253 || (DECL_TI_TEMPLATE (olddecl)
3254 != DECL_TI_TEMPLATE (newdecl))))))
3255 /* It's OK to have a template specialization and a non-template
3256 with the same type, or to have specializations of two
3257 different templates with the same type. Note that if one is a
3258 specialization, and the other is an instantiation of the same
3259 template, that we do not exit at this point. That situation
3260 can occur if we instantiate a template class, and then
3261 specialize one of its methods. This situation is valid, but
3262 the declarations must be merged in the usual way. */
3264 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3265 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3266 && !DECL_USE_TEMPLATE (newdecl))
3267 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3268 && !DECL_USE_TEMPLATE (olddecl))))
3269 /* One of the declarations is a template instantiation, and the
3270 other is not a template at all. That's OK. */
3272 else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3273 && DECL_NAMESPACE_ALIAS (newdecl)
3274 && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3275 /* Redeclaration of namespace alias, ignore it. */
3279 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3282 error (errmsg, newdecl);
3283 if (DECL_NAME (olddecl) != NULL_TREE)
3284 cp_error_at ((DECL_INITIAL (olddecl)
3285 && namespace_bindings_p ())
3286 ? "`%#D' previously defined here"
3287 : "`%#D' previously declared here", olddecl);
3290 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3291 && DECL_INITIAL (olddecl) != NULL_TREE
3292 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3293 && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3295 /* Prototype decl follows defn w/o prototype. */
3296 cp_warning_at ("prototype for `%#D'", newdecl);
3297 cp_warning_at ("follows non-prototype definition here", olddecl);
3299 else if (TREE_CODE (olddecl) == FUNCTION_DECL
3300 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3302 /* extern "C" int foo ();
3303 int foo () { bar (); }
3305 if (current_lang_depth () == 0)
3306 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
3309 cp_error_at ("previous declaration of `%#D' with %L linkage",
3310 olddecl, DECL_LANGUAGE (olddecl));
3311 error ("conflicts with new declaration with %L linkage",
3312 DECL_LANGUAGE (newdecl));
3316 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3318 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3320 tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3321 tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3324 if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3325 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3327 for (; t1 && t1 != void_list_node;
3328 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3329 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3331 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3334 pedwarn ("default argument given for parameter %d of `%#D'",
3336 cp_pedwarn_at ("after previous specification in `%#D'",
3341 error ("default argument given for parameter %d of `%#D'",
3343 cp_error_at ("after previous specification in `%#D'",
3348 if (DECL_DECLARED_INLINE_P (newdecl)
3349 && ! DECL_DECLARED_INLINE_P (olddecl)
3350 && TREE_ADDRESSABLE (olddecl) && warn_inline)
3352 warning ("`%#D' was used before it was declared inline",
3354 cp_warning_at ("previous non-inline declaration here",
3360 /* Do not merge an implicit typedef with an explicit one. In:
3364 typedef class A A __attribute__ ((foo));
3366 the attribute should apply only to the typedef. */
3367 if (TREE_CODE (olddecl) == TYPE_DECL
3368 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
3369 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
3372 /* If new decl is `static' and an `extern' was seen previously,
3374 warn_extern_redeclared_static (newdecl, olddecl);
3376 /* We have committed to returning 1 at this point. */
3377 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3379 /* Now that functions must hold information normally held
3380 by field decls, there is extra work to do so that
3381 declaration information does not get destroyed during
3383 if (DECL_VINDEX (olddecl))
3384 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3385 if (DECL_CONTEXT (olddecl))
3386 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3387 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3388 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3389 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3390 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3391 DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3392 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3393 if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
3394 SET_OVERLOADED_OPERATOR_CODE
3395 (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
3396 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3398 /* Optionally warn about more than one declaration for the same
3399 name, but don't warn about a function declaration followed by a
3401 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3402 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3403 /* Don't warn about extern decl followed by definition. */
3404 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3405 /* Don't warn about friends, let add_friend take care of it. */
3406 && ! (DECL_FRIEND_P (newdecl) || DECL_FRIEND_P (olddecl)))
3408 warning ("redundant redeclaration of `%D' in same scope", newdecl);
3409 cp_warning_at ("previous declaration of `%D'", olddecl);
3413 /* Deal with C++: must preserve virtual function table size. */
3414 if (TREE_CODE (olddecl) == TYPE_DECL)
3416 register tree newtype = TREE_TYPE (newdecl);
3417 register tree oldtype = TREE_TYPE (olddecl);
3419 if (newtype != error_mark_node && oldtype != error_mark_node
3420 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3421 CLASSTYPE_FRIEND_CLASSES (newtype)
3422 = CLASSTYPE_FRIEND_CLASSES (oldtype);
3424 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
3427 /* Copy all the DECL_... slots specified in the new decl
3428 except for any that we copy here from the old type. */
3429 DECL_ATTRIBUTES (newdecl)
3430 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
3432 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3434 TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3435 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3436 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3437 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3439 /* If the new declaration is a definition, update the file and
3440 line information on the declaration. */
3441 if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE
3442 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE)
3444 DECL_SOURCE_LOCATION (olddecl)
3445 = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl))
3446 = DECL_SOURCE_LOCATION (newdecl);
3454 /* Automatically handles default parameters. */
3455 tree oldtype = TREE_TYPE (olddecl);
3458 /* Merge the data types specified in the two decls. */
3459 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3461 /* If merge_types produces a non-typedef type, just use the old type. */
3462 if (TREE_CODE (newdecl) == TYPE_DECL
3463 && newtype == DECL_ORIGINAL_TYPE (newdecl))
3466 if (TREE_CODE (newdecl) == VAR_DECL)
3468 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3469 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
3472 /* Do this after calling `merge_types' so that default
3473 parameters don't confuse us. */
3474 else if (TREE_CODE (newdecl) == FUNCTION_DECL
3475 && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3476 != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3478 TREE_TYPE (newdecl) = build_exception_variant (newtype,
3479 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3480 TREE_TYPE (olddecl) = build_exception_variant (newtype,
3481 TYPE_RAISES_EXCEPTIONS (oldtype));
3483 if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3484 && DECL_SOURCE_LINE (olddecl) != 0
3486 && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3487 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3489 error ("declaration of `%F' throws different exceptions",
3491 cp_error_at ("than previous declaration `%F'", olddecl);
3494 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3496 /* Lay the type out, unless already done. */
3497 if (! same_type_p (newtype, oldtype)
3498 && TREE_TYPE (newdecl) != error_mark_node
3499 && !(processing_template_decl && uses_template_parms (newdecl)))
3500 layout_type (TREE_TYPE (newdecl));
3502 if ((TREE_CODE (newdecl) == VAR_DECL
3503 || TREE_CODE (newdecl) == PARM_DECL
3504 || TREE_CODE (newdecl) == RESULT_DECL
3505 || TREE_CODE (newdecl) == FIELD_DECL
3506 || TREE_CODE (newdecl) == TYPE_DECL)
3507 && !(processing_template_decl && uses_template_parms (newdecl)))
3508 layout_decl (newdecl, 0);
3510 /* Merge the type qualifiers. */
3511 if (TREE_READONLY (newdecl))
3512 TREE_READONLY (olddecl) = 1;
3513 if (TREE_THIS_VOLATILE (newdecl))
3514 TREE_THIS_VOLATILE (olddecl) = 1;
3516 /* Merge the initialization information. */
3517 if (DECL_INITIAL (newdecl) == NULL_TREE
3518 && DECL_INITIAL (olddecl) != NULL_TREE)
3520 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3521 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
3522 if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3523 && DECL_LANG_SPECIFIC (newdecl)
3524 && DECL_LANG_SPECIFIC (olddecl))
3525 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3528 /* Merge the section attribute.
3529 We want to issue an error if the sections conflict but that must be
3530 done later in decl_attributes since we are called before attributes
3532 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3533 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3535 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3537 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3538 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3539 DECL_NO_LIMIT_STACK (newdecl)
3540 |= DECL_NO_LIMIT_STACK (olddecl);
3541 /* Keep the old RTL. */
3542 COPY_DECL_RTL (olddecl, newdecl);
3544 else if (TREE_CODE (newdecl) == VAR_DECL
3545 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
3547 /* Keep the old RTL. We cannot keep the old RTL if the old
3548 declaration was for an incomplete object and the new
3549 declaration is not since many attributes of the RTL will
3551 COPY_DECL_RTL (olddecl, newdecl);
3554 /* If cannot merge, then use the new type and qualifiers,
3555 and don't preserve the old rtl. */
3558 /* Clean out any memory we had of the old declaration. */
3559 tree oldstatic = value_member (olddecl, static_aggregates);
3561 TREE_VALUE (oldstatic) = error_mark_node;
3563 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3564 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3565 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3566 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3569 /* Merge the storage class information. */
3570 merge_weak (newdecl, olddecl);
3572 DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3573 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3574 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3575 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3576 if (! DECL_EXTERNAL (olddecl))
3577 DECL_EXTERNAL (newdecl) = 0;
3579 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3581 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3582 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3583 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3584 DECL_TEMPLATE_INSTANTIATED (newdecl)
3585 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3586 /* Don't really know how much of the language-specific
3587 values we should copy from old to new. */
3588 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3589 DECL_LANG_SPECIFIC (newdecl)->decl_flags.u2 =
3590 DECL_LANG_SPECIFIC (olddecl)->decl_flags.u2;
3591 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3592 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3593 DECL_INITIALIZED_IN_CLASS_P (newdecl)
3594 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
3595 olddecl_friend = DECL_FRIEND_P (olddecl);
3597 /* Only functions have DECL_BEFRIENDING_CLASSES. */
3598 if (TREE_CODE (newdecl) == FUNCTION_DECL
3599 || DECL_FUNCTION_TEMPLATE_P (newdecl))
3601 DECL_BEFRIENDING_CLASSES (newdecl)
3602 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3603 DECL_BEFRIENDING_CLASSES (olddecl));
3604 DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
3608 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3610 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3611 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3613 /* If newdecl is not a specialization, then it is not a
3614 template-related function at all. And that means that we
3615 shoud have exited above, returning 0. */
3616 my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3619 if (TREE_USED (olddecl))
3620 /* From [temp.expl.spec]:
3622 If a template, a member template or the member of a class
3623 template is explicitly specialized then that
3624 specialization shall be declared before the first use of
3625 that specialization that would cause an implicit
3626 instantiation to take place, in every translation unit in
3627 which such a use occurs. */
3628 error ("explicit specialization of %D after first use",
3631 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3633 /* [temp.expl.spec/14] We don't inline explicit specialization
3634 just because the primary template says so. */
3638 if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
3639 DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3641 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
3643 /* If either decl says `inline', this fn is inline, unless
3644 its definition was passed already. */
3645 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3646 DECL_INLINE (olddecl) = 1;
3647 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3649 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
3650 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
3653 /* Preserve abstractness on cloned [cd]tors. */
3654 DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
3658 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
3659 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
3660 SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
3662 if (! types_match || new_defines_function)
3664 /* These need to be copied so that the names are available.
3665 Note that if the types do match, we'll preserve inline
3666 info and other bits, but if not, we won't. */
3667 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3668 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3670 if (new_defines_function)
3671 /* If defining a function declared with other language
3672 linkage, use the previously declared language linkage. */
3673 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
3674 else if (types_match)
3676 /* If redeclaring a builtin function, and not a definition,
3677 it stays built in. */
3678 if (DECL_BUILT_IN (olddecl))
3680 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3681 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3682 /* If we're keeping the built-in definition, keep the rtl,
3683 regardless of declaration matches. */
3684 SET_DECL_RTL (newdecl, DECL_RTL (olddecl));
3687 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
3689 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3690 /* Don't clear out the arguments if we're redefining a function. */
3691 if (DECL_ARGUMENTS (olddecl))
3692 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3695 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3696 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3698 /* Now preserve various other info from the definition. */
3699 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3700 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3701 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3702 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
3704 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3708 function_size = sizeof (struct tree_decl);
3710 memcpy ((char *) olddecl + sizeof (struct tree_common),
3711 (char *) newdecl + sizeof (struct tree_common),
3712 function_size - sizeof (struct tree_common));
3714 if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3716 /* If newdecl is a template instantiation, it is possible that
3717 the following sequence of events has occurred:
3719 o A friend function was declared in a class template. The
3720 class template was instantiated.
3722 o The instantiation of the friend declaration was
3723 recorded on the instantiation list, and is newdecl.
3725 o Later, however, instantiate_class_template called pushdecl
3726 on the newdecl to perform name injection. But, pushdecl in
3727 turn called duplicate_decls when it discovered that another
3728 declaration of a global function with the same name already
3731 o Here, in duplicate_decls, we decided to clobber newdecl.
3733 If we're going to do that, we'd better make sure that
3734 olddecl, and not newdecl, is on the list of
3735 instantiations so that if we try to do the instantiation
3736 again we won't get the clobbered declaration. */
3738 tree tmpl = DECL_TI_TEMPLATE (newdecl);
3739 tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3741 for (; decls; decls = TREE_CHAIN (decls))
3742 if (TREE_VALUE (decls) == newdecl)
3743 TREE_VALUE (decls) = olddecl;
3748 memcpy ((char *) olddecl + sizeof (struct tree_common),
3749 (char *) newdecl + sizeof (struct tree_common),
3750 sizeof (struct tree_decl) - sizeof (struct tree_common)
3751 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
3754 DECL_UID (olddecl) = olddecl_uid;
3756 DECL_FRIEND_P (olddecl) = 1;
3758 /* NEWDECL contains the merged attribute lists.
3759 Update OLDDECL to be the same. */
3760 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
3765 /* Record a decl-node X as belonging to the current lexical scope.
3766 Check for errors (such as an incompatible declaration for the same
3767 name already seen in the same scope).
3769 Returns either X or an old decl for the same name.
3770 If an old decl is returned, it may have been smashed
3771 to agree with what X says. */
3779 int need_new_binding;
3781 /* We shouldn't be calling pushdecl when we're generating RTL for a
3782 function that we already did semantic analysis on previously. */
3783 my_friendly_assert (!cfun || doing_semantic_analysis_p (),
3786 need_new_binding = 1;
3788 if (DECL_TEMPLATE_PARM_P (x))
3789 /* Template parameters have no context; they are not X::T even
3790 when declared within a class or namespace. */
3794 if (current_function_decl && x != current_function_decl
3795 /* A local declaration for a function doesn't constitute
3797 && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3798 /* A local declaration for an `extern' variable is in the
3799 scope of the current namespace, not the current
3801 && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3802 && !DECL_CONTEXT (x))
3803 DECL_CONTEXT (x) = current_function_decl;
3805 /* If this is the declaration for a namespace-scope function,
3806 but the declaration itself is in a local scope, mark the
3808 if (TREE_CODE (x) == FUNCTION_DECL
3809 && DECL_NAMESPACE_SCOPE_P (x)
3810 && current_function_decl
3811 && x != current_function_decl)
3812 DECL_LOCAL_FUNCTION_P (x) = 1;
3815 name = DECL_NAME (x);
3818 int different_binding_level = 0;
3820 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3821 name = TREE_OPERAND (name, 0);
3823 /* In case this decl was explicitly namespace-qualified, look it
3824 up in its namespace context. */
3825 if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x)
3826 && namespace_bindings_p ())
3827 t = namespace_binding (name, DECL_CONTEXT (x));
3829 t = lookup_name_current_level (name);
3831 /* [basic.link] If there is a visible declaration of an entity
3832 with linkage having the same name and type, ignoring entities
3833 declared outside the innermost enclosing namespace scope, the
3834 block scope declaration declares that same entity and
3835 receives the linkage of the previous declaration. */
3836 if (! t && current_function_decl && x != current_function_decl
3837 && (TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
3838 && DECL_EXTERNAL (x))
3840 /* Look in block scope. */
3841 t = IDENTIFIER_VALUE (name);
3842 /* Or in the innermost namespace. */
3844 t = namespace_binding (name, DECL_CONTEXT (x));
3845 /* Does it have linkage? Note that if this isn't a DECL, it's an
3846 OVERLOAD, which is OK. */
3847 if (t && DECL_P (t) && ! (TREE_STATIC (t) || DECL_EXTERNAL (t)))
3850 different_binding_level = 1;
3853 /* If we are declaring a function, and the result of name-lookup
3854 was an OVERLOAD, look for an overloaded instance that is
3855 actually the same as the function we are declaring. (If
3856 there is one, we have to merge our declaration with the
3857 previous declaration.) */
3858 if (t && TREE_CODE (t) == OVERLOAD)
3862 if (TREE_CODE (x) == FUNCTION_DECL)
3863 for (match = t; match; match = OVL_NEXT (match))
3865 if (decls_match (OVL_CURRENT (match), x))
3869 /* Just choose one. */
3873 t = OVL_CURRENT (match);
3878 if (t == error_mark_node)
3880 /* error_mark_node is 0 for a while during initialization! */
3882 cp_error_at ("`%#D' used prior to declaration", x);
3884 else if (t != NULL_TREE)
3886 if (different_binding_level)
3888 if (decls_match (x, t))
3889 /* The standard only says that the local extern
3890 inherits linkage from the previous decl; in
3891 particular, default args are not shared. It would
3892 be nice to propagate inlining info, though. FIXME. */
3893 TREE_PUBLIC (x) = TREE_PUBLIC (t);
3895 else if (TREE_CODE (t) == PARM_DECL)
3897 if (DECL_CONTEXT (t) == NULL_TREE)
3898 /* This is probaby caused by too many errors, but calling
3899 abort will say that if errors have occurred. */
3902 /* Check for duplicate params. */
3903 if (duplicate_decls (x, t))
3906 else if ((DECL_EXTERN_C_FUNCTION_P (x)
3907 || DECL_FUNCTION_TEMPLATE_P (x))
3908 && is_overloaded_fn (t))
3909 /* Don't do anything just yet. */;
3910 else if (t == wchar_decl_node)
3912 if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3913 pedwarn ("redeclaration of `wchar_t' as `%T'",
3916 /* Throw away the redeclaration. */
3919 else if (TREE_CODE (t) != TREE_CODE (x))
3921 if (duplicate_decls (x, t))
3924 else if (duplicate_decls (x, t))
3926 if (TREE_CODE (t) == TYPE_DECL)
3927 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3928 else if (TREE_CODE (t) == FUNCTION_DECL)
3929 check_default_args (t);
3933 else if (DECL_MAIN_P (x))
3935 /* A redeclaration of main, but not a duplicate of the
3940 This function shall not be overloaded. */
3941 cp_error_at ("invalid redeclaration of `%D'", t);
3942 error ("as `%D'", x);
3943 /* We don't try to push this declaration since that
3949 check_template_shadow (x);
3951 /* If this is a function conjured up by the backend, massage it
3952 so it looks friendly. */
3953 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
3955 retrofit_lang_decl (x);
3956 SET_DECL_LANGUAGE (x, lang_c);
3959 if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
3961 t = push_overloaded_decl (x, PUSH_LOCAL);
3964 if (!namespace_bindings_p ())
3965 /* We do not need to create a binding for this name;
3966 push_overloaded_decl will have already done so if
3968 need_new_binding = 0;
3970 else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3972 t = push_overloaded_decl (x, PUSH_GLOBAL);
3974 add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3978 /* If declaring a type as a typedef, copy the type (unless we're
3979 at line 0), and install this TYPE_DECL as the new type's typedef
3980 name. See the extensive comment in ../c-decl.c (pushdecl). */
3981 if (TREE_CODE (x) == TYPE_DECL)
3983 tree type = TREE_TYPE (x);
3984 if (DECL_SOURCE_LINE (x) == 0)
3986 if (TYPE_NAME (type) == 0)
3987 TYPE_NAME (type) = x;
3989 else if (type != error_mark_node && TYPE_NAME (type) != x
3990 /* We don't want to copy the type when all we're
3991 doing is making a TYPE_DECL for the purposes of
3993 && (!TYPE_NAME (type)
3994 || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3996 DECL_ORIGINAL_TYPE (x) = type;
3997 type = build_type_copy (type);
3998 TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3999 TYPE_NAME (type) = x;
4000 TREE_TYPE (x) = type;
4003 if (type != error_mark_node
4005 && TYPE_IDENTIFIER (type))
4006 set_identifier_type_value_with_scope (DECL_NAME (x), type,
4007 current_binding_level);
4011 /* Multiple external decls of the same identifier ought to match.
4013 We get warnings about inline functions where they are defined.
4014 We get warnings about other functions from push_overloaded_decl.
4016 Avoid duplicate warnings where they are used. */
4017 if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
4021 decl = IDENTIFIER_NAMESPACE_VALUE (name);
4022 if (decl && TREE_CODE (decl) == OVERLOAD)
4023 decl = OVL_FUNCTION (decl);
4025 if (decl && decl != error_mark_node
4026 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))
4027 /* If different sort of thing, we already gave an error. */
4028 && TREE_CODE (decl) == TREE_CODE (x)
4029 && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
4031 pedwarn ("type mismatch with previous external decl", x);
4032 cp_pedwarn_at ("previous external decl of `%#D'", decl);
4036 /* This name is new in its binding level.
4037 Install the new declaration and return it. */
4038 if (namespace_bindings_p ())
4040 /* Install a global value. */
4042 /* If the first global decl has external linkage,
4043 warn if we later see static one. */
4044 if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
4045 TREE_PUBLIC (name) = 1;
4047 /* Bind the name for the entity. */
4048 if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
4050 && (TREE_CODE (x) == TYPE_DECL
4051 || TREE_CODE (x) == VAR_DECL
4052 || TREE_CODE (x) == ALIAS_DECL
4053 || TREE_CODE (x) == NAMESPACE_DECL
4054 || TREE_CODE (x) == CONST_DECL
4055 || TREE_CODE (x) == TEMPLATE_DECL))
4056 SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
4058 /* Don't forget if the function was used via an implicit decl. */
4059 if (IDENTIFIER_IMPLICIT_DECL (name)
4060 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
4063 /* Don't forget if its address was taken in that way. */
4064 if (IDENTIFIER_IMPLICIT_DECL (name)
4065 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4066 TREE_ADDRESSABLE (x) = 1;
4068 /* Warn about mismatches against previous implicit decl. */
4069 if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4070 /* If this real decl matches the implicit, don't complain. */
4071 && ! (TREE_CODE (x) == FUNCTION_DECL
4072 && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4074 ("`%D' was previously implicitly declared to return `int'", x);
4076 /* If new decl is `static' and an `extern' was seen previously,
4078 if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4079 warn_extern_redeclared_static (x, t);
4083 /* Here to install a non-global value. */
4084 tree oldlocal = IDENTIFIER_VALUE (name);
4085 tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4087 if (need_new_binding)
4089 push_local_binding (name, x, 0);
4090 /* Because push_local_binding will hook X on to the
4091 current_binding_level's name list, we don't want to
4092 do that again below. */
4093 need_new_binding = 0;
4096 /* If this is a TYPE_DECL, push it into the type value slot. */
4097 if (TREE_CODE (x) == TYPE_DECL)
4098 set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4099 current_binding_level);
4101 /* Clear out any TYPE_DECL shadowed by a namespace so that
4102 we won't think this is a type. The C struct hack doesn't
4103 go through namespaces. */
4104 if (TREE_CODE (x) == NAMESPACE_DECL)
4105 set_identifier_type_value_with_scope (name, NULL_TREE,
4106 current_binding_level);
4113 && TREE_CODE (oldlocal) == VAR_DECL
4114 && DECL_DEAD_FOR_LOCAL (oldlocal))
4115 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4117 if (oldlocal == NULL_TREE)
4118 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4121 /* If this is an extern function declaration, see if we
4122 have a global definition or declaration for the function. */
4123 if (oldlocal == NULL_TREE
4124 && DECL_EXTERNAL (x)
4125 && oldglobal != NULL_TREE
4126 && TREE_CODE (x) == FUNCTION_DECL
4127 && TREE_CODE (oldglobal) == FUNCTION_DECL)
4129 /* We have one. Their types must agree. */
4130 if (decls_match (x, oldglobal))
4134 warning ("extern declaration of `%#D' doesn't match", x);
4135 cp_warning_at ("global declaration `%#D'", oldglobal);
4138 /* If we have a local external declaration,
4139 and no file-scope declaration has yet been seen,
4140 then if we later have a file-scope decl it must not be static. */
4141 if (oldlocal == NULL_TREE
4142 && oldglobal == NULL_TREE
4143 && DECL_EXTERNAL (x)
4145 TREE_PUBLIC (name) = 1;
4147 /* Warn if shadowing an argument at the top level of the body. */
4148 if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4149 /* Inline decls shadow nothing. */
4150 && !DECL_FROM_INLINE (x)
4151 && TREE_CODE (oldlocal) == PARM_DECL)
4155 /* Don't complain if it's from an enclosing function. */
4156 if (DECL_CONTEXT (oldlocal) == current_function_decl
4157 && TREE_CODE (x) != PARM_DECL)
4159 /* Go to where the parms should be and see if we find
4161 struct cp_binding_level *b = current_binding_level->level_chain;
4163 /* Skip the ctor/dtor cleanup level. */
4167 if (b->parm_flag == 1)
4169 error ("declaration of `%#D' shadows a parameter",
4175 if (warn_shadow && !err)
4176 shadow_warning ("a parameter", name, oldlocal);
4179 /* Maybe warn if shadowing something else. */
4180 else if (warn_shadow && !DECL_EXTERNAL (x)
4181 /* No shadow warnings for internally generated vars. */
4182 && ! DECL_ARTIFICIAL (x)
4183 /* No shadow warnings for vars made for inlining. */
4184 && ! DECL_FROM_INLINE (x))
4186 if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4187 && current_class_ptr
4188 && !TREE_STATIC (name))
4189 warning ("declaration of `%s' shadows a member of `this'",
4190 IDENTIFIER_POINTER (name));
4191 else if (oldlocal != NULL_TREE
4192 && TREE_CODE (oldlocal) == VAR_DECL)
4193 shadow_warning ("a previous local", name, oldlocal);
4194 else if (oldglobal != NULL_TREE
4195 && TREE_CODE (oldglobal) == VAR_DECL)
4196 /* XXX shadow warnings in outer-more namespaces */
4197 shadow_warning ("a global declaration", name, oldglobal);
4201 if (TREE_CODE (x) == FUNCTION_DECL)
4202 check_default_args (x);
4204 if (TREE_CODE (x) == VAR_DECL)
4205 maybe_register_incomplete_var (x);
4208 if (need_new_binding)
4209 add_decl_to_level (x,
4210 DECL_NAMESPACE_SCOPE_P (x)
4211 ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4212 : current_binding_level);
4217 /* Same as pushdecl, but define X in binding-level LEVEL. We rely on the
4218 caller to set DECL_CONTEXT properly. */
4221 pushdecl_with_scope (x, level)
4223 struct cp_binding_level *level;
4225 register struct cp_binding_level *b;
4226 tree function_decl = current_function_decl;
4228 current_function_decl = NULL_TREE;
4229 if (level->parm_flag == 2)
4231 b = class_binding_level;
4232 class_binding_level = level;
4233 pushdecl_class_level (x);
4234 class_binding_level = b;
4238 b = current_binding_level;
4239 current_binding_level = level;
4241 current_binding_level = b;
4243 current_function_decl = function_decl;
4247 /* Like pushdecl, only it places X in the current namespace,
4251 pushdecl_namespace_level (x)
4254 register struct cp_binding_level *b = current_binding_level;
4257 t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4259 /* Now, the type_shadowed stack may screw us. Munge it so it does
4261 if (TREE_CODE (x) == TYPE_DECL)
4263 tree name = DECL_NAME (x);
4265 tree *ptr = (tree *)0;
4266 for (; b != global_binding_level; b = b->level_chain)
4268 tree shadowed = b->type_shadowed;
4269 for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4270 if (TREE_PURPOSE (shadowed) == name)
4272 ptr = &TREE_VALUE (shadowed);
4273 /* Can't break out of the loop here because sometimes
4274 a binding level will have duplicate bindings for
4275 PT names. It's gross, but I haven't time to fix it. */
4278 newval = TREE_TYPE (x);
4279 if (ptr == (tree *)0)
4281 /* @@ This shouldn't be needed. My test case "zstring.cc" trips
4282 up here if this is changed to an assertion. --KR */
4283 SET_IDENTIFIER_TYPE_VALUE (name, newval);
4293 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4297 pushdecl_top_level (x)
4300 push_to_top_level ();
4301 x = pushdecl_namespace_level (x);
4302 pop_from_top_level ();
4306 /* Make the declaration of X appear in CLASS scope. */
4309 pushdecl_class_level (x)
4314 /* Get the name of X. */
4315 if (TREE_CODE (x) == OVERLOAD)
4316 name = DECL_NAME (get_first_fn (x));
4318 name = DECL_NAME (x);
4322 push_class_level_binding (name, x);
4323 if (TREE_CODE (x) == TYPE_DECL)
4324 set_identifier_type_value (name, TREE_TYPE (x));
4326 else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4328 /* If X is an anonymous aggregate, all of its members are
4329 treated as if they were members of the class containing the
4330 aggregate, for naming purposes. */
4333 for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f))
4334 pushdecl_class_level (f);
4338 /* Enter DECL into the symbol table, if that's appropriate. Returns
4339 DECL, or a modified version thereof. */
4342 maybe_push_decl (decl)
4345 tree type = TREE_TYPE (decl);
4347 /* Add this decl to the current binding level, but not if it comes
4348 from another scope, e.g. a static member variable. TEM may equal
4349 DECL or it may be a previous decl of the same name. */
4350 if (decl == error_mark_node
4351 || (TREE_CODE (decl) != PARM_DECL
4352 && DECL_CONTEXT (decl) != NULL_TREE
4353 /* Definitions of namespace members outside their namespace are
4355 && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4356 || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4357 || TREE_CODE (type) == UNKNOWN_TYPE
4358 /* The declaration of a template specialization does not affect
4359 the functions available for overload resolution, so we do not
4361 || (TREE_CODE (decl) == FUNCTION_DECL
4362 && DECL_TEMPLATE_SPECIALIZATION (decl)))
4365 return pushdecl (decl);
4368 /* Make the declaration(s) of X appear in CLASS scope
4369 under the name NAME. */
4372 push_class_level_binding (name, x)
4377 /* The class_binding_level will be NULL if x is a template
4378 parameter name in a member template. */
4379 if (!class_binding_level)
4382 /* Make sure that this new member does not have the same name
4383 as a template parameter. */
4384 if (TYPE_BEING_DEFINED (current_class_type))
4385 check_template_shadow (x);
4387 /* If this declaration shadows a declaration from an enclosing
4388 class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4389 we leave this class. Record the shadowed declaration here. */
4390 binding = IDENTIFIER_BINDING (name);
4392 && ((TREE_CODE (x) == OVERLOAD
4393 && BINDING_VALUE (binding)
4394 && is_overloaded_fn (BINDING_VALUE (binding)))
4395 || INHERITED_VALUE_BINDING_P (binding)))
4400 /* If the old binding was from a base class, and was for a tag
4401 name, slide it over to make room for the new binding. The
4402 old binding is still visible if explicitly qualified with a
4404 if (INHERITED_VALUE_BINDING_P (binding)
4405 && BINDING_VALUE (binding)
4406 && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4407 && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4408 && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4410 old_decl = BINDING_TYPE (binding);
4411 BINDING_TYPE (binding) = BINDING_VALUE (binding);
4412 BINDING_VALUE (binding) = NULL_TREE;
4413 INHERITED_VALUE_BINDING_P (binding) = 0;
4416 old_decl = BINDING_VALUE (binding);
4418 /* Find the previous binding of name on the class-shadowed
4419 list, and update it. */
4420 for (shadow = class_binding_level->class_shadowed;
4422 shadow = TREE_CHAIN (shadow))
4423 if (TREE_PURPOSE (shadow) == name
4424 && TREE_TYPE (shadow) == old_decl)
4426 BINDING_VALUE (binding) = x;
4427 INHERITED_VALUE_BINDING_P (binding) = 0;
4428 TREE_TYPE (shadow) = x;
4429 IDENTIFIER_CLASS_VALUE (name) = x;
4434 /* If we didn't replace an existing binding, put the binding on the
4435 stack of bindings for the identifier, and update the shadowed list. */
4436 if (push_class_binding (name, x))
4438 class_binding_level->class_shadowed
4439 = tree_cons (name, NULL,
4440 class_binding_level->class_shadowed);
4441 /* Record the value we are binding NAME to so that we can know
4442 what to pop later. */
4443 TREE_TYPE (class_binding_level->class_shadowed) = x;
4447 /* Insert another USING_DECL into the current binding level, returning
4448 this declaration. If this is a redeclaration, do nothing, and
4449 return NULL_TREE if this not in namespace scope (in namespace
4450 scope, a using decl might extend any previous bindings). */
4453 push_using_decl (scope, name)
4459 my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4460 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4461 for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4462 if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4465 return namespace_bindings_p () ? decl : NULL_TREE;
4466 decl = build_lang_decl (USING_DECL, name, void_type_node);
4467 DECL_INITIAL (decl) = scope;
4468 TREE_CHAIN (decl) = current_binding_level->usings;
4469 current_binding_level->usings = decl;
4473 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4474 changed (i.e. there was already a directive), or the fresh
4475 TREE_LIST otherwise. */
4478 push_using_directive (used)
4481 tree ud = current_binding_level->using_directives;
4482 tree iter, ancestor;
4484 /* Check if we already have this. */
4485 if (purpose_member (used, ud) != NULL_TREE)
4488 /* Recursively add all namespaces used. */
4489 for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4490 push_using_directive (TREE_PURPOSE (iter));
4492 ancestor = namespace_ancestor (current_decl_namespace (), used);
4493 ud = current_binding_level->using_directives;
4494 ud = tree_cons (used, ancestor, ud);
4495 current_binding_level->using_directives = ud;
4499 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4500 other definitions already in place. We get around this by making
4501 the value of the identifier point to a list of all the things that
4502 want to be referenced by that name. It is then up to the users of
4503 that name to decide what to do with that list.
4505 DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4506 DECL_TEMPLATE_RESULT. It is dealt with the same way.
4508 FLAGS is a bitwise-or of the following values:
4509 PUSH_LOCAL: Bind DECL in the current scope, rather than at
4511 PUSH_USING: DECL is being pushed as the result of a using
4514 The value returned may be a previous declaration if we guessed wrong
4515 about what language DECL should belong to (C or C++). Otherwise,
4516 it's always DECL (and never something that's not a _DECL). */
4519 push_overloaded_decl (decl, flags)
4523 tree name = DECL_NAME (decl);
4526 int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4529 old = namespace_binding (name, DECL_CONTEXT (decl));
4531 old = lookup_name_current_level (name);
4535 if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4537 tree t = TREE_TYPE (old);
4538 if (IS_AGGR_TYPE (t) && warn_shadow
4539 && (! DECL_IN_SYSTEM_HEADER (decl)
4540 || ! DECL_IN_SYSTEM_HEADER (old)))
4541 warning ("`%#D' hides constructor for `%#T'", decl, t);
4544 else if (is_overloaded_fn (old))
4548 for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4550 tree fn = OVL_CURRENT (tmp);
4552 if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4553 && !(flags & PUSH_USING)
4554 && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4555 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4556 error ("`%#D' conflicts with previous using declaration `%#D'",
4559 if (duplicate_decls (decl, fn))
4563 else if (old == error_mark_node)
4564 /* Ignore the undefined symbol marker. */
4568 cp_error_at ("previous non-function declaration `%#D'", old);
4569 error ("conflicts with function declaration `%#D'", decl);
4574 if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4576 if (old && TREE_CODE (old) != OVERLOAD)
4577 new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4579 new_binding = ovl_cons (decl, old);
4580 if (flags & PUSH_USING)
4581 OVL_USED (new_binding) = 1;
4584 /* NAME is not ambiguous. */
4588 set_namespace_binding (name, current_namespace, new_binding);
4591 /* We only create an OVERLOAD if there was a previous binding at
4592 this level, or if decl is a template. In the former case, we
4593 need to remove the old binding and replace it with the new
4594 binding. We must also run through the NAMES on the binding
4595 level where the name was bound to update the chain. */
4597 if (TREE_CODE (new_binding) == OVERLOAD && old)
4601 for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4603 d = &TREE_CHAIN (*d))
4605 || (TREE_CODE (*d) == TREE_LIST
4606 && TREE_VALUE (*d) == old))
4608 if (TREE_CODE (*d) == TREE_LIST)
4609 /* Just replace the old binding with the new. */
4610 TREE_VALUE (*d) = new_binding;
4612 /* Build a TREE_LIST to wrap the OVERLOAD. */
4613 *d = tree_cons (NULL_TREE, new_binding,
4616 /* And update the CPLUS_BINDING node. */
4617 BINDING_VALUE (IDENTIFIER_BINDING (name))
4622 /* We should always find a previous binding in this case. */
4626 /* Install the new binding. */
4627 push_local_binding (name, new_binding, flags);
4633 /* Generate an implicit declaration for identifier FUNCTIONID
4634 as a function of type int (). Print a warning if appropriate. */
4637 implicitly_declare (functionid)
4642 /* We used to reuse an old implicit decl here,
4643 but this loses with inline functions because it can clobber
4644 the saved decl chains. */
4645 decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4647 DECL_EXTERNAL (decl) = 1;
4648 TREE_PUBLIC (decl) = 1;
4650 /* ISO standard says implicit declarations are in the innermost block.
4651 So we record the decl in the standard fashion. */
4653 rest_of_decl_compilation (decl, NULL, 0, 0);
4656 /* Only one warning per identifier. */
4657 && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4659 pedwarn ("implicit declaration of function `%#D'", decl);
4662 SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4667 /* Return zero if the declaration NEWDECL is valid
4668 when the declaration OLDDECL (assumed to be for the same name)
4669 has already been seen.
4670 Otherwise return an error message format string with a %s
4671 where the identifier should go. */
4674 redeclaration_error_message (newdecl, olddecl)
4675 tree newdecl, olddecl;
4677 if (TREE_CODE (newdecl) == TYPE_DECL)
4679 /* Because C++ can put things into name space for free,
4680 constructs like "typedef struct foo { ... } foo"
4681 would look like an erroneous redeclaration. */
4682 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4685 return "redefinition of `%#D'";
4687 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4689 /* If this is a pure function, its olddecl will actually be
4690 the original initialization to `0' (which we force to call
4691 abort()). Don't complain about redefinition in this case. */
4692 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
4695 /* If both functions come from different namespaces, this is not
4696 a redeclaration - this is a conflict with a used function. */
4697 if (DECL_NAMESPACE_SCOPE_P (olddecl)
4698 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4699 return "`%D' conflicts with used function";
4701 /* We'll complain about linkage mismatches in
4702 warn_extern_redeclared_static. */
4704 /* Defining the same name twice is no good. */
4705 if (DECL_INITIAL (olddecl) != NULL_TREE
4706 && DECL_INITIAL (newdecl) != NULL_TREE)
4708 if (DECL_NAME (olddecl) == NULL_TREE)
4709 return "`%#D' not declared in class";
4711 return "redefinition of `%#D'";
4715 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4717 if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4718 && (DECL_TEMPLATE_RESULT (newdecl)
4719 != DECL_TEMPLATE_RESULT (olddecl))
4720 && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4721 && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4722 || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4723 && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4724 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
4725 return "redefinition of `%#D'";
4728 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
4730 /* Objects declared at top level: */
4731 /* If at least one is a reference, it's ok. */
4732 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4734 /* Reject two definitions. */
4735 return "redefinition of `%#D'";
4739 /* Objects declared with block scope: */
4740 /* Reject two definitions, and reject a definition
4741 together with an external reference. */
4742 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4743 return "redeclaration of `%#D'";
4748 /* Create a new label, named ID. */
4751 make_label_decl (id, local_p)
4757 decl = build_decl (LABEL_DECL, id, void_type_node);
4759 /* Make sure every label has an rtx. */
4762 DECL_CONTEXT (decl) = current_function_decl;
4763 DECL_MODE (decl) = VOIDmode;
4764 C_DECLARED_LABEL_FLAG (decl) = local_p;
4766 /* Say where one reference is to the label, for the sake of the
4767 error if it is not defined. */
4768 DECL_SOURCE_LINE (decl) = lineno;
4769 DECL_SOURCE_FILE (decl) = input_filename;
4771 /* Record the fact that this identifier is bound to this label. */
4772 SET_IDENTIFIER_LABEL_VALUE (id, decl);
4777 /* Record this label on the list of used labels so that we can check
4778 at the end of the function to see whether or not the label was
4779 actually defined, and so we can check when the label is defined whether
4780 this use is valid. */
4786 if (named_label_uses == NULL
4787 || named_label_uses->names_in_scope != current_binding_level->names
4788 || named_label_uses->label_decl != decl)
4790 struct named_label_use_list *new_ent;
4791 new_ent = ((struct named_label_use_list *)
4792 ggc_alloc (sizeof (struct named_label_use_list)));
4793 new_ent->label_decl = decl;
4794 new_ent->names_in_scope = current_binding_level->names;
4795 new_ent->binding_level = current_binding_level;
4796 new_ent->lineno_o_goto = lineno;
4797 new_ent->filename_o_goto = input_filename;
4798 new_ent->next = named_label_uses;
4799 named_label_uses = new_ent;
4803 /* Look for a label named ID in the current function. If one cannot
4804 be found, create one. (We keep track of used, but undefined,
4805 labels, and complain about them at the end of a function.) */
4812 struct named_label_list *ent;
4814 /* You can't use labels at global scope. */
4815 if (current_function_decl == NULL_TREE)
4817 error ("label `%s' referenced outside of any function",
4818 IDENTIFIER_POINTER (id));
4822 /* See if we've already got this label. */
4823 decl = IDENTIFIER_LABEL_VALUE (id);
4824 if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4827 /* Record this label on the list of labels used in this function.
4828 We do this before calling make_label_decl so that we get the
4829 IDENTIFIER_LABEL_VALUE before the new label is declared. */
4830 ent = ((struct named_label_list *)
4831 ggc_alloc_cleared (sizeof (struct named_label_list)));
4832 ent->old_value = IDENTIFIER_LABEL_VALUE (id);
4833 ent->next = named_labels;
4836 /* We need a new label. */
4837 decl = make_label_decl (id, /*local_p=*/0);
4839 /* Now fill in the information we didn't have before. */
4840 ent->label_decl = decl;
4845 /* Declare a local label named ID. */
4848 declare_local_label (id)
4853 /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4854 this scope we can restore the old value of
4855 IDENTIFIER_TYPE_VALUE. */
4856 current_binding_level->shadowed_labels
4857 = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4858 current_binding_level->shadowed_labels);
4859 /* Look for the label. */
4860 decl = make_label_decl (id, /*local_p=*/1);
4861 /* Now fill in the information we didn't have before. */
4862 TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4867 /* Returns nonzero if it is ill-formed to jump past the declaration of
4868 DECL. Returns 2 if it's also a real problem. */
4871 decl_jump_unsafe (decl)
4874 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
4877 if (DECL_INITIAL (decl) == NULL_TREE
4878 && pod_type_p (TREE_TYPE (decl)))
4881 /* This is really only important if we're crossing an initialization.
4882 The POD stuff is just pedantry; why should it matter if the class
4883 contains a field of pointer to member type? */
4884 if (DECL_INITIAL (decl)
4885 || (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
4890 /* Check that a single previously seen jump to a newly defined label
4891 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
4892 the jump context; NAMES are the names in scope in LEVEL at the jump
4893 context; FILE and LINE are the source position of the jump or 0. */
4896 check_previous_goto_1 (decl, level, names, file, line)
4898 struct cp_binding_level *level;
4905 struct cp_binding_level *b = current_binding_level;
4906 for (; b; b = b->level_chain)
4908 tree new_decls = b->names;
4909 tree old_decls = (b == level ? names : NULL_TREE);
4910 for (; new_decls != old_decls;
4911 new_decls = TREE_CHAIN (new_decls))
4913 int problem = decl_jump_unsafe (new_decls);
4920 pedwarn ("jump to label `%D'", decl);
4922 pedwarn ("jump to case label");
4925 pedwarn_with_file_and_line (file, line, " from here");
4930 cp_error_at (" crosses initialization of `%#D'",
4933 cp_pedwarn_at (" enters scope of non-POD `%#D'",
4939 if ((b->is_try_scope || b->is_catch_scope) && ! saw_eh)
4944 pedwarn ("jump to label `%D'", decl);
4946 pedwarn ("jump to case label");
4949 pedwarn_with_file_and_line (file, line, " from here");
4952 if (b->is_try_scope)
4953 error (" enters try block");
4955 error (" enters catch block");
4962 check_previous_goto (use)
4963 struct named_label_use_list *use;
4965 check_previous_goto_1 (use->label_decl, use->binding_level,
4966 use->names_in_scope, use->filename_o_goto,
4967 use->lineno_o_goto);
4971 check_switch_goto (level)
4972 struct cp_binding_level *level;
4974 check_previous_goto_1 (NULL_TREE, level, level->names, NULL, 0);
4977 /* Check that any previously seen jumps to a newly defined label DECL
4978 are OK. Called by define_label. */
4981 check_previous_gotos (decl)
4984 struct named_label_use_list **usep;
4986 if (! TREE_USED (decl))
4989 for (usep = &named_label_uses; *usep; )
4991 struct named_label_use_list *use = *usep;
4992 if (use->label_decl == decl)
4994 check_previous_goto (use);
4998 usep = &(use->next);
5002 /* Check that a new jump to a label DECL is OK. Called by
5003 finish_goto_stmt. */
5011 struct named_label_list *lab;
5013 /* We can't know where a computed goto is jumping. So we assume
5015 if (! DECL_P (decl))
5018 /* If the label hasn't been defined yet, defer checking. */
5019 if (! DECL_INITIAL (decl))
5025 for (lab = named_labels; lab; lab = lab->next)
5026 if (decl == lab->label_decl)
5029 /* If the label is not on named_labels it's a gcc local label, so
5030 it must be in an outer scope, so jumping to it is always OK. */
5034 if ((lab->in_try_scope || lab->in_catch_scope || lab->bad_decls)
5037 cp_pedwarn_at ("jump to label `%D'", decl);
5038 pedwarn (" from here");
5042 for (bad = lab->bad_decls; bad; bad = TREE_CHAIN (bad))
5044 tree b = TREE_VALUE (bad);
5045 int u = decl_jump_unsafe (b);
5047 if (u > 1 && DECL_ARTIFICIAL (b))
5048 /* Can't skip init of __exception_info. */
5049 cp_error_at (" enters catch block", b);
5051 cp_error_at (" skips initialization of `%#D'", b);
5053 cp_pedwarn_at (" enters scope of non-POD `%#D'", b);
5056 if (lab->in_try_scope)
5057 error (" enters try block");
5058 else if (lab->in_catch_scope)
5059 error (" enters catch block");
5062 /* Define a label, specifying the location in the source file.
5063 Return the LABEL_DECL node for the label, if the definition is valid.
5064 Otherwise return 0. */
5067 define_label (filename, line, name)
5068 const char *filename;
5072 tree decl = lookup_label (name);
5073 struct named_label_list *ent;
5074 register struct cp_binding_level *p;
5076 for (ent = named_labels; ent; ent = ent->next)
5077 if (ent->label_decl == decl)
5080 /* After labels, make any new cleanups in the function go into their
5081 own new (temporary) binding contour. */
5082 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5083 p->more_cleanups_ok = 0;
5085 if (name == get_identifier ("wchar_t"))
5086 pedwarn ("label named wchar_t");
5088 if (DECL_INITIAL (decl) != NULL_TREE)
5090 error ("duplicate label `%D'", decl);
5095 /* Mark label as having been defined. */
5096 DECL_INITIAL (decl) = error_mark_node;
5097 /* Say where in the source. */
5098 DECL_SOURCE_FILE (decl) = filename;
5099 DECL_SOURCE_LINE (decl) = line;
5102 ent->names_in_scope = current_binding_level->names;
5103 ent->binding_level = current_binding_level;
5105 check_previous_gotos (decl);
5112 struct cp_binding_level *level;
5113 struct cp_switch *next;
5114 /* The SWITCH_STMT being built. */
5116 /* A splay-tree mapping the low element of a case range to the high
5117 element, or NULL_TREE if there is no high element. Used to
5118 determine whether or not a new case label duplicates an old case
5119 label. We need a tree, rather than simply a hash table, because
5120 of the GNU case range extension. */
5124 /* A stack of the currently active switch statements. The innermost
5125 switch statement is on the top of the stack. There is no need to
5126 mark the stack for garbage collection because it is only active
5127 during the processing of the body of a function, and we never
5128 collect at that point. */
5130 static struct cp_switch *switch_stack;
5132 /* Called right after a switch-statement condition is parsed.
5133 SWITCH_STMT is the switch statement being parsed. */
5136 push_switch (switch_stmt)
5140 = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
5141 p->level = current_binding_level;
5142 p->next = switch_stack;
5143 p->switch_stmt = switch_stmt;
5144 p->cases = splay_tree_new (case_compare, NULL, NULL);
5151 struct cp_switch *cs;
5154 splay_tree_delete (cs->cases);
5155 switch_stack = switch_stack->next;
5159 /* Note that we've seen a definition of a case label, and complain if this
5160 is a bad place for one. */
5163 finish_case_label (low_value, high_value)
5168 register struct cp_binding_level *p;
5173 error ("case label not within a switch statement");
5175 error ("case label `%E' not within a switch statement",
5178 error ("`default' label not within a switch statement");
5182 if (processing_template_decl)
5186 /* For templates, just add the case label; we'll do semantic
5187 analysis at instantiation-time. */
5188 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
5189 return add_stmt (build_case_label (low_value, high_value, label));
5192 /* Find the condition on which this switch statement depends. */
5193 cond = SWITCH_COND (switch_stack->switch_stmt);
5194 if (cond && TREE_CODE (cond) == TREE_LIST)
5195 cond = TREE_VALUE (cond);
5197 r = c_add_case_label (switch_stack->cases, cond, low_value, high_value);
5198 if (r == error_mark_node)
5201 check_switch_goto (switch_stack->level);
5203 /* After labels, make any new cleanups in the function go into their
5204 own new (temporary) binding contour. */
5205 for (p = current_binding_level; !(p->parm_flag); p = p->level_chain)
5206 p->more_cleanups_ok = 0;
5211 /* Return the list of declarations of the current level.
5212 Note that this list is in reverse order unless/until
5213 you nreverse it; and when you do nreverse it, you must
5214 store the result back using `storedecls' or you will lose. */
5219 return current_binding_level->names;
5222 /* Return the list of type-tags (for structs, etc) of the current level. */
5227 return current_binding_level->tags;
5230 /* Store the list of declarations of the current level.
5231 This is done for the parameter declarations of a function being defined,
5232 after they are modified in the light of any missing parameters. */
5238 current_binding_level->names = decls;
5241 /* Similarly, store the list of tags of the current level. */
5247 current_binding_level->tags = tags;
5250 /* Return the type that should be used when TYPE's name is preceded
5251 by a tag such as 'struct' or 'union', or null if the name cannot
5252 be used in this way.
5254 For example, when processing the third line of:
5260 lookup of A will find the typedef. Given A's typedef, this function
5261 will return the type associated with "struct A". For the tag to be
5262 anything other than TYPE, TYPE must be a typedef whose original type
5263 has the same name and context as TYPE itself.
5265 It is not valid for a typedef of an anonymous type to be used with
5268 typedef struct { ... } B;
5271 Return null for this case. */
5274 follow_tag_typedef (type)
5279 original = original_type (type);
5280 if (! TYPE_NAME (original))
5282 if (TYPE_IDENTIFIER (original) == TYPE_IDENTIFIER (type)
5283 && (CP_DECL_CONTEXT (TYPE_NAME (original))
5284 == CP_DECL_CONTEXT (TYPE_NAME (type)))
5285 && !(CLASS_TYPE_P (original) && TYPE_WAS_ANONYMOUS (original)))
5291 /* Given NAME, an IDENTIFIER_NODE,
5292 return the structure (or union or enum) definition for that name.
5293 Searches binding levels from BINDING_LEVEL up to the global level.
5294 If THISLEVEL_ONLY is nonzero, searches only the specified context
5295 (but skips any tag-transparent contexts to find one that is
5296 meaningful for tags).
5297 FORM says which kind of type the caller wants;
5298 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5299 If the wrong kind of type is found, and it's not a template, an error is
5303 lookup_tag (form, name, binding_level, thislevel_only)
5304 enum tree_code form;
5306 struct cp_binding_level *binding_level;
5309 register struct cp_binding_level *level;
5310 /* Nonzero if, we should look past a template parameter level, even
5311 if THISLEVEL_ONLY. */
5312 int allow_template_parms_p = 1;
5314 for (level = binding_level; level; level = level->level_chain)
5317 if (ANON_AGGRNAME_P (name))
5318 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5320 /* There's no need for error checking here, because
5321 anon names are unique throughout the compilation. */
5322 if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5323 return TREE_VALUE (tail);
5325 else if (level->namespace_p)
5326 /* Do namespace lookup. */
5327 for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5329 tree old = binding_for_name (name, tail);
5331 /* If we just skipped past a template parameter level,
5332 even though THISLEVEL_ONLY, and we find a template
5333 class declaration, then we use the _TYPE node for the
5334 template. See the example below. */
5335 if (thislevel_only && !allow_template_parms_p
5336 && old && BINDING_VALUE (old)
5337 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5338 old = TREE_TYPE (BINDING_VALUE (old));
5340 old = BINDING_TYPE (old);
5344 /* We've found something at this binding level. If it is
5345 a typedef, extract the tag it refers to. Lookup fails
5346 if the typedef doesn't refer to a taggable type. */
5347 old = follow_tag_typedef (old);
5350 if (TREE_CODE (old) != form
5351 && (form == ENUMERAL_TYPE
5352 || TREE_CODE (old) == ENUMERAL_TYPE))
5354 error ("`%#D' redeclared as %C", old, form);
5359 if (thislevel_only || tail == global_namespace)
5363 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5365 if (TREE_PURPOSE (tail) == name)
5367 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5370 && (form == ENUMERAL_TYPE || code == ENUMERAL_TYPE))
5372 /* Definition isn't the kind we were looking for. */
5373 error ("`%#D' redeclared as %C", TREE_VALUE (tail), form);
5376 return TREE_VALUE (tail);
5379 if (thislevel_only && ! level->tag_transparent)
5381 if (level->template_parms_p && allow_template_parms_p)
5383 /* We must deal with cases like this:
5385 template <class T> struct S;
5386 template <class T> struct S {};
5388 When looking up `S', for the second declaration, we
5389 would like to find the first declaration. But, we
5390 are in the pseudo-global level created for the
5391 template parameters, rather than the (surrounding)
5392 namespace level. Thus, we keep going one more level,
5393 even though THISLEVEL_ONLY is nonzero. */
5394 allow_template_parms_p = 0;
5406 set_current_level_tags_transparency (tags_transparent)
5407 int tags_transparent;
5409 current_binding_level->tag_transparent = tags_transparent;
5413 /* Given a type, find the tag that was defined for it and return the tag name.
5414 Otherwise return 0. However, the value can never be 0
5415 in the cases in which this is used.
5417 C++: If NAME is nonzero, this is the new name to install. This is
5418 done when replacing anonymous tags with real tag names. */
5421 lookup_tag_reverse (type, name)
5425 register struct cp_binding_level *level;
5427 for (level = current_binding_level; level; level = level->level_chain)
5430 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5432 if (TREE_VALUE (tail) == type)
5435 TREE_PURPOSE (tail) = name;
5436 return TREE_PURPOSE (tail);
5443 /* Look up NAME in the NAMESPACE. */
5446 lookup_namespace_name (namespace, name)
5447 tree namespace, name;
5450 tree template_id = NULL_TREE;
5452 my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5454 if (TREE_CODE (name) == NAMESPACE_DECL)
5455 /* This happens for A::B<int> when B is a namespace. */
5457 else if (TREE_CODE (name) == TEMPLATE_DECL)
5459 /* This happens for A::B where B is a template, and there are no
5460 template arguments. */
5461 error ("invalid use of `%D'", name);
5462 return error_mark_node;
5465 namespace = ORIGINAL_NAMESPACE (namespace);
5467 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5470 name = TREE_OPERAND (name, 0);
5471 if (TREE_CODE (name) == OVERLOAD)
5472 name = DECL_NAME (OVL_CURRENT (name));
5473 else if (DECL_P (name))
5474 name = DECL_NAME (name);
5477 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5479 val = make_node (CPLUS_BINDING);
5480 if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5481 return error_mark_node;
5483 if (BINDING_VALUE (val))
5485 val = BINDING_VALUE (val);
5489 if (DECL_CLASS_TEMPLATE_P (val))
5490 val = lookup_template_class (val,
5491 TREE_OPERAND (template_id, 1),
5492 /*in_decl=*/NULL_TREE,
5493 /*context=*/NULL_TREE,
5494 /*entering_scope=*/0,
5495 tf_error | tf_warning);
5496 else if (DECL_FUNCTION_TEMPLATE_P (val)
5497 || TREE_CODE (val) == OVERLOAD)
5498 val = lookup_template_function (val,
5499 TREE_OPERAND (template_id, 1));
5502 error ("`%D::%D' is not a template",
5504 return error_mark_node;
5508 /* If we have a single function from a using decl, pull it out. */
5509 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5510 val = OVL_FUNCTION (val);
5512 /* Ignore built-in functions that haven't been prototyped yet. */
5513 if (!val || !DECL_P(val)
5514 || !DECL_LANG_SPECIFIC(val)
5515 || !DECL_ANTICIPATED (val))
5519 error ("`%D' undeclared in namespace `%D'", name, namespace);
5520 return error_mark_node;
5523 /* Hash a TYPENAME_TYPE. K is really of type `tree'. */
5532 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
5533 ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
5538 /* Compare two TYPENAME_TYPEs. K1 and K2 are really of type `tree'. */
5541 typename_compare (k1, k2)
5552 d1 = TYPE_NAME (t1);
5553 d2 = TYPE_NAME (t2);
5555 return (DECL_NAME (d1) == DECL_NAME (d2)
5556 && TYPE_CONTEXT (t1) == TYPE_CONTEXT (t2)
5557 && ((TREE_TYPE (t1) != NULL_TREE)
5558 == (TREE_TYPE (t2) != NULL_TREE))
5559 && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5560 && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5563 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
5564 the type of `T', NAME is the IDENTIFIER_NODE for `t'. If BASE_TYPE
5565 is non-NULL, this type is being created by the implicit typename
5566 extension, and BASE_TYPE is a type named `t' in some base class of
5567 `T' which depends on template parameters.
5569 Returns the new TYPENAME_TYPE. */
5571 static GTY ((param_is (union tree_node))) htab_t typename_htab;
5574 build_typename_type (context, name, fullname, base_type)
5584 if (typename_htab == NULL)
5586 typename_htab = htab_create_ggc (61, &typename_hash,
5587 &typename_compare, NULL);
5590 /* Build the TYPENAME_TYPE. */
5591 t = make_aggr_type (TYPENAME_TYPE);
5592 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5593 TYPENAME_TYPE_FULLNAME (t) = fullname;
5594 TREE_TYPE (t) = base_type;
5596 /* Build the corresponding TYPE_DECL. */
5597 d = build_decl (TYPE_DECL, name, t);
5598 TYPE_NAME (TREE_TYPE (d)) = d;
5599 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5600 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5601 DECL_ARTIFICIAL (d) = 1;
5603 /* See if we already have this type. */
5604 e = htab_find_slot (typename_htab, t, INSERT);
5613 /* Resolve `typename CONTEXT::NAME'. Returns an appropriate type,
5614 unless an error occurs, in which case error_mark_node is returned.
5615 If we locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is
5616 set, we return that, rather than the _TYPE it corresponds to, in
5617 other cases we look through the type decl. If TF_ERROR is set,
5618 complain about errors, otherwise be quiet. */
5621 make_typename_type (context, name, complain)
5623 tsubst_flags_t complain;
5629 if (!(TYPE_LANG_SPECIFIC (name)
5630 && (CLASSTYPE_IS_TEMPLATE (name)
5631 || CLASSTYPE_USE_TEMPLATE (name))))
5632 name = TYPE_IDENTIFIER (name);
5634 /* Create a TEMPLATE_ID_EXPR for the type. */
5635 name = build_nt (TEMPLATE_ID_EXPR,
5636 CLASSTYPE_TI_TEMPLATE (name),
5637 CLASSTYPE_TI_ARGS (name));
5639 else if (TREE_CODE (name) == TYPE_DECL)
5640 name = DECL_NAME (name);
5644 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5646 name = TREE_OPERAND (name, 0);
5647 if (TREE_CODE (name) == TEMPLATE_DECL)
5648 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5650 if (TREE_CODE (name) == TEMPLATE_DECL)
5652 error ("`%D' used without template parameters", name);
5653 return error_mark_node;
5655 if (TREE_CODE (name) != IDENTIFIER_NODE)
5658 if (TREE_CODE (context) == NAMESPACE_DECL)
5660 /* We can get here from typename_sub0 in the explicit_template_type
5661 expansion. Just fail. */
5662 if (complain & tf_error)
5663 error ("no class template named `%#T' in `%#T'",
5665 return error_mark_node;
5668 if (! uses_template_parms (context)
5669 || currently_open_class (context))
5671 if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5673 tree tmpl = NULL_TREE;
5674 if (IS_AGGR_TYPE (context))
5675 tmpl = lookup_field (context, name, 0, 0);
5676 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5678 if (complain & tf_error)
5679 error ("no class template named `%#T' in `%#T'",
5681 return error_mark_node;
5684 if (complain & tf_parsing)
5685 type_access_control (context, tmpl);
5687 enforce_access (context, tmpl);
5689 return lookup_template_class (tmpl,
5690 TREE_OPERAND (fullname, 1),
5692 /*entering_scope=*/0,
5693 tf_error | tf_warning);
5699 if (!IS_AGGR_TYPE (context))
5701 if (complain & tf_error)
5702 error ("no type named `%#T' in `%#T'", name, context);
5703 return error_mark_node;
5706 t = lookup_field (context, name, 0, 1);
5709 if (TREE_CODE (t) != TYPE_DECL)
5711 if (complain & tf_error)
5712 error ("no type named `%#T' in `%#T'", name, context);
5713 return error_mark_node;
5716 if (complain & tf_parsing)
5717 type_access_control (context, t);
5719 enforce_access (context, t);
5721 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
5723 if (IMPLICIT_TYPENAME_P (t))
5725 /* Lookup found an implicit typename that we had
5726 injected into the current scope. Doing things
5727 properly would have located the exact same type,
5728 so there is no error here. We must remove the
5729 implicitness so that we do not warn about it. */
5731 TREE_TYPE (t) = NULL_TREE;
5739 /* If the CONTEXT is not a template type, then either the field is
5740 there now or its never going to be. */
5741 if (!uses_template_parms (context))
5743 if (complain & tf_error)
5744 error ("no type named `%#T' in `%#T'", name, context);
5745 return error_mark_node;
5748 return build_typename_type (context, name, fullname, NULL_TREE);
5751 /* Resolve `CONTEXT::template NAME'. Returns an appropriate type,
5752 unless an error occurs, in which case error_mark_node is returned.
5753 If we locate a TYPE_DECL, we return that, rather than the _TYPE it
5754 corresponds to. If COMPLAIN zero, don't complain about any errors
5758 make_unbound_class_template (context, name, complain)
5760 tsubst_flags_t complain;
5766 name = TYPE_IDENTIFIER (name);
5767 else if (DECL_P (name))
5768 name = DECL_NAME (name);
5769 if (TREE_CODE (name) != IDENTIFIER_NODE)
5772 if (!uses_template_parms (context)
5773 || currently_open_class (context))
5775 tree tmpl = NULL_TREE;
5777 if (IS_AGGR_TYPE (context))
5778 tmpl = lookup_field (context, name, 0, 0);
5780 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5782 if (complain & tf_error)
5783 error ("no class template named `%#T' in `%#T'", name, context);
5784 return error_mark_node;
5787 if (complain & tf_parsing)
5788 type_access_control (context, tmpl);
5790 enforce_access (context, tmpl);
5795 /* Build the UNBOUND_CLASS_TEMPLATE. */
5796 t = make_aggr_type (UNBOUND_CLASS_TEMPLATE);
5797 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5798 TREE_TYPE (t) = NULL_TREE;
5800 /* Build the corresponding TEMPLATE_DECL. */
5801 d = build_decl (TEMPLATE_DECL, name, t);
5802 TYPE_NAME (TREE_TYPE (d)) = d;
5803 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5804 DECL_CONTEXT (d) = FROB_CONTEXT (context);
5805 DECL_ARTIFICIAL (d) = 1;
5810 /* Select the right _DECL from multiple choices. */
5813 select_decl (binding, flags)
5818 val = BINDING_VALUE (binding);
5820 if (LOOKUP_NAMESPACES_ONLY (flags))
5822 /* We are not interested in types. */
5823 if (val && TREE_CODE (val) == NAMESPACE_DECL)
5828 /* If we could have a type and
5829 we have nothing or we need a type and have none. */
5830 if (BINDING_TYPE (binding)
5831 && (!val || ((flags & LOOKUP_PREFER_TYPES)
5832 && TREE_CODE (val) != TYPE_DECL)))
5833 val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5834 /* Don't return non-types if we really prefer types. */
5835 else if (val && LOOKUP_TYPES_ONLY (flags) && TREE_CODE (val) != TYPE_DECL
5836 && (TREE_CODE (val) != TEMPLATE_DECL
5837 || !DECL_CLASS_TEMPLATE_P (val)))
5843 /* Unscoped lookup of a global: iterate over current namespaces,
5844 considering using-directives. If SPACESP is non-NULL, store a list
5845 of the namespaces we've considered in it. */
5848 unqualified_namespace_lookup (name, flags, spacesp)
5853 tree b = make_node (CPLUS_BINDING);
5854 tree initial = current_decl_namespace ();
5855 tree scope = initial;
5857 struct cp_binding_level *level;
5858 tree val = NULL_TREE;
5861 *spacesp = NULL_TREE;
5863 for (; !val; scope = CP_DECL_CONTEXT (scope))
5866 *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5867 val = binding_for_name (name, scope);
5869 /* Ignore anticipated built-in functions. */
5870 if (val && BINDING_VALUE (val)
5871 && DECL_P (BINDING_VALUE (val))
5872 && DECL_LANG_SPECIFIC (BINDING_VALUE (val))
5873 && DECL_ANTICIPATED (BINDING_VALUE (val)))
5875 BINDING_VALUE (b) = NULL_TREE;
5876 BINDING_TYPE (b) = NULL_TREE;
5880 /* Initialize binding for this context. */
5881 BINDING_VALUE (b) = BINDING_VALUE (val);
5882 BINDING_TYPE (b) = BINDING_TYPE (val);
5885 /* Add all _DECLs seen through local using-directives. */
5886 for (level = current_binding_level;
5887 !level->namespace_p;
5888 level = level->level_chain)
5889 if (!lookup_using_namespace (name, b, level->using_directives,
5890 scope, flags, spacesp))
5891 /* Give up because of error. */
5892 return error_mark_node;
5894 /* Add all _DECLs seen through global using-directives. */
5895 /* XXX local and global using lists should work equally. */
5899 if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5900 scope, flags, spacesp))
5901 /* Give up because of error. */
5902 return error_mark_node;
5903 if (siter == scope) break;
5904 siter = CP_DECL_CONTEXT (siter);
5907 val = select_decl (b, flags);
5908 if (scope == global_namespace)
5914 /* Combine prefer_type and namespaces_only into flags. */
5917 lookup_flags (prefer_type, namespaces_only)
5918 int prefer_type, namespaces_only;
5920 if (namespaces_only)
5921 return LOOKUP_PREFER_NAMESPACES;
5922 if (prefer_type > 1)
5923 return LOOKUP_PREFER_TYPES;
5924 if (prefer_type > 0)
5925 return LOOKUP_PREFER_BOTH;
5929 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5930 ignore it or not. Subroutine of lookup_name_real. */
5933 qualify_lookup (val, flags)
5937 if (val == NULL_TREE)
5939 if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5941 if ((flags & LOOKUP_PREFER_TYPES)
5942 && (TREE_CODE (val) == TYPE_DECL
5943 || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5944 && DECL_CLASS_TEMPLATE_P (val))))
5946 if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5951 /* Any other BINDING overrides an implicit TYPENAME. Warn about
5955 warn_about_implicit_typename_lookup (typename, binding)
5959 tree subtype = TREE_TYPE (TREE_TYPE (typename));
5960 tree name = DECL_NAME (typename);
5962 if (! (TREE_CODE (binding) == TEMPLATE_DECL
5963 && CLASSTYPE_TEMPLATE_INFO (subtype)
5964 && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5965 && ! (TREE_CODE (binding) == TYPE_DECL
5966 && same_type_p (TREE_TYPE (binding), subtype)))
5968 warning ("lookup of `%D' finds `%#D'",
5970 warning (" instead of `%D' from dependent base class",
5972 warning (" (use `typename %T::%D' if that's what you meant)",
5973 constructor_name (current_class_type), name);
5977 /* Look up NAME (an IDENTIFIER_NODE) in SCOPE (either a NAMESPACE_DECL
5978 or a class TYPE). If IS_TYPE_P is TRUE, then ignore non-type
5981 Returns a DECL (or OVERLOAD, or BASELINK) representing the
5982 declaration found. */
5985 lookup_qualified_name (tree scope, tree name, bool is_type_p, int flags)
5987 if (TREE_CODE (scope) == NAMESPACE_DECL)
5991 val = make_node (CPLUS_BINDING);
5992 flags |= LOOKUP_COMPLAIN;
5994 flags |= LOOKUP_PREFER_TYPES;
5995 if (!qualified_lookup_using_namespace (name, scope, val, flags))
5997 return select_decl (val, flags);
6000 return lookup_member (scope, name, 0, is_type_p);
6003 /* Check to see whether or not DECL is a variable that would have been
6004 in scope under the ARM, but is not in scope under the ANSI/ISO
6005 standard. If so, issue an error message. If name lookup would
6006 work in both cases, but return a different result, this function
6007 returns the result of ANSI/ISO lookup. Otherwise, it returns
6011 check_for_out_of_scope_variable (tree decl)
6015 /* We only care about out of scope variables. */
6016 if (!(TREE_CODE (decl) == VAR_DECL && DECL_DEAD_FOR_LOCAL (decl)))
6019 shadowed = DECL_SHADOWED_FOR_VAR (decl);
6020 while (shadowed != NULL_TREE && TREE_CODE (shadowed) == VAR_DECL
6021 && DECL_DEAD_FOR_LOCAL (shadowed))
6022 shadowed = DECL_SHADOWED_FOR_VAR (shadowed);
6024 shadowed = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (decl));
6027 if (!DECL_ERROR_REPORTED (decl))
6029 warning ("name lookup of `%D' changed",
6031 cp_warning_at (" matches this `%D' under ISO standard rules",
6033 cp_warning_at (" matches this `%D' under old rules", decl);
6034 DECL_ERROR_REPORTED (decl) = 1;
6039 /* If we have already complained about this declaration, there's no
6040 need to do it again. */
6041 if (DECL_ERROR_REPORTED (decl))
6044 DECL_ERROR_REPORTED (decl) = 1;
6045 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6047 error ("name lookup of `%D' changed for new ISO `for' scoping",
6049 cp_error_at (" cannot use obsolete binding at `%D' because it has a destructor", decl);
6050 return error_mark_node;
6054 pedwarn ("name lookup of `%D' changed for new ISO `for' scoping",
6056 cp_pedwarn_at (" using obsolete binding at `%D'", decl);
6062 /* Look up NAME in the current binding level and its superiors in the
6063 namespace of variables, functions and typedefs. Return a ..._DECL
6064 node of some kind representing its definition if there is only one
6065 such declaration, or return a TREE_LIST with all the overloaded
6066 definitions if there are many, or return 0 if it is undefined.
6068 If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
6069 If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
6070 Otherwise we prefer non-TYPE_DECLs.
6072 If NONCLASS is nonzero, we don't look for the NAME in class scope,
6073 using IDENTIFIER_CLASS_VALUE. */
6076 lookup_name_real (tree name,
6079 int namespaces_only,
6083 tree val = NULL_TREE;
6085 int val_is_implicit_typename = 0;
6087 /* Conversion operators are handled specially because ordinary
6088 unqualified name lookup will not find template conversion
6090 if (IDENTIFIER_TYPENAME_P (name))
6092 struct cp_binding_level *level;
6094 for (level = current_binding_level;
6095 level && !level->namespace_p;
6096 level = level->level_chain)
6101 /* A conversion operator can only be declared in a class
6103 if (level->parm_flag != 2)
6106 /* Lookup the conversion operator in the class. */
6107 class_type = level->this_class;
6108 operators = lookup_fnfields (class_type, name, /*protect=*/0);
6116 /* Hack: copy flag set by parser, if set. */
6117 if (only_namespace_names)
6118 namespaces_only = 1;
6120 flags |= lookup_flags (prefer_type, namespaces_only);
6122 /* First, look in non-namespace scopes. */
6124 if (current_class_type == NULL_TREE)
6127 for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
6131 if (!LOCAL_BINDING_P (t) && nonclass)
6132 /* We're not looking for class-scoped bindings, so keep going. */
6135 /* If this is the kind of thing we're looking for, we're done. */
6136 if (qualify_lookup (BINDING_VALUE (t), flags))
6137 binding = BINDING_VALUE (t);
6138 else if ((flags & LOOKUP_PREFER_TYPES)
6139 && qualify_lookup (BINDING_TYPE (t), flags))
6140 binding = BINDING_TYPE (t);
6142 binding = NULL_TREE;
6145 && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
6147 if (val_is_implicit_typename && !yylex)
6148 warn_about_implicit_typename_lookup (val, binding);
6150 val_is_implicit_typename
6151 = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
6152 if (!val_is_implicit_typename)
6157 /* Now lookup in namespace scopes. */
6158 if (!val || val_is_implicit_typename)
6160 t = unqualified_namespace_lookup (name, flags, 0);
6163 if (val_is_implicit_typename && !yylex)
6164 warn_about_implicit_typename_lookup (val, t);
6171 /* If we have a single function from a using decl, pull it out. */
6172 if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
6173 val = OVL_FUNCTION (val);
6180 lookup_name_nonclass (name)
6183 return lookup_name_real (name, 0, 1, 0, LOOKUP_COMPLAIN);
6187 lookup_function_nonclass (name, args)
6191 return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
6195 lookup_name_namespace_only (name)
6198 /* type-or-namespace, nonclass, namespace_only */
6199 return lookup_name_real (name, 1, 1, 1, LOOKUP_COMPLAIN);
6203 lookup_name (name, prefer_type)
6207 return lookup_name_real (name, prefer_type, 0, 0, LOOKUP_COMPLAIN);
6210 /* Similar to `lookup_name' but look only in the innermost non-class
6214 lookup_name_current_level (name)
6217 struct cp_binding_level *b;
6220 b = current_binding_level;
6221 while (b->parm_flag == 2)
6226 t = IDENTIFIER_NAMESPACE_VALUE (name);
6228 /* extern "C" function() */
6229 if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
6232 else if (IDENTIFIER_BINDING (name)
6233 && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
6237 if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
6238 return IDENTIFIER_VALUE (name);
6250 /* Like lookup_name_current_level, but for types. */
6253 lookup_type_current_level (name)
6256 register tree t = NULL_TREE;
6258 my_friendly_assert (! current_binding_level->namespace_p, 980716);
6260 if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
6261 && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
6263 struct cp_binding_level *b = current_binding_level;
6266 if (purpose_member (name, b->type_shadowed))
6267 return REAL_IDENTIFIER_TYPE_VALUE (name);
6279 begin_only_namespace_names ()
6281 only_namespace_names = 1;
6285 end_only_namespace_names ()
6287 only_namespace_names = 0;
6290 /* Push the declarations of builtin types into the namespace.
6291 RID_INDEX is the index of the builtin type
6292 in the array RID_POINTERS. NAME is the name used when looking
6293 up the builtin type. TYPE is the _TYPE node for the builtin type. */
6296 record_builtin_type (rid_index, name, type)
6301 tree rname = NULL_TREE, tname = NULL_TREE;
6302 tree tdecl = NULL_TREE;
6304 if ((int) rid_index < (int) RID_MAX)
6305 rname = ridpointers[(int) rid_index];
6307 tname = get_identifier (name);
6309 TYPE_BUILT_IN (type) = 1;
6313 tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
6314 set_identifier_type_value (tname, NULL_TREE);
6315 if ((int) rid_index < (int) RID_MAX)
6316 /* Built-in types live in the global namespace. */
6317 SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
6319 if (rname != NULL_TREE)
6321 if (tname != NULL_TREE)
6323 set_identifier_type_value (rname, NULL_TREE);
6324 SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
6328 tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
6329 set_identifier_type_value (rname, NULL_TREE);
6334 /* Record one of the standard Java types.
6335 * Declare it as having the given NAME.
6336 * If SIZE > 0, it is the size of one of the integral types;
6337 * otherwise it is the negative of the size of one of the other types. */
6340 record_builtin_java_type (name, size)
6346 type = make_signed_type (size);
6347 else if (size > -32)
6348 { /* "__java_char" or ""__java_boolean". */
6349 type = make_unsigned_type (-size);
6350 /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6353 { /* "__java_float" or ""__java_double". */
6354 type = make_node (REAL_TYPE);
6355 TYPE_PRECISION (type) = - size;
6358 record_builtin_type (RID_MAX, name, type);
6359 decl = TYPE_NAME (type);
6361 /* Suppress generate debug symbol entries for these types,
6362 since for normal C++ they are just clutter.
6363 However, push_lang_context undoes this if extern "Java" is seen. */
6364 DECL_IGNORED_P (decl) = 1;
6366 TYPE_FOR_JAVA (type) = 1;
6370 /* Push a type into the namespace so that the back-ends ignore it. */
6373 record_unknown_type (type, name)
6377 tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6378 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
6379 DECL_IGNORED_P (decl) = 1;
6380 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6381 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6382 TYPE_ALIGN (type) = 1;
6383 TYPE_USER_ALIGN (type) = 0;
6384 TYPE_MODE (type) = TYPE_MODE (void_type_node);
6387 /* An string for which we should create an IDENTIFIER_NODE at
6390 typedef struct predefined_identifier
6392 /* The name of the identifier. */
6393 const char *const name;
6394 /* The place where the IDENTIFIER_NODE should be stored. */
6396 /* Nonzero if this is the name of a constructor or destructor. */
6397 const int ctor_or_dtor_p;
6398 } predefined_identifier;
6400 /* Create all the predefined identifiers. */
6403 initialize_predefined_identifiers ()
6405 const predefined_identifier *pid;
6407 /* A table of identifiers to create at startup. */
6408 static const predefined_identifier predefined_identifiers[] = {
6409 { "C++", &lang_name_cplusplus, 0 },
6410 { "C", &lang_name_c, 0 },
6411 { "Java", &lang_name_java, 0 },
6412 { CTOR_NAME, &ctor_identifier, 1 },
6413 { "__base_ctor", &base_ctor_identifier, 1 },
6414 { "__comp_ctor", &complete_ctor_identifier, 1 },
6415 { DTOR_NAME, &dtor_identifier, 1 },
6416 { "__comp_dtor", &complete_dtor_identifier, 1 },
6417 { "__base_dtor", &base_dtor_identifier, 1 },
6418 { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6419 { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6420 { "nelts", &nelts_identifier, 0 },
6421 { THIS_NAME, &this_identifier, 0 },
6422 { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6423 { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6424 { "_vptr", &vptr_identifier, 0 },
6425 { "__vtt_parm", &vtt_parm_identifier, 0 },
6426 { "std", &std_identifier, 0 },
6430 for (pid = predefined_identifiers; pid->name; ++pid)
6432 *pid->node = get_identifier (pid->name);
6433 if (pid->ctor_or_dtor_p)
6434 IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6438 /* Create the predefined scalar types of C,
6439 and some nodes representing standard constants (0, 1, (void *)0).
6440 Initialize the global binding level.
6441 Make definitions for built-in primitive functions. */
6444 cxx_init_decl_processing ()
6447 tree void_ftype_ptr;
6449 /* Create all the identifiers we need. */
6450 initialize_predefined_identifiers ();
6452 /* Fill in back-end hooks. */
6453 lang_missing_noreturn_ok_p = &cp_missing_noreturn_ok_p;
6455 /* Create the global variables. */
6456 push_to_top_level ();
6458 /* Enter the global namespace. */
6459 my_friendly_assert (global_namespace == NULL_TREE, 375);
6460 push_namespace (get_identifier ("::"));
6461 global_namespace = current_namespace;
6462 current_lang_name = NULL_TREE;
6464 /* Adjust various flags based on command-line settings. */
6465 if (! flag_permissive && ! pedantic)
6466 flag_pedantic_errors = 1;
6467 if (!flag_no_inline)
6469 flag_inline_trees = 1;
6472 if (flag_inline_functions)
6474 flag_inline_trees = 2;
6475 flag_inline_functions = 0;
6478 /* Force minimum function alignment if using the least significant
6479 bit of function pointers to store the virtual bit. */
6480 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6481 && force_align_functions_log < 1)
6482 force_align_functions_log = 1;
6485 current_lang_name = lang_name_c;
6487 current_function_decl = NULL_TREE;
6488 current_binding_level = NULL_BINDING_LEVEL;
6489 free_binding_level = NULL_BINDING_LEVEL;
6491 build_common_tree_nodes (flag_signed_char);
6493 error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6494 TREE_TYPE (error_mark_list) = error_mark_node;
6496 /* Make the binding_level structure for global names. */
6498 global_binding_level = current_binding_level;
6499 /* The global level is the namespace level of ::. */
6500 NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6501 declare_namespace_level ();
6503 /* Create the `std' namespace. */
6504 push_namespace (std_identifier);
6505 std_node = current_namespace;
6508 c_common_nodes_and_builtins ();
6510 java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6511 java_short_type_node = record_builtin_java_type ("__java_short", 16);
6512 java_int_type_node = record_builtin_java_type ("__java_int", 32);
6513 java_long_type_node = record_builtin_java_type ("__java_long", 64);
6514 java_float_type_node = record_builtin_java_type ("__java_float", -32);
6515 java_double_type_node = record_builtin_java_type ("__java_double", -64);
6516 java_char_type_node = record_builtin_java_type ("__java_char", -16);
6517 java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6519 integer_two_node = build_int_2 (2, 0);
6520 TREE_TYPE (integer_two_node) = integer_type_node;
6521 integer_three_node = build_int_2 (3, 0);
6522 TREE_TYPE (integer_three_node) = integer_type_node;
6524 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6525 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6526 TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6527 TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6528 TYPE_PRECISION (boolean_type_node) = 1;
6529 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6530 boolean_false_node = build_int_2 (0, 0);
6531 TREE_TYPE (boolean_false_node) = boolean_type_node;
6532 boolean_true_node = build_int_2 (1, 0);
6533 TREE_TYPE (boolean_true_node) = boolean_type_node;
6535 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6538 record_builtin_type (RID_MAX, NULL, string_type_node);
6541 delta_type_node = ptrdiff_type_node;
6542 vtable_index_type = ptrdiff_type_node;
6544 vtt_parm_type = build_pointer_type (const_ptr_type_node);
6545 void_ftype = build_function_type (void_type_node, void_list_node);
6546 void_ftype_ptr = build_function_type (void_type_node,
6547 tree_cons (NULL_TREE,
6551 = build_exception_variant (void_ftype_ptr, empty_except_spec);
6553 /* C++ extensions */
6555 unknown_type_node = make_node (UNKNOWN_TYPE);
6556 record_unknown_type (unknown_type_node, "unknown type");
6558 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
6559 TREE_TYPE (unknown_type_node) = unknown_type_node;
6561 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6563 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6564 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6567 /* Make sure we get a unique function type, so we can give
6568 its pointer type a name. (This wins for gdb.) */
6569 tree vfunc_type = make_node (FUNCTION_TYPE);
6570 TREE_TYPE (vfunc_type) = integer_type_node;
6571 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6572 layout_type (vfunc_type);
6574 vtable_entry_type = build_pointer_type (vfunc_type);
6576 record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6579 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6580 layout_type (vtbl_type_node);
6581 vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6582 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
6583 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6584 layout_type (vtbl_ptr_type_node);
6585 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
6587 push_namespace (get_identifier ("__cxxabiv1"));
6588 abi_node = current_namespace;
6591 global_type_node = make_node (LANG_TYPE);
6592 record_unknown_type (global_type_node, "global type");
6595 current_lang_name = lang_name_cplusplus;
6598 tree bad_alloc_type_node, newtype, deltype;
6599 tree ptr_ftype_sizetype;
6601 push_namespace (std_identifier);
6603 = xref_tag (class_type, get_identifier ("bad_alloc"),
6604 /*attributes=*/NULL_TREE, 1);
6607 = build_function_type (ptr_type_node,
6608 tree_cons (NULL_TREE,
6611 newtype = build_exception_variant
6612 (ptr_ftype_sizetype, add_exception_specifier
6613 (NULL_TREE, bad_alloc_type_node, -1));
6614 deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6615 push_cp_library_fn (NEW_EXPR, newtype);
6616 push_cp_library_fn (VEC_NEW_EXPR, newtype);
6617 global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
6618 push_cp_library_fn (VEC_DELETE_EXPR, deltype);
6622 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
6624 /* Perform other language dependent initializations. */
6625 init_class_processing ();
6626 init_search_processing ();
6627 init_rtti_processing ();
6629 if (flag_exceptions)
6630 init_exception_processing ();
6632 if (! supports_one_only ())
6635 make_fname_decl = cp_make_fname_decl;
6636 start_fname_decls ();
6638 /* Show we use EH for cleanups. */
6639 using_eh_for_cleanups ();
6641 /* Maintain consistency. Perhaps we should just complain if they
6642 say -fwritable-strings? */
6643 if (flag_writable_strings)
6644 flag_const_strings = 0;
6647 /* Generate an initializer for a function naming variable from
6648 NAME. NAME may be NULL, in which case we generate a special
6649 ERROR_MARK node which should be replaced later. */
6652 cp_fname_init (name)
6655 tree domain = NULL_TREE;
6657 tree init = NULL_TREE;
6662 length = strlen (name);
6663 domain = build_index_type (size_int (length));
6664 init = build_string (length + 1, name);
6667 type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
6668 type = build_cplus_array_type (type, domain);
6671 TREE_TYPE (init) = type;
6673 /* We don't know the value until instantiation time. Make
6674 something which will be digested now, but replaced later. */
6675 init = build (ERROR_MARK, type);
6680 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6681 decl, NAME is the initialization string and TYPE_DEP indicates whether
6682 NAME depended on the type of the function. We make use of that to detect
6683 __PRETTY_FUNCTION__ inside a template fn. This is being done
6684 lazily at the point of first use, so we musn't push the decl now. */
6687 cp_make_fname_decl (id, type_dep)
6691 const char *const name = (type_dep && processing_template_decl
6692 ? NULL : fname_as_string (type_dep));
6693 tree init = cp_fname_init (name);
6694 tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init));
6696 /* As we don't push the decl here, we must set the context. */
6697 DECL_CONTEXT (decl) = current_function_decl;
6698 DECL_PRETTY_FUNCTION_P (decl) = type_dep;
6700 TREE_STATIC (decl) = 1;
6701 TREE_READONLY (decl) = 1;
6702 DECL_ARTIFICIAL (decl) = 1;
6703 DECL_INITIAL (decl) = init;
6705 TREE_USED (decl) = 1;
6707 cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6712 /* Make a definition for a builtin function named NAME in the current
6713 namespace, whose data type is TYPE and whose context is CONTEXT.
6714 TYPE should be a function type with argument types.
6716 CLASS and CODE tell later passes how to compile calls to this function.
6717 See tree.h for possible values.
6719 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6720 the name to be called if we can't opencode the function.
6721 If ATTRS is nonzero, use that for the function's attribute
6725 builtin_function_1 (name, type, context, code, class, libname, attrs)
6730 enum built_in_class class;
6731 const char *libname;
6734 tree decl = build_library_fn_1 (get_identifier (name), ERROR_MARK, type);
6735 DECL_BUILT_IN_CLASS (decl) = class;
6736 DECL_FUNCTION_CODE (decl) = code;
6737 DECL_CONTEXT (decl) = context;
6741 /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6742 we cannot change DECL_ASSEMBLER_NAME until we have installed this
6743 function in the namespace. */
6745 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
6746 make_decl_rtl (decl, NULL);
6748 /* Warn if a function in the namespace for users
6749 is used without an occasion to consider it declared. */
6750 if (name[0] != '_' || name[1] != '_')
6751 DECL_ANTICIPATED (decl) = 1;
6753 /* Possibly apply some default attributes to this built-in function. */
6755 decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
6757 decl_attributes (&decl, NULL_TREE, 0);
6762 /* Entry point for the benefit of c_common_nodes_and_builtins.
6764 Make a defintion for a builtin function named NAME and whose data type
6765 is TYPE. TYPE should be a function type with argument types. This
6766 function places the anticipated declaration in the global namespace
6767 and additionally in the std namespace if appropriate.
6769 CLASS and CODE tell later passes how to compile calls to this function.
6770 See tree.h for possible values.
6772 If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6773 the name to be called if we can't opencode the function.
6775 If ATTRS is nonzero, use that for the function's attribute
6779 builtin_function (name, type, code, class, libname, attrs)
6783 enum built_in_class class;
6784 const char *libname;
6787 /* All builtins that don't begin with an '_' should additionally
6788 go in the 'std' namespace. */
6791 push_namespace (std_identifier);
6792 builtin_function_1 (name, type, std_node, code, class, libname, attrs);
6796 return builtin_function_1 (name, type, NULL_TREE, code,
6797 class, libname, attrs);
6800 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
6801 function. Not called directly. */
6804 build_library_fn_1 (name, operator_code, type)
6806 enum tree_code operator_code;
6809 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6810 DECL_EXTERNAL (fn) = 1;
6811 TREE_PUBLIC (fn) = 1;
6812 DECL_ARTIFICIAL (fn) = 1;
6813 TREE_NOTHROW (fn) = 1;
6814 SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
6815 SET_DECL_LANGUAGE (fn, lang_c);
6819 /* Returns the _DECL for a library function with C linkage.
6820 We assume that such functions never throw; if this is incorrect,
6821 callers should unset TREE_NOTHROW. */
6824 build_library_fn (name, type)
6828 return build_library_fn_1 (name, ERROR_MARK, type);
6831 /* Returns the _DECL for a library function with C++ linkage. */
6834 build_cp_library_fn (name, operator_code, type)
6836 enum tree_code operator_code;
6839 tree fn = build_library_fn_1 (name, operator_code, type);
6840 TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6841 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
6842 SET_DECL_LANGUAGE (fn, lang_cplusplus);
6843 set_mangled_name_for_decl (fn);
6847 /* Like build_library_fn, but takes a C string instead of an
6851 build_library_fn_ptr (name, type)
6855 return build_library_fn (get_identifier (name), type);
6858 /* Like build_cp_library_fn, but takes a C string instead of an
6862 build_cp_library_fn_ptr (name, type)
6866 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
6869 /* Like build_library_fn, but also pushes the function so that we will
6870 be able to find it via IDENTIFIER_GLOBAL_VALUE. */
6873 push_library_fn (name, type)
6876 tree fn = build_library_fn (name, type);
6877 pushdecl_top_level (fn);
6881 /* Like build_cp_library_fn, but also pushes the function so that it
6882 will be found by normal lookup. */
6885 push_cp_library_fn (operator_code, type)
6886 enum tree_code operator_code;
6889 tree fn = build_cp_library_fn (ansi_opname (operator_code),
6896 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6900 push_void_library_fn (name, parmtypes)
6901 tree name, parmtypes;
6903 tree type = build_function_type (void_type_node, parmtypes);
6904 return push_library_fn (name, type);
6907 /* Like push_library_fn, but also note that this function throws
6908 and does not return. Used for __throw_foo and the like. */
6911 push_throw_library_fn (name, type)
6914 tree fn = push_library_fn (name, type);
6915 TREE_THIS_VOLATILE (fn) = 1;
6916 TREE_NOTHROW (fn) = 0;
6920 /* Apply default attributes to a function, if a system function with default
6924 cxx_insert_default_attributes (decl)
6927 if (!DECL_EXTERN_C_FUNCTION_P (decl))
6929 if (!TREE_PUBLIC (decl))
6931 c_common_insert_default_attributes (decl);
6934 /* When we call finish_struct for an anonymous union, we create
6935 default copy constructors and such. But, an anonymous union
6936 shouldn't have such things; this function undoes the damage to the
6937 anonymous union type T.
6939 (The reason that we create the synthesized methods is that we don't
6940 distinguish `union { int i; }' from `typedef union { int i; } U'.
6941 The first is an anonymous union; the second is just an ordinary
6945 fixup_anonymous_aggr (t)
6950 /* Wipe out memory of synthesized methods */
6951 TYPE_HAS_CONSTRUCTOR (t) = 0;
6952 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6953 TYPE_HAS_INIT_REF (t) = 0;
6954 TYPE_HAS_CONST_INIT_REF (t) = 0;
6955 TYPE_HAS_ASSIGN_REF (t) = 0;
6956 TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6958 /* Splice the implicitly generated functions out of the TYPE_METHODS
6960 q = &TYPE_METHODS (t);
6963 if (DECL_ARTIFICIAL (*q))
6964 *q = TREE_CHAIN (*q);
6966 q = &TREE_CHAIN (*q);
6969 /* ISO C++ 9.5.3. Anonymous unions may not have function members. */
6970 if (TYPE_METHODS (t))
6971 cp_error_at ("an anonymous union cannot have function members", t);
6973 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
6974 assignment operators (because they cannot have these methods themselves).
6975 For anonymous unions this is already checked because they are not allowed
6976 in any union, otherwise we have to check it. */
6977 if (TREE_CODE (t) != UNION_TYPE)
6981 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
6982 if (TREE_CODE (field) == FIELD_DECL)
6984 type = TREE_TYPE (field);
6985 if (CLASS_TYPE_P (type))
6987 if (TYPE_NEEDS_CONSTRUCTING (type))
6988 cp_error_at ("member %#D' with constructor not allowed in anonymous aggregate",
6990 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6991 cp_error_at ("member %#D' with destructor not allowed in anonymous aggregate",
6993 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
6994 cp_error_at ("member %#D' with copy assignment operator not allowed in anonymous aggregate",
7001 /* Make sure that a declaration with no declarator is well-formed, i.e.
7002 just declares a tagged type or anonymous union.
7004 Returns the type declared; or NULL_TREE if none. */
7007 check_tag_decl (declspecs)
7012 int saw_typedef = 0;
7013 tree ob_modifier = NULL_TREE;
7015 /* If a class, struct, or enum type is declared by the DECLSPECS
7016 (i.e, if a class-specifier, enum-specifier, or non-typename
7017 elaborated-type-specifier appears in the DECLSPECS),
7018 DECLARED_TYPE is set to the corresponding type. */
7019 tree declared_type = NULL_TREE;
7020 bool error_p = false;
7022 for (link = declspecs; link; link = TREE_CHAIN (link))
7024 tree value = TREE_VALUE (link);
7027 || TREE_CODE (value) == TYPE_DECL
7028 || (TREE_CODE (value) == IDENTIFIER_NODE
7029 && IDENTIFIER_GLOBAL_VALUE (value)
7030 && TREE_CODE (IDENTIFIER_GLOBAL_VALUE (value)) == TYPE_DECL))
7034 if (found_type == 2 && TREE_CODE (value) == IDENTIFIER_NODE)
7036 if (! in_system_header)
7037 pedwarn ("redeclaration of C++ built-in type `%T'", value);
7042 && ((TREE_CODE (value) != TYPENAME_TYPE && IS_AGGR_TYPE (value))
7043 || TREE_CODE (value) == ENUMERAL_TYPE))
7045 my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
7046 declared_type = value;
7049 else if (value == ridpointers[(int) RID_TYPEDEF])
7051 else if (value == ridpointers[(int) RID_FRIEND])
7053 if (current_class_type == NULL_TREE
7054 || current_scope () != current_class_type)
7055 ob_modifier = value;
7059 else if (value == ridpointers[(int) RID_STATIC]
7060 || value == ridpointers[(int) RID_EXTERN]
7061 || value == ridpointers[(int) RID_AUTO]
7062 || value == ridpointers[(int) RID_REGISTER]
7063 || value == ridpointers[(int) RID_INLINE]
7064 || value == ridpointers[(int) RID_VIRTUAL]
7065 || value == ridpointers[(int) RID_CONST]
7066 || value == ridpointers[(int) RID_VOLATILE]
7067 || value == ridpointers[(int) RID_EXPLICIT]
7068 || value == ridpointers[(int) RID_THREAD])
7069 ob_modifier = value;
7070 else if (value == error_mark_node)
7075 error ("multiple types in one declaration");
7077 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
7078 pedwarn ("declaration does not declare anything");
7079 /* Check for an anonymous union. */
7080 else if (declared_type && IS_AGGR_TYPE_CODE (TREE_CODE (declared_type))
7081 && TYPE_ANONYMOUS_P (declared_type))
7083 /* 7/3 In a simple-declaration, the optional init-declarator-list
7084 can be omitted only when declaring a class (clause 9) or
7085 enumeration (7.2), that is, when the decl-specifier-seq contains
7086 either a class-specifier, an elaborated-type-specifier with
7087 a class-key (9.1), or an enum-specifier. In these cases and
7088 whenever a class-specifier or enum-specifier is present in the
7089 decl-specifier-seq, the identifiers in these specifiers are among
7090 the names being declared by the declaration (as class-name,
7091 enum-names, or enumerators, depending on the syntax). In such
7092 cases, and except for the declaration of an unnamed bit-field (9.6),
7093 the decl-specifier-seq shall introduce one or more names into the
7094 program, or shall redeclare a name introduced by a previous
7095 declaration. [Example:
7096 enum { }; // ill-formed
7097 typedef class { }; // ill-formed
7101 error ("missing type-name in typedef-declaration");
7104 /* Anonymous unions are objects, so they can have specifiers. */;
7105 SET_ANON_AGGR_TYPE_P (declared_type);
7107 if (TREE_CODE (declared_type) != UNION_TYPE && pedantic
7108 && !in_system_header)
7109 pedwarn ("ISO C++ prohibits anonymous structs");
7112 else if (ob_modifier)
7114 if (ob_modifier == ridpointers[(int) RID_INLINE]
7115 || ob_modifier == ridpointers[(int) RID_VIRTUAL])
7116 error ("`%D' can only be specified for functions", ob_modifier);
7117 else if (ob_modifier == ridpointers[(int) RID_FRIEND])
7118 error ("`%D' can only be specified inside a class", ob_modifier);
7119 else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
7120 error ("`%D' can only be specified for constructors",
7123 error ("`%D' can only be specified for objects and functions",
7127 return declared_type;
7130 /* Called when a declaration is seen that contains no names to declare.
7131 If its type is a reference to a structure, union or enum inherited
7132 from a containing scope, shadow that tag name for the current scope
7133 with a forward reference.
7134 If its type defines a new named structure or union
7135 or defines an enum, it is valid but we need not do anything here.
7136 Otherwise, it is an error.
7138 C++: may have to grok the declspecs to learn about static,
7139 complain for anonymous unions.
7141 Returns the TYPE declared -- or NULL_TREE if none. */
7144 shadow_tag (declspecs)
7147 tree t = check_tag_decl (declspecs);
7152 maybe_process_partial_specialization (t);
7154 /* This is where the variables in an anonymous union are
7155 declared. An anonymous union declaration looks like:
7157 because there is no declarator after the union, the parser
7158 sends that declaration here. */
7159 if (ANON_AGGR_TYPE_P (t))
7161 fixup_anonymous_aggr (t);
7163 if (TYPE_FIELDS (t))
7165 tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
7167 finish_anon_union (decl);
7174 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
7177 groktypename (typename)
7182 if (TREE_CODE (typename) != TREE_LIST)
7184 split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
7185 type = grokdeclarator (TREE_VALUE (typename), specs,
7186 TYPENAME, 0, &attrs);
7188 cplus_decl_attributes (&type, attrs, 0);
7192 /* Decode a declarator in an ordinary declaration or data definition.
7193 This is called as soon as the type information and variable name
7194 have been parsed, before parsing the initializer if any.
7195 Here we create the ..._DECL node, fill in its type,
7196 and put it on the list of decls for the current context.
7197 The ..._DECL node is returned as the value.
7199 Exception: for arrays where the length is not specified,
7200 the type is left null, to be filled in by `cp_finish_decl'.
7202 Function definitions do not come here; they go to start_function
7203 instead. However, external and forward declarations of functions
7204 do go through here. Structure field declarations are done by
7205 grokfield and not through here. */
7208 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
7209 tree declarator, declspecs;
7211 tree attributes, prefix_attributes;
7214 register tree type, tem;
7218 /* See code below that used this. */
7219 int init_written = initialized;
7222 /* This should only be done once on the top most decl. */
7223 if (have_extern_spec)
7225 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"),
7227 have_extern_spec = false;
7230 /* An object declared as __attribute__((deprecated)) suppresses
7231 warnings of uses of other deprecated items. */
7232 if (lookup_attribute ("deprecated", attributes))
7233 deprecated_state = DEPRECATED_SUPPRESS;
7235 attributes = chainon (attributes, prefix_attributes);
7237 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
7240 deprecated_state = DEPRECATED_NORMAL;
7242 if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
7245 type = TREE_TYPE (decl);
7247 if (type == error_mark_node)
7250 context = DECL_CONTEXT (decl);
7252 if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
7253 && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
7255 /* When parsing the initializer, lookup should use the object's
7257 push_decl_namespace (context);
7260 /* We are only interested in class contexts, later. */
7261 if (context && TREE_CODE (context) == NAMESPACE_DECL)
7262 context = NULL_TREE;
7265 /* Is it valid for this decl to have an initializer at all?
7266 If not, set INITIALIZED to zero, which will indirectly
7267 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7268 switch (TREE_CODE (decl))
7271 error ("typedef `%D' is initialized (use __typeof__ instead)", decl);
7276 error ("function `%#D' is initialized like a variable", decl);
7286 if (! toplevel_bindings_p ()
7287 && DECL_EXTERNAL (decl))
7288 warning ("declaration of `%#D' has `extern' and is initialized",
7290 DECL_EXTERNAL (decl) = 0;
7291 if (toplevel_bindings_p ())
7292 TREE_STATIC (decl) = 1;
7294 /* Tell `pushdecl' this is an initialized decl
7295 even though we don't yet have the initializer expression.
7296 Also tell `cp_finish_decl' it may store the real initializer. */
7297 DECL_INITIAL (decl) = error_mark_node;
7300 /* Set attributes here so if duplicate decl, will have proper attributes. */
7301 cplus_decl_attributes (&decl, attributes, 0);
7303 /* If #pragma weak was used, mark the decl weak now. */
7304 if (current_binding_level == global_binding_level)
7305 maybe_apply_pragma_weak (decl);
7307 if (TREE_CODE (decl) == FUNCTION_DECL
7308 && DECL_DECLARED_INLINE_P (decl)
7309 && DECL_UNINLINABLE (decl)
7310 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
7311 warning_with_decl (decl,
7312 "inline function `%s' given attribute noinline");
7314 if (context && COMPLETE_TYPE_P (complete_type (context)))
7316 push_nested_class (context, 2);
7318 if (TREE_CODE (decl) == VAR_DECL)
7320 tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7321 if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7322 error ("`%#D' is not a static member of `%#T'", decl, context);
7325 if (DECL_CONTEXT (field) != context)
7327 if (!same_type_p (DECL_CONTEXT (field), context))
7328 pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7329 DECL_CONTEXT (field), DECL_NAME (decl),
7330 context, DECL_NAME (decl));
7331 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7333 /* Static data member are tricky; an in-class initialization
7334 still doesn't provide a definition, so the in-class
7335 declaration will have DECL_EXTERNAL set, but will have an
7336 initialization. Thus, duplicate_decls won't warn
7337 about this situation, and so we check here. */
7338 if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7339 error ("duplicate initialization of %D", decl);
7340 if (duplicate_decls (decl, field))
7346 tree field = check_classfn (context, decl);
7347 if (field && duplicate_decls (decl, field))
7351 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
7352 DECL_IN_AGGR_P (decl) = 0;
7353 if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7354 || CLASSTYPE_TEMPLATE_INSTANTIATION (context))
7356 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7357 /* [temp.expl.spec] An explicit specialization of a static data
7358 member of a template is a definition if the declaration
7359 includes an initializer; otherwise, it is a declaration.
7361 We check for processing_specialization so this only applies
7362 to the new specialization syntax. */
7363 if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7364 DECL_EXTERNAL (decl) = 1;
7367 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7368 pedwarn ("declaration of `%#D' outside of class is not definition",
7372 /* Enter this declaration into the symbol table. */
7373 tem = maybe_push_decl (decl);
7375 if (processing_template_decl)
7376 tem = push_template_decl (tem);
7378 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7379 /* Tell the back-end to use or not use .common as appropriate. If we say
7380 -fconserve-space, we want this to save .data space, at the expense of
7381 wrong semantics. If we say -fno-conserve-space, we want this to
7382 produce errors about redefs; to do this we force variables into the
7384 DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7387 if (! processing_template_decl)
7397 tree type = TREE_TYPE (decl);
7398 int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7400 if (type == error_mark_node)
7403 maybe_push_cleanup_level (type);
7406 /* Is it valid for this decl to have an initializer at all?
7407 If not, set INITIALIZED to zero, which will indirectly
7408 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
7410 /* Don't allow initializations for incomplete types except for
7411 arrays which might be completed by the initialization. */
7412 if (COMPLETE_TYPE_P (complete_type (type)))
7413 ; /* A complete type is ok. */
7414 else if (TREE_CODE (type) != ARRAY_TYPE)
7416 error ("variable `%#D' has initializer but incomplete type",
7419 type = TREE_TYPE (decl) = error_mark_node;
7421 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7423 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7424 error ("elements of array `%#D' have incomplete type", decl);
7425 /* else we already gave an error in start_decl. */
7431 && TREE_CODE (decl) != TYPE_DECL
7432 && TREE_CODE (decl) != TEMPLATE_DECL
7433 && type != error_mark_node
7434 && IS_AGGR_TYPE (type)
7435 && ! DECL_EXTERNAL (decl))
7437 if ((! processing_template_decl || ! uses_template_parms (type))
7438 && !COMPLETE_TYPE_P (complete_type (type)))
7440 error ("aggregate `%#D' has incomplete type and cannot be defined",
7442 /* Change the type so that assemble_variable will give
7443 DECL an rtl we can live with: (mem (const_int 0)). */
7444 type = TREE_TYPE (decl) = error_mark_node;
7448 /* If any base type in the hierarchy of TYPE needs a constructor,
7449 then we set initialized to 1. This way any nodes which are
7450 created for the purposes of initializing this aggregate
7451 will live as long as it does. This is necessary for global
7452 aggregates which do not have their initializers processed until
7453 the end of the file. */
7454 initialized = TYPE_NEEDS_CONSTRUCTING (type);
7459 DECL_INITIAL (decl) = NULL_TREE;
7462 /* Handle initialization of references.
7463 These three arguments are from `cp_finish_decl', and have the
7464 same meaning here that they do there.
7466 Quotes on semantics can be found in ARM 8.4.3. */
7469 grok_reference_init (decl, type, init)
7470 tree decl, type, init;
7474 if (init == NULL_TREE)
7476 if ((DECL_LANG_SPECIFIC (decl) == 0
7477 || DECL_IN_AGGR_P (decl) == 0)
7478 && ! DECL_THIS_EXTERN (decl))
7479 error ("`%D' declared as reference but not initialized", decl);
7483 if (TREE_CODE (init) == CONSTRUCTOR)
7485 error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7489 if (TREE_CODE (init) == TREE_LIST)
7490 init = build_compound_expr (init);
7492 if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7493 init = convert_from_reference (init);
7495 if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7496 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7498 /* Note: default conversion is only called in very special cases. */
7499 init = default_conversion (init);
7502 /* Convert INIT to the reference type TYPE. This may involve the
7503 creation of a temporary, whose lifetime must be the same as that
7504 of the reference. If so, a DECL_STMT for the temporary will be
7505 added just after the DECL_STMT for DECL. That's why we don't set
7506 DECL_INITIAL for local references (instead assigning to them
7507 explicitly); we need to allow the temporary to be initialized
7509 tmp = convert_to_reference
7510 (type, init, CONV_IMPLICIT,
7511 LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
7514 if (tmp == error_mark_node)
7516 else if (tmp == NULL_TREE)
7518 error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7522 if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
7525 DECL_INITIAL (decl) = tmp;
7530 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7531 array until we finish parsing the initializer. If that's the
7532 situation we're in, update DECL accordingly. */
7535 maybe_deduce_size_from_array_init (decl, init)
7539 tree type = TREE_TYPE (decl);
7541 if (TREE_CODE (type) == ARRAY_TYPE
7542 && TYPE_DOMAIN (type) == NULL_TREE
7543 && TREE_CODE (decl) != TYPE_DECL)
7545 /* do_default is really a C-ism to deal with tentative definitions.
7546 But let's leave it here to ease the eventual merge. */
7547 int do_default = !DECL_EXTERNAL (decl);
7548 tree initializer = init ? init : DECL_INITIAL (decl);
7549 int failure = complete_array_type (type, initializer, do_default);
7552 error ("initializer fails to determine size of `%D'", decl);
7557 error ("array size missing in `%D'", decl);
7558 /* If a `static' var's size isn't known, make it extern as
7559 well as static, so it does not get allocated. If it's not
7560 `static', then don't mark it extern; finish_incomplete_decl
7561 will give it a default size and it will get allocated. */
7562 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7563 DECL_EXTERNAL (decl) = 1;
7566 if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7567 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7569 error ("zero-size array `%D'", decl);
7571 layout_decl (decl, 0);
7575 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7576 any appropriate error messages regarding the layout. */
7579 layout_var_decl (decl)
7582 tree type = TREE_TYPE (decl);
7584 tree ttype = target_type (type);
7587 /* If we haven't already layed out this declaration, do so now.
7588 Note that we must not call complete type for an external object
7589 because it's type might involve templates that we are not
7590 supposed to isntantiate yet. (And it's perfectly valid to say
7591 `extern X x' for some incomplete type `X'.) */
7592 if (!DECL_EXTERNAL (decl))
7593 complete_type (type);
7594 if (!DECL_SIZE (decl)
7595 && TREE_TYPE (decl) != error_mark_node
7596 && (COMPLETE_TYPE_P (type)
7597 || (TREE_CODE (type) == ARRAY_TYPE
7598 && !TYPE_DOMAIN (type)
7599 && COMPLETE_TYPE_P (TREE_TYPE (type)))))
7600 layout_decl (decl, 0);
7602 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7604 /* An automatic variable with an incomplete type: that is an error.
7605 Don't talk about array types here, since we took care of that
7606 message in grokdeclarator. */
7607 error ("storage size of `%D' isn't known", decl);
7608 TREE_TYPE (decl) = error_mark_node;
7611 /* Keep this code around in case we later want to control debug info
7612 based on whether a type is "used". (jason 1999-11-11) */
7614 else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7615 /* Let debugger know it should output info for this type. */
7616 note_debug_info_needed (ttype);
7618 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7619 note_debug_info_needed (DECL_CONTEXT (decl));
7622 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7623 && DECL_SIZE (decl) != NULL_TREE
7624 && ! TREE_CONSTANT (DECL_SIZE (decl)))
7626 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7627 constant_expression_warning (DECL_SIZE (decl));
7629 error ("storage size of `%D' isn't constant", decl);
7632 if (TREE_STATIC (decl)
7633 && !DECL_ARTIFICIAL (decl)
7634 && current_function_decl
7635 && DECL_CONTEXT (decl) == current_function_decl)
7636 push_local_name (decl);
7639 /* If a local static variable is declared in an inline function, or if
7640 we have a weak definition, we must endeavor to create only one
7641 instance of the variable at link-time. */
7644 maybe_commonize_var (decl)
7647 /* Static data in a function with comdat linkage also has comdat
7649 if (TREE_STATIC (decl)
7650 /* Don't mess with __FUNCTION__. */
7651 && ! DECL_ARTIFICIAL (decl)
7652 && current_function_decl
7653 && DECL_CONTEXT (decl) == current_function_decl
7654 && (DECL_DECLARED_INLINE_P (current_function_decl)
7655 || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7656 && TREE_PUBLIC (current_function_decl))
7658 /* If flag_weak, we don't need to mess with this, as we can just
7659 make the function weak, and let it refer to its unique local
7660 copy. This works because we don't allow the function to be
7664 if (DECL_INTERFACE_KNOWN (current_function_decl))
7666 TREE_PUBLIC (decl) = 1;
7667 DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7669 else if (DECL_INITIAL (decl) == NULL_TREE
7670 || DECL_INITIAL (decl) == error_mark_node)
7672 TREE_PUBLIC (decl) = 1;
7673 DECL_COMMON (decl) = 1;
7675 /* else we lose. We can only do this if we can use common,
7676 which we can't if it has been initialized. */
7678 if (!TREE_PUBLIC (decl))
7680 cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7681 cp_warning_at (" you can work around this by removing the initializer", decl);
7685 comdat_linkage (decl);
7687 else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7688 /* Set it up again; we might have set DECL_INITIAL since the last
7690 comdat_linkage (decl);
7693 /* Issue an error message if DECL is an uninitialized const variable. */
7696 check_for_uninitialized_const_var (decl)
7699 tree type = TREE_TYPE (decl);
7701 /* ``Unless explicitly declared extern, a const object does not have
7702 external linkage and must be initialized. ($8.4; $12.1)'' ARM
7704 if (TREE_CODE (decl) == VAR_DECL
7705 && TREE_CODE (type) != REFERENCE_TYPE
7706 && CP_TYPE_CONST_P (type)
7707 && !TYPE_NEEDS_CONSTRUCTING (type)
7708 && !DECL_INITIAL (decl))
7709 error ("uninitialized const `%D'", decl);
7712 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
7713 returned is the next FIELD_DECL (possibly FIELD itself) that can be
7714 initialized. If there are no more such fields, the return value
7718 next_initializable_field (tree field)
7721 && (TREE_CODE (field) != FIELD_DECL
7722 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
7723 || DECL_ARTIFICIAL (field)))
7724 field = TREE_CHAIN (field);
7729 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
7730 brace-enclosed aggregate initializer.
7732 *INITP is one of a list of initializers describing a brace-enclosed
7733 initializer for an entity of the indicated aggregate TYPE. It may
7734 not presently match the shape of the TYPE; for example:
7736 struct S { int a; int b; };
7737 struct S a[] = { 1, 2, 3, 4 };
7739 Here *INITP will point to TREE_LIST of four elements, rather than a
7740 list of two elements, each itself a list of two elements. This
7741 routine transforms INIT from the former form into the latter. The
7742 revised initializer is returned. */
7745 reshape_init (tree type, tree *initp)
7749 tree old_init_value;
7751 bool brace_enclosed_p;
7754 old_init_value = (TREE_CODE (*initp) == TREE_LIST
7755 ? TREE_VALUE (*initp) : old_init);
7757 /* For some parse errors, OLD_INIT_VALUE may be NULL. */
7758 if (!old_init_value)
7760 my_friendly_assert (TREE_CODE (old_init) == TREE_LIST, 20021202);
7761 TREE_VALUE (old_init) = error_mark_node;
7765 /* If the initializer is brace-enclosed, pull initializers from the
7766 enclosed elements. Advance past the brace-enclosed initializer
7768 if (TREE_CODE (old_init_value) == CONSTRUCTOR
7769 && TREE_HAS_CONSTRUCTOR (old_init_value))
7771 *initp = TREE_CHAIN (old_init);
7772 TREE_CHAIN (old_init) = NULL_TREE;
7773 inits = CONSTRUCTOR_ELTS (old_init_value);
7775 brace_enclosed_p = true;
7780 brace_enclosed_p = false;
7783 /* A non-aggregate type is always initialized with a single
7785 if (!CP_AGGREGATE_TYPE_P (type))
7787 *initp = TREE_CHAIN (old_init);
7788 TREE_CHAIN (old_init) = NULL_TREE;
7789 /* It is invalid to initialize a non-aggregate type with a
7790 brace-enclosed initializer. */
7791 if (brace_enclosed_p)
7793 error ("brace-enclosed initializer used to initialize `%T'",
7795 if (TREE_CODE (old_init) == TREE_LIST)
7796 TREE_VALUE (old_init) = error_mark_node;
7798 old_init = error_mark_node;
7806 All implicit type conversions (clause _conv_) are considered when
7807 initializing the aggregate member with an initializer from an
7808 initializer-list. If the initializer can initialize a member,
7809 the member is initialized. Otherwise, if the member is itself a
7810 non-empty subaggregate, brace elision is assumed and the
7811 initializer is considered for the initialization of the first
7812 member of the subaggregate. */
7813 if (CLASS_TYPE_P (type)
7814 && !brace_enclosed_p
7815 && can_convert_arg (type, TREE_TYPE (old_init_value), old_init_value))
7817 *initp = TREE_CHAIN (old_init);
7818 TREE_CHAIN (old_init) = NULL_TREE;
7822 if (TREE_CODE (old_init_value) == STRING_CST
7823 && TREE_CODE (type) == ARRAY_TYPE
7824 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
7826 /* [dcl.init.string]
7828 A char array (whether plain char, signed char, or unsigned char)
7829 can be initialized by a string-literal (optionally enclosed in
7830 braces); a wchar_t array can be initialized by a wide
7831 string-literal (optionally enclosed in braces). */
7832 new_init = old_init;
7833 /* Move past the initializer. */
7834 *initp = TREE_CHAIN (old_init);
7835 TREE_CHAIN (old_init) = NULL_TREE;
7839 /* Build a CONSTRUCTOR to hold the contents of the aggregate. */
7840 new_init = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
7841 TREE_HAS_CONSTRUCTOR (new_init) = 1;
7843 if (CLASS_TYPE_P (type))
7847 field = next_initializable_field (TYPE_FIELDS (type));
7853 An initializer for an aggregate member that is an
7854 empty class shall have the form of an empty
7855 initializer-list {}. */
7856 if (!brace_enclosed_p)
7857 error ("initializer for `%T' must be brace-enclosed",
7862 /* Loop through the initializable fields, gathering
7864 while (*initp && field)
7868 field_init = reshape_init (TREE_TYPE (field), initp);
7869 TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
7870 CONSTRUCTOR_ELTS (new_init) = field_init;
7873 When a union is initialized with a brace-enclosed
7874 initializer, the braces shall only contain an
7875 initializer for the first member of the union. */
7876 if (TREE_CODE (type) == UNION_TYPE)
7878 if (TREE_PURPOSE (field_init))
7879 field = TREE_PURPOSE (field_init);
7880 field = next_initializable_field (TREE_CHAIN (field));
7884 else if (TREE_CODE (type) == ARRAY_TYPE)
7889 /* If the bound of the array is known, take no more initializers
7890 than are allowed. */
7891 max_index = (TYPE_DOMAIN (type)
7892 ? array_type_nelts (type) : NULL_TREE);
7893 /* Loop through the array elements, gathering initializers. */
7894 for (index = size_zero_node;
7895 *initp && (!max_index || !tree_int_cst_lt (max_index, index));
7896 index = size_binop (PLUS_EXPR, index, size_one_node))
7900 element_init = reshape_init (TREE_TYPE (type), initp);
7901 TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
7902 CONSTRUCTOR_ELTS (new_init) = element_init;
7903 if (TREE_PURPOSE (element_init))
7904 index = TREE_PURPOSE (element_init);
7910 /* The initializers were placed in reverse order in the
7912 CONSTRUCTOR_ELTS (new_init) = nreverse (CONSTRUCTOR_ELTS (new_init));
7914 if (TREE_CODE (old_init) == TREE_LIST)
7915 new_init = build_tree_list (TREE_PURPOSE (old_init), new_init);
7918 /* If this was a brace-enclosed initializer and all of the
7919 initializers were not used up, there is a problem. */
7920 if (brace_enclosed_p && *initp)
7921 error ("too many initializers for `%T'", type);
7926 /* Verify INIT (the initializer for DECL), and record the
7927 initialization in DECL_INITIAL, if appropriate.
7929 If the return value is non-NULL, it is an expression that must be
7930 evaluated dynamically to initialize DECL. */
7933 check_initializer (tree decl, tree init, int flags)
7935 tree type = TREE_TYPE (decl);
7937 /* If `start_decl' didn't like having an initialization, ignore it now. */
7938 if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7941 /* If an initializer is present, DECL_INITIAL has been
7942 error_mark_node, to indicate that an as-of-yet unevaluated
7943 initialization will occur. From now on, DECL_INITIAL reflects
7944 the static initialization -- if any -- of DECL. */
7945 DECL_INITIAL (decl) = NULL_TREE;
7947 /* Things that are going to be initialized need to have complete
7949 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7951 if (type == error_mark_node)
7952 /* We will have already complained. */
7954 else if (init && COMPLETE_TYPE_P (type)
7955 && !TREE_CONSTANT (TYPE_SIZE (type)))
7957 error ("variable-sized object `%D' may not be initialized", decl);
7960 else if (TREE_CODE (type) == ARRAY_TYPE
7961 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7963 error ("elements of array `%#D' have incomplete type", decl);
7966 else if (TREE_CODE (type) != ARRAY_TYPE && !COMPLETE_TYPE_P (type))
7968 error ("`%D' has incomplete type", decl);
7969 TREE_TYPE (decl) = error_mark_node;
7973 if (TREE_CODE (decl) == CONST_DECL)
7975 my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7977 DECL_INITIAL (decl) = init;
7979 my_friendly_assert (init != NULL_TREE, 149);
7982 else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7983 init = grok_reference_init (decl, type, init);
7986 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
7988 /* [dcl.init] paragraph 13,
7989 If T is a scalar type, then a declaration of the form
7994 reshape_init will complain about the extra braces,
7995 and doesn't do anything useful in the case where TYPE is
7996 scalar, so just don't call it. */
7997 if (CP_AGGREGATE_TYPE_P (type))
7998 init = reshape_init (type, &init);
8001 /* If DECL has an array type without a specific bound, deduce the
8002 array size from the initializer. */
8003 maybe_deduce_size_from_array_init (decl, init);
8004 type = TREE_TYPE (decl);
8005 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
8006 TREE_TYPE (init) = type;
8008 if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
8010 if (TREE_CODE (type) == ARRAY_TYPE)
8011 goto initialize_aggr;
8012 else if (TREE_CODE (init) == CONSTRUCTOR
8013 && TREE_HAS_CONSTRUCTOR (init))
8015 if (TYPE_NON_AGGREGATE_CLASS (type))
8017 error ("`%D' must be initialized by constructor, not by `{...}'",
8019 init = error_mark_node;
8022 goto dont_use_constructor;
8026 int saved_stmts_are_full_exprs_p;
8029 saved_stmts_are_full_exprs_p = 0;
8030 if (building_stmt_tree ())
8032 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
8033 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8035 init = build_aggr_init (decl, init, flags);
8036 if (building_stmt_tree ())
8037 current_stmt_tree ()->stmts_are_full_exprs_p =
8038 saved_stmts_are_full_exprs_p;
8044 dont_use_constructor:
8045 if (TREE_CODE (init) != TREE_VEC)
8046 init = store_init_value (decl, init);
8049 else if (DECL_EXTERNAL (decl))
8051 else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
8052 goto initialize_aggr;
8053 else if (IS_AGGR_TYPE (type))
8055 tree core_type = strip_array_types (type);
8057 if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
8058 error ("structure `%D' with uninitialized const members", decl);
8059 if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
8060 error ("structure `%D' with uninitialized reference members",
8063 check_for_uninitialized_const_var (decl);
8066 check_for_uninitialized_const_var (decl);
8068 if (init && init != error_mark_node)
8069 init = build (INIT_EXPR, type, decl, init);
8074 /* If DECL is not a local variable, give it RTL. */
8077 make_rtl_for_nonlocal_decl (decl, init, asmspec)
8080 const char *asmspec;
8082 int toplev = toplevel_bindings_p ();
8085 /* Handle non-variables up front. */
8086 if (TREE_CODE (decl) != VAR_DECL)
8088 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8092 /* If we see a class member here, it should be a static data
8094 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
8096 my_friendly_assert (TREE_STATIC (decl), 19990828);
8097 /* An in-class declaration of a static data member should be
8098 external; it is only a declaration, and not a definition. */
8099 if (init == NULL_TREE)
8100 my_friendly_assert (DECL_EXTERNAL (decl), 20000723);
8103 /* Set the DECL_ASSEMBLER_NAME for the variable. */
8106 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
8107 /* The `register' keyword, when used together with an
8108 asm-specification, indicates that the variable should be
8109 placed in a particular register. */
8110 if (DECL_REGISTER (decl))
8111 DECL_C_HARD_REGISTER (decl) = 1;
8114 /* We don't create any RTL for local variables. */
8115 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
8118 /* We defer emission of local statics until the corresponding
8119 DECL_STMT is expanded. */
8120 defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
8122 /* We try to defer namespace-scope static constants so that they are
8123 not emitted into the object file unnecessarily. */
8124 if (!DECL_VIRTUAL_P (decl)
8125 && TREE_READONLY (decl)
8126 && DECL_INITIAL (decl) != NULL_TREE
8127 && DECL_INITIAL (decl) != error_mark_node
8128 && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
8130 && !TREE_PUBLIC (decl))
8132 /* Fool with the linkage of static consts according to #pragma
8134 if (!interface_unknown && !TREE_PUBLIC (decl))
8136 TREE_PUBLIC (decl) = 1;
8137 DECL_EXTERNAL (decl) = interface_only;
8142 /* Likewise for template instantiations. */
8143 else if (DECL_COMDAT (decl))
8146 /* If we're deferring the variable, we only need to make RTL if
8147 there's an ASMSPEC. Otherwise, we'll lazily create it later when
8148 we need it. (There's no way to lazily create RTL for things that
8149 have assembly specs because the information about the specifier
8150 isn't stored in the tree, yet) */
8151 if (defer_p && asmspec)
8152 make_decl_rtl (decl, asmspec);
8153 /* If we're not deferring, go ahead and assemble the variable. */
8155 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
8158 /* The old ARM scoping rules injected variables declared in the
8159 initialization statement of a for-statement into the surrounding
8160 scope. We support this usage, in order to be backward-compatible.
8161 DECL is a just-declared VAR_DECL; if necessary inject its
8162 declaration into the surrounding scope. */
8165 maybe_inject_for_scope_var (decl)
8168 if (!DECL_NAME (decl))
8171 /* Declarations of __FUNCTION__ and its ilk appear magically when
8172 the variable is first used. If that happens to be inside a
8173 for-loop, we don't want to do anything special. */
8174 if (DECL_PRETTY_FUNCTION_P (decl))
8177 if (current_binding_level->is_for_scope)
8179 struct cp_binding_level *outer
8180 = current_binding_level->level_chain;
8182 /* Check to see if the same name is already bound at the outer
8183 level, either because it was directly declared, or because a
8184 dead for-decl got preserved. In either case, the code would
8185 not have been valid under the ARM scope rules, so clear
8186 is_for_scope for the current_binding_level.
8188 Otherwise, we need to preserve the temp slot for decl to last
8189 into the outer binding level. */
8192 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
8194 if (outer_binding && BINDING_LEVEL (outer_binding) == outer
8195 && (TREE_CODE (BINDING_VALUE (outer_binding))
8197 && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
8199 BINDING_VALUE (outer_binding)
8200 = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
8201 current_binding_level->is_for_scope = 0;
8203 else if (DECL_IN_MEMORY_P (decl))
8204 preserve_temp_slots (DECL_RTL (decl));
8208 /* Generate code to initialize DECL (a local variable). */
8211 initialize_local_var (decl, init)
8215 tree type = TREE_TYPE (decl);
8217 my_friendly_assert (TREE_CODE (decl) == VAR_DECL
8218 || TREE_CODE (decl) == RESULT_DECL,
8220 my_friendly_assert (!TREE_STATIC (decl), 20021010);
8222 if (DECL_SIZE (decl) == NULL_TREE)
8224 /* If we used it already as memory, it must stay in memory. */
8225 DECL_INITIAL (decl) = NULL_TREE;
8226 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
8229 if (DECL_SIZE (decl) && type != error_mark_node)
8233 /* Compute and store the initial value. */
8234 already_used = TREE_USED (decl) || TREE_USED (type);
8236 /* Perform the initialization. */
8239 int saved_stmts_are_full_exprs_p;
8241 my_friendly_assert (building_stmt_tree (), 20000906);
8242 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
8243 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
8244 finish_expr_stmt (init);
8245 current_stmt_tree ()->stmts_are_full_exprs_p =
8246 saved_stmts_are_full_exprs_p;
8249 /* Set this to 0 so we can tell whether an aggregate which was
8250 initialized was ever used. Don't do this if it has a
8251 destructor, so we don't complain about the 'resource
8252 allocation is initialization' idiom. Now set
8253 attribute((unused)) on types so decls of that type will be
8254 marked used. (see TREE_USED, above.) */
8255 if (TYPE_NEEDS_CONSTRUCTING (type)
8257 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
8258 && DECL_NAME (decl))
8259 TREE_USED (decl) = 0;
8260 else if (already_used)
8261 TREE_USED (decl) = 1;
8264 /* Generate a cleanup, if necessary. */
8265 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8269 /* Compute the cleanup. */
8270 cleanup = cxx_maybe_build_cleanup (decl);
8272 /* Record the cleanup required for this declaration. */
8273 if (DECL_SIZE (decl) && cleanup)
8274 finish_decl_cleanup (decl, cleanup);
8278 /* Finish processing of a declaration;
8279 install its line number and initial value.
8280 If the length of an array type is not known before,
8281 it must be determined now, from the initial value, or it is an error.
8283 INIT holds the value of an initializer that should be allowed to escape
8286 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
8287 if the (init) syntax was used. */
8290 cp_finish_decl (decl, init, asmspec_tree, flags)
8296 tree ttype = NULL_TREE;
8297 const char *asmspec = NULL;
8298 int was_readonly = 0;
8303 error ("assignment (not initialization) in declaration");
8307 /* If a name was specified, get the string. */
8308 if (current_binding_level == global_binding_level)
8309 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
8311 asmspec = TREE_STRING_POINTER (asmspec_tree);
8313 if (init && TREE_CODE (init) == NAMESPACE_DECL)
8315 error ("cannot initialize `%D' to namespace `%D'",
8320 if (current_class_type
8321 && CP_DECL_CONTEXT (decl) == current_class_type
8322 && TYPE_BEING_DEFINED (current_class_type)
8323 && (DECL_INITIAL (decl) || init))
8324 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
8326 if (TREE_CODE (decl) == VAR_DECL
8327 && DECL_CONTEXT (decl)
8328 && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
8329 && DECL_CONTEXT (decl) != current_namespace
8332 /* Leave the namespace of the object. */
8333 pop_decl_namespace ();
8336 type = TREE_TYPE (decl);
8338 if (type == error_mark_node)
8341 if (TYPE_HAS_MUTABLE_P (type))
8342 TREE_READONLY (decl) = 0;
8344 if (processing_template_decl)
8346 /* Add this declaration to the statement-tree. */
8347 if (at_function_scope_p ()
8348 && TREE_CODE (decl) != RESULT_DECL)
8349 add_decl_stmt (decl);
8351 if (init && DECL_INITIAL (decl))
8352 DECL_INITIAL (decl) = init;
8356 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8357 my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
8359 /* Take care of TYPE_DECLs up front. */
8360 if (TREE_CODE (decl) == TYPE_DECL)
8362 if (type != error_mark_node
8363 && IS_AGGR_TYPE (type) && DECL_NAME (decl))
8365 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8366 warning ("shadowing previous type declaration of `%#D'", decl);
8367 set_identifier_type_value (DECL_NAME (decl), type);
8368 CLASSTYPE_GOT_SEMICOLON (type) = 1;
8371 /* If we have installed this as the canonical typedef for this
8372 type, and that type has not been defined yet, delay emitting
8373 the debug information for it, as we will emit it later. */
8374 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
8375 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
8376 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8378 rest_of_decl_compilation (decl, NULL,
8379 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
8383 if (TREE_CODE (decl) != FUNCTION_DECL)
8384 ttype = target_type (type);
8386 if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
8387 && TYPE_NEEDS_CONSTRUCTING (type))
8389 /* Currently, GNU C++ puts constants in text space, making them
8390 impossible to initialize. In the future, one would hope for
8391 an operating system which understood the difference between
8392 initialization and the running of a program. */
8394 TREE_READONLY (decl) = 0;
8397 if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8399 /* This must override the asm specifier which was placed by
8400 grokclassfn. Lay this out fresh. */
8401 SET_DECL_RTL (TREE_TYPE (decl), NULL_RTX);
8402 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
8403 make_decl_rtl (decl, asmspec);
8405 else if (TREE_CODE (decl) == RESULT_DECL)
8406 init = check_initializer (decl, init, flags);
8407 else if (TREE_CODE (decl) == VAR_DECL)
8409 /* Only PODs can have thread-local storage. Other types may require
8410 various kinds of non-trivial initialization. */
8411 if (DECL_THREAD_LOCAL (decl) && !pod_type_p (TREE_TYPE (decl)))
8412 error ("`%D' cannot be thread-local because it has non-POD type `%T'",
8413 decl, TREE_TYPE (decl));
8414 /* Convert the initializer to the type of DECL, if we have not
8415 already initialized DECL. */
8416 if (!DECL_INITIALIZED_P (decl)
8417 /* If !DECL_EXTERNAL then DECL is being defined. In the
8418 case of a static data member initialized inside the
8419 class-specifier, there can be an initializer even if DECL
8420 is *not* defined. */
8421 && (!DECL_EXTERNAL (decl) || init))
8423 init = check_initializer (decl, init, flags);
8424 /* Thread-local storage cannot be dynamically initialized. */
8425 if (DECL_THREAD_LOCAL (decl) && init)
8427 error ("`%D' is thread-local and so cannot be dynamically "
8428 "initialized", decl);
8435 The memory occupied by any object of static storage
8436 duration is zero-initialized at program startup before
8437 any other initialization takes place.
8439 We cannot create an appropriate initializer until after
8440 the type of DECL is finalized. If DECL_INITIAL is set,
8441 then the DECL is statically initialized, and any
8442 necessary zero-initialization has already been performed. */
8443 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
8444 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
8445 /*static_storage_p=*/true);
8446 /* Remember that the initialization for this variable has
8448 DECL_INITIALIZED_P (decl) = 1;
8450 /* If the variable has an array type, lay out the type, even if
8451 there is no initializer. It is valid to index through the
8452 array, and we must get TYPE_ALIGN set correctly on the array
8454 else if (TREE_CODE (type) == ARRAY_TYPE)
8458 /* Add this declaration to the statement-tree. This needs to happen
8459 after the call to check_initializer so that the DECL_STMT for a
8460 reference temp is added before the DECL_STMT for the reference itself. */
8461 if (building_stmt_tree ()
8462 && at_function_scope_p ()
8463 && TREE_CODE (decl) != RESULT_DECL)
8464 add_decl_stmt (decl);
8466 if (TREE_CODE (decl) == VAR_DECL)
8467 layout_var_decl (decl);
8469 /* Output the assembler code and/or RTL code for variables and functions,
8470 unless the type is an undefined structure or union.
8471 If not, it will get done when the type is completed. */
8472 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8473 || TREE_CODE (decl) == RESULT_DECL)
8475 if (TREE_CODE (decl) == VAR_DECL)
8476 maybe_commonize_var (decl);
8478 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8480 if (TREE_CODE (type) == FUNCTION_TYPE
8481 || TREE_CODE (type) == METHOD_TYPE)
8482 abstract_virtuals_error (decl,
8483 strip_array_types (TREE_TYPE (type)));
8485 abstract_virtuals_error (decl, strip_array_types (type));
8487 if (TREE_CODE (decl) == FUNCTION_DECL
8488 || TREE_TYPE (decl) == error_mark_node)
8489 /* No initialization required. */
8491 else if (DECL_EXTERNAL (decl)
8492 && ! (DECL_LANG_SPECIFIC (decl)
8493 && DECL_NOT_REALLY_EXTERN (decl)))
8496 DECL_INITIAL (decl) = init;
8500 /* A variable definition. */
8501 if (DECL_FUNCTION_SCOPE_P (decl))
8503 /* This is a local declaration. */
8504 if (doing_semantic_analysis_p ())
8505 maybe_inject_for_scope_var (decl);
8506 /* Initialize the local variable. */
8507 if (processing_template_decl)
8509 if (init || DECL_INITIAL (decl) == error_mark_node)
8510 DECL_INITIAL (decl) = init;
8512 else if (!TREE_STATIC (decl))
8513 initialize_local_var (decl, init);
8516 if (TREE_STATIC (decl))
8517 expand_static_init (decl, init);
8521 /* Undo call to `pushclass' that was done in `start_decl'
8522 due to initialization of qualified member variable.
8523 I.e., Foo::x = 10; */
8525 tree context = CP_DECL_CONTEXT (decl);
8528 && (TREE_CODE (decl) == VAR_DECL
8529 /* We also have a pushclass done that we need to undo here
8530 if we're at top level and declare a method. */
8531 || TREE_CODE (decl) == FUNCTION_DECL)
8532 /* If size hasn't been set, we're still defining it,
8533 and therefore inside the class body; don't pop
8534 the binding level.. */
8535 && COMPLETE_TYPE_P (context)
8536 && context == current_class_type)
8537 pop_nested_class ();
8544 TREE_READONLY (decl) = 1;
8547 /* This is here for a midend callback from c-common.c */
8550 finish_decl (decl, init, asmspec_tree)
8554 cp_finish_decl (decl, init, asmspec_tree, 0);
8557 /* Returns a declaration for a VAR_DECL as if:
8559 extern "C" TYPE NAME;
8561 had been seen. Used to create compiler-generated global
8565 declare_global_var (name, type)
8571 push_to_top_level ();
8572 decl = build_decl (VAR_DECL, name, type);
8573 TREE_PUBLIC (decl) = 1;
8574 DECL_EXTERNAL (decl) = 1;
8575 DECL_ARTIFICIAL (decl) = 1;
8577 cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8578 pop_from_top_level ();
8583 /* Returns a pointer to the `atexit' function. Note that if
8584 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
8585 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8599 if (flag_use_cxa_atexit)
8601 /* The declaration for `__cxa_atexit' is:
8603 int __cxa_atexit (void (*)(void *), void *, void *)
8605 We build up the argument types and then then function type
8608 /* First, build the pointer-to-function type for the first
8610 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8611 fn_type = build_function_type (void_type_node, arg_types);
8612 fn_ptr_type = build_pointer_type (fn_type);
8613 /* Then, build the rest of the argument types. */
8614 arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8615 arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8616 arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8617 /* And the final __cxa_atexit type. */
8618 fn_type = build_function_type (integer_type_node, arg_types);
8619 fn_ptr_type = build_pointer_type (fn_type);
8620 name = "__cxa_atexit";
8624 /* The declaration for `atexit' is:
8626 int atexit (void (*)());
8628 We build up the argument types and then then function type
8630 fn_type = build_function_type (void_type_node, void_list_node);
8631 fn_ptr_type = build_pointer_type (fn_type);
8632 arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8633 /* Build the final atexit type. */
8634 fn_type = build_function_type (integer_type_node, arg_types);
8638 /* Now, build the function declaration. */
8639 push_lang_context (lang_name_c);
8640 atexit_fndecl = build_library_fn_ptr (name, fn_type);
8641 mark_used (atexit_fndecl);
8642 pop_lang_context ();
8643 atexit_node = default_conversion (atexit_fndecl);
8648 /* Returns the __dso_handle VAR_DECL. */
8651 get_dso_handle_node ()
8653 if (dso_handle_node)
8654 return dso_handle_node;
8656 /* Declare the variable. */
8657 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8660 return dso_handle_node;
8663 /* Begin a new function with internal linkage whose job will be simply
8664 to destroy some particular variable. */
8669 static int counter = 0;
8670 int old_interface_only = interface_only;
8671 int old_interface_unknown = interface_unknown;
8677 push_to_top_level ();
8679 /* No need to mangle this. */
8680 push_lang_context (lang_name_c);
8683 interface_unknown = 1;
8685 /* Build the parameter-types. */
8686 parmtypes = void_list_node;
8687 /* Functions passed to __cxa_atexit take an additional parameter.
8688 We'll just ignore it. After we implement the new calling
8689 convention for destructors, we can eliminate the use of
8690 additional cleanup functions entirely in the -fnew-abi case. */
8691 if (flag_use_cxa_atexit)
8692 parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8693 /* Build the function type itself. */
8694 fntype = build_function_type (void_type_node, parmtypes);
8695 /* Build the name of the function. */
8696 sprintf (name, "__tcf_%d", counter++);
8697 /* Build the function declaration. */
8698 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8699 /* It's a function with internal linkage, generated by the
8701 TREE_PUBLIC (fndecl) = 0;
8702 DECL_ARTIFICIAL (fndecl) = 1;
8703 /* Make the function `inline' so that it is only emitted if it is
8704 actually needed. It is unlikely that it will be inlined, since
8705 it is only called via a function pointer, but we avoid unnecessary
8706 emissions this way. */
8707 DECL_INLINE (fndecl) = 1;
8708 /* Build the parameter. */
8709 if (flag_use_cxa_atexit)
8713 parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
8714 DECL_CONTEXT (parmdecl) = fndecl;
8715 TREE_USED (parmdecl) = 1;
8716 DECL_ARGUMENTS (fndecl) = parmdecl;
8720 start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8722 interface_unknown = old_interface_unknown;
8723 interface_only = old_interface_only;
8725 pop_lang_context ();
8727 return current_function_decl;
8730 /* Finish the cleanup function begun by start_cleanup_fn. */
8735 expand_body (finish_function (0));
8737 pop_from_top_level ();
8740 /* Generate code to handle the destruction of DECL, an object with
8741 static storage duration. */
8744 register_dtor_fn (decl)
8751 int saved_flag_access_control;
8753 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8756 /* Call build_cleanup before we enter the anonymous function so that
8757 any access checks will be done relative to the current scope,
8758 rather than the scope of the anonymous function. */
8759 build_cleanup (decl);
8761 /* Now start the function. */
8762 cleanup = start_cleanup_fn ();
8764 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8765 to the original function, rather than the anonymous one. That
8766 will make the back-end think that nested functions are in use,
8767 which causes confusion. */
8768 saved_flag_access_control = flag_access_control;
8769 scope_chain->check_access = flag_access_control = 0;
8770 fcall = build_cleanup (decl);
8771 scope_chain->check_access = flag_access_control = saved_flag_access_control;
8773 /* Create the body of the anonymous function. */
8774 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8775 finish_expr_stmt (fcall);
8776 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
8779 /* Call atexit with the cleanup function. */
8780 cxx_mark_addressable (cleanup);
8781 cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8782 if (flag_use_cxa_atexit)
8784 args = tree_cons (NULL_TREE,
8785 build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
8787 args = tree_cons (NULL_TREE, null_pointer_node, args);
8788 args = tree_cons (NULL_TREE, cleanup, args);
8791 args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8792 finish_expr_stmt (build_function_call (get_atexit_node (), args));
8795 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8796 is its initializer. Generate code to handle the construction
8797 and destruction of DECL. */
8800 expand_static_init (decl, init)
8806 my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 20021010);
8807 my_friendly_assert (TREE_STATIC (decl), 20021010);
8809 /* Some variables require no initialization. */
8811 && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8812 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8815 oldstatic = value_member (decl, static_aggregates);
8819 if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8820 error ("multiple initializations given for `%D'", decl);
8822 else if (! toplevel_bindings_p ())
8824 /* Emit code to perform this initialization but once. */
8831 /* Emit code to perform this initialization but once. This code
8834 static int guard = 0;
8836 // Do initialization.
8838 // Register variable for destruction at end of program.
8841 Note that the `temp' variable is only set to 1 *after* the
8842 initialization is complete. This ensures that an exception,
8843 thrown during the construction, will cause the variable to
8844 reinitialized when we pass through this code again, as per:
8848 If the initialization exits by throwing an exception, the
8849 initialization is not complete, so it will be tried again
8850 the next time control enters the declaration.
8852 In theory, this process should be thread-safe, too; multiple
8853 threads should not be able to initialize the variable more
8854 than once. We don't yet attempt to ensure thread-safety. */
8856 /* Create the guard variable. */
8857 guard = get_guard (decl);
8859 /* Begin the conditional initialization. */
8860 if_stmt = begin_if_stmt ();
8861 finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
8862 then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8864 /* Do the initialization itself. */
8865 assignment = init ? init : NULL_TREE;
8867 /* Once the assignment is complete, set TEMP to 1. Since the
8868 construction of the static object is complete at this point,
8869 we want to make sure TEMP is set to 1 even if a temporary
8870 constructed during the initialization throws an exception
8871 when it is destroyed. So, we combine the initialization and
8872 the assignment to TEMP into a single expression, ensuring
8873 that when we call finish_expr_stmt the cleanups will not be
8874 run until after TEMP is set to 1. */
8875 guard_init = set_guard (guard);
8878 assignment = tree_cons (NULL_TREE, assignment,
8879 build_tree_list (NULL_TREE,
8881 assignment = build_compound_expr (assignment);
8884 assignment = guard_init;
8885 finish_expr_stmt (assignment);
8887 /* Use atexit to register a function for destroying this static
8889 register_dtor_fn (decl);
8891 finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8892 finish_then_clause (if_stmt);
8896 static_aggregates = tree_cons (init, decl, static_aggregates);
8899 /* Finish the declaration of a catch-parameter. */
8902 start_handler_parms (declspecs, declarator)
8909 decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8911 if (decl == NULL_TREE)
8912 error ("invalid catch parameter");
8921 /* Make TYPE a complete type based on INITIAL_VALUE.
8922 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8923 2 if there was no information (in which case assume 0 if DO_DEFAULT). */
8926 complete_array_type (type, initial_value, do_default)
8927 tree type, initial_value;
8930 register tree maxindex = NULL_TREE;
8935 /* An array of character type can be initialized from a
8936 brace-enclosed string constant. */
8937 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
8938 && TREE_CODE (initial_value) == CONSTRUCTOR
8939 && CONSTRUCTOR_ELTS (initial_value)
8940 && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)))
8942 && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE)
8943 initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value));
8945 /* Note MAXINDEX is really the maximum index, one less than the
8947 if (TREE_CODE (initial_value) == STRING_CST)
8950 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8951 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8954 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8956 tree elts = CONSTRUCTOR_ELTS (initial_value);
8958 maxindex = ssize_int (-1);
8959 for (; elts; elts = TREE_CHAIN (elts))
8961 if (TREE_PURPOSE (elts))
8962 maxindex = TREE_PURPOSE (elts);
8964 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
8966 maxindex = copy_node (maxindex);
8970 /* Make an error message unless that happened already. */
8971 if (initial_value != error_mark_node)
8974 initial_value = NULL_TREE;
8976 /* Prevent further error messages. */
8977 maxindex = build_int_2 (0, 0);
8984 maxindex = build_int_2 (0, 0);
8993 domain = build_index_type (maxindex);
8994 TYPE_DOMAIN (type) = domain;
8996 if (! TREE_TYPE (maxindex))
8997 TREE_TYPE (maxindex) = domain;
8999 itype = TREE_TYPE (initial_value);
9002 if (itype && !TYPE_DOMAIN (itype))
9003 TYPE_DOMAIN (itype) = domain;
9004 /* The type of the main variant should never be used for arrays
9005 of different sizes. It should only ever be completed with the
9006 size of the array. */
9007 if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
9008 TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
9011 /* Lay out the type now that we can get the real answer. */
9018 /* Return zero if something is declared to be a member of type
9019 CTYPE when in the context of CUR_TYPE. STRING is the error
9020 message to print in that case. Otherwise, quietly return 1. */
9023 member_function_or_else (ctype, cur_type, flags)
9024 tree ctype, cur_type;
9025 enum overload_flags flags;
9027 if (ctype && ctype != cur_type)
9029 if (flags == DTOR_FLAG)
9030 error ("destructor for alien class `%T' cannot be a member",
9033 error ("constructor for alien class `%T' cannot be a member",
9040 /* Subroutine of `grokdeclarator'. */
9042 /* Generate errors possibly applicable for a given set of specifiers.
9043 This is for ARM $7.1.2. */
9046 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
9049 int virtualp, quals, friendp, raises, inlinep;
9052 error ("`%D' declared as a `virtual' %s", object, type);
9054 error ("`%D' declared as an `inline' %s", object, type);
9056 error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
9059 cp_error_at ("`%D' declared as a friend", object);
9061 && (TREE_CODE (object) == TYPE_DECL
9062 || (!TYPE_PTRFN_P (TREE_TYPE (object))
9063 && !TYPE_REFFN_P (TREE_TYPE (object))
9064 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
9065 cp_error_at ("`%D' declared with an exception specification", object);
9068 /* CTYPE is class type, or null if non-class.
9069 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
9071 DECLARATOR is the function's name.
9072 VIRTUALP is truthvalue of whether the function is virtual or not.
9073 FLAGS are to be passed through to `grokclassfn'.
9074 QUALS are qualifiers indicating whether the function is `const'
9076 RAISES is a list of exceptions that this function can raise.
9077 CHECK is 1 if we must find this method in CTYPE, 0 if we should
9078 not look, and -1 if we should not call `grokclassfn' at all.
9080 Returns `NULL_TREE' if something goes wrong, after issuing
9081 applicable error messages. */
9084 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
9085 raises, check, friendp, publicp, inlinep, funcdef_flag,
9086 template_count, in_namespace)
9089 tree orig_declarator;
9091 enum overload_flags flags;
9093 int check, friendp, publicp, inlinep, funcdef_flag, template_count;
9097 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
9098 int has_default_arg = 0;
9102 type = build_exception_variant (type, raises);
9104 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
9105 /* Propagate volatile out from type to decl. */
9106 if (TYPE_VOLATILE (type))
9107 TREE_THIS_VOLATILE (decl) = 1;
9109 /* If this decl has namespace scope, set that up. */
9111 set_decl_namespace (decl, in_namespace, friendp);
9113 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9115 /* `main' and builtins have implicit 'C' linkage. */
9116 if ((MAIN_NAME_P (declarator)
9117 || (IDENTIFIER_LENGTH (declarator) > 10
9118 && IDENTIFIER_POINTER (declarator)[0] == '_'
9119 && IDENTIFIER_POINTER (declarator)[1] == '_'
9120 && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
9121 && current_lang_name == lang_name_cplusplus
9122 && ctype == NULL_TREE
9123 /* NULL_TREE means global namespace. */
9124 && DECL_CONTEXT (decl) == NULL_TREE)
9125 SET_DECL_LANGUAGE (decl, lang_c);
9127 /* Should probably propagate const out from type to decl I bet (mrs). */
9130 DECL_STATIC_FUNCTION_P (decl) = 1;
9131 DECL_CONTEXT (decl) = ctype;
9135 DECL_CONTEXT (decl) = ctype;
9137 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9139 if (processing_template_decl)
9140 error ("cannot declare `::main' to be a template");
9142 error ("cannot declare `::main' to be inline");
9144 error ("cannot declare `::main' to be static");
9145 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9147 error ("`main' must return `int'");
9152 /* Members of anonymous types and local classes have no linkage; make
9154 /* FIXME what if it gets a name from typedef? */
9155 if (ctype && (TYPE_ANONYMOUS_P (ctype)
9156 || decl_function_context (TYPE_MAIN_DECL (ctype))))
9161 /* [basic.link]: A name with no linkage (notably, the name of a class
9162 or enumeration declared in a local scope) shall not be used to
9163 declare an entity with linkage.
9165 Only check this for public decls for now. */
9166 t = no_linkage_check (TREE_TYPE (decl));
9169 if (TYPE_ANONYMOUS_P (t))
9171 if (DECL_EXTERN_C_P (decl))
9172 /* Allow this; it's pretty common in C. */;
9175 pedwarn ("non-local function `%#D' uses anonymous type",
9177 if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
9179 `%#D' does not refer to the unqualified type, so it is not used for linkage",
9184 pedwarn ("non-local function `%#D' uses local type `%T'",
9189 TREE_PUBLIC (decl) = publicp;
9192 DECL_INTERFACE_KNOWN (decl) = 1;
9193 DECL_NOT_REALLY_EXTERN (decl) = 1;
9196 /* If the declaration was declared inline, mark it as such. */
9198 DECL_DECLARED_INLINE_P (decl) = 1;
9199 /* We inline functions that are explicitly declared inline, or, when
9200 the user explicitly asks us to, all functions. */
9201 if (DECL_DECLARED_INLINE_P (decl) || flag_inline_trees == 2)
9202 DECL_INLINE (decl) = 1;
9204 DECL_EXTERNAL (decl) = 1;
9205 if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
9207 error ("%smember function `%D' cannot have `%T' method qualifier",
9208 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
9212 if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
9213 grok_op_properties (decl, friendp);
9215 if (ctype && decl_function_context (decl))
9216 DECL_NO_STATIC_CHAIN (decl) = 1;
9218 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
9219 if (TREE_PURPOSE (t)
9220 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
9222 has_default_arg = 1;
9227 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
9231 ("defining explicit specialization `%D' in friend declaration",
9235 tree fns = TREE_OPERAND (orig_declarator, 0);
9236 tree args = TREE_OPERAND (orig_declarator, 1);
9238 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
9240 /* Something like `template <class T> friend void f<T>()'. */
9241 error ("invalid use of template-id `%D' in declaration of primary template",
9247 /* A friend declaration of the form friend void f<>(). Record
9248 the information in the TEMPLATE_ID_EXPR. */
9249 SET_DECL_IMPLICIT_INSTANTIATION (decl);
9251 if (TREE_CODE (fns) == COMPONENT_REF)
9253 /* Due to bison parser ickiness, we will have already looked
9254 up an operator_name or PFUNCNAME within the current class
9255 (see template_id in parse.y). If the current class contains
9256 such a name, we'll get a COMPONENT_REF here. Undo that. */
9258 my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
9259 == current_class_type, 20001120);
9260 fns = TREE_OPERAND (fns, 1);
9262 my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
9263 || TREE_CODE (fns) == LOOKUP_EXPR
9264 || TREE_CODE (fns) == OVERLOAD, 20001120);
9265 DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
9267 if (has_default_arg)
9269 error ("default arguments are not allowed in declaration of friend template specialization `%D'",
9276 error ("`inline' is not allowed in declaration of friend template specialization `%D'",
9284 /* Make the init_value nonzero so pushdecl knows this is not
9285 tentative. error_mark_node is replaced later with the BLOCK. */
9286 DECL_INITIAL (decl) = error_mark_node;
9288 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9289 TREE_NOTHROW (decl) = 1;
9291 /* Caller will do the rest of this. */
9295 if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
9296 DECL_CONSTRUCTOR_P (decl) = 1;
9298 /* Function gets the ugly name, field gets the nice one. This call
9299 may change the type of the function (because of default
9301 if (ctype != NULL_TREE)
9302 grokclassfn (ctype, decl, flags, quals);
9304 decl = check_explicit_specialization (orig_declarator, decl,
9306 2 * (funcdef_flag != 0) +
9307 4 * (friendp != 0));
9308 if (decl == error_mark_node)
9311 if (ctype != NULL_TREE
9312 && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
9317 old_decl = check_classfn (ctype, decl);
9319 if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
9320 /* Because grokfndecl is always supposed to return a
9321 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9322 here. We depend on our callers to figure out that its
9323 really a template that's being returned. */
9324 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9326 if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
9327 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9329 /* Remove the `this' parm added by grokclassfn.
9330 XXX Isn't this done in start_function, too? */
9331 revert_static_member_fn (decl);
9332 last_function_parms = TREE_CHAIN (last_function_parms);
9334 if (old_decl && DECL_ARTIFICIAL (old_decl))
9335 error ("definition of implicitly-declared `%D'", old_decl);
9339 /* Since we've smashed OLD_DECL to its
9340 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9341 if (TREE_CODE (decl) == TEMPLATE_DECL)
9342 decl = DECL_TEMPLATE_RESULT (decl);
9344 /* Attempt to merge the declarations. This can fail, in
9345 the case of some invalid specialization declarations. */
9346 if (!duplicate_decls (decl, old_decl))
9347 error ("no `%#D' member function declared in class `%T'",
9353 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9356 if (ctype == NULL_TREE || check)
9360 DECL_VIRTUAL_P (decl) = 1;
9365 /* Create a VAR_DECL named NAME with the indicated TYPE.
9367 If SCOPE is non-NULL, it is the class type or namespace containing
9368 the variable. If SCOPE is NULL, the variable should is created in
9369 the innermost enclosings scope. */
9372 grokvardecl (type, name, specbits_in, initialized, constp, scope)
9375 RID_BIT_TYPE *specbits_in;
9381 RID_BIT_TYPE specbits;
9383 my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE,
9386 specbits = *specbits_in;
9388 /* Compute the scope in which to place the variable. */
9391 /* An explicit "extern" specifier indicates a namespace-scope
9393 if (RIDBIT_SETP (RID_EXTERN, specbits))
9394 scope = current_namespace;
9395 else if (!at_function_scope_p ())
9397 scope = current_scope ();
9399 scope = current_namespace;
9404 && (/* If the variable is a namespace-scope variable declared in a
9405 template, we need DECL_LANG_SPECIFIC. */
9406 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9407 /* Similarly for namespace-scope variables with language linkage
9409 || (TREE_CODE (scope) == NAMESPACE_DECL
9410 && current_lang_name != lang_name_cplusplus)
9411 /* Similarly for static data members. */
9413 decl = build_lang_decl (VAR_DECL, name, type);
9415 decl = build_decl (VAR_DECL, name, type);
9417 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9418 set_decl_namespace (decl, scope, 0);
9420 DECL_CONTEXT (decl) = scope;
9422 if (name && scope && current_lang_name != lang_name_c)
9423 /* We can't mangle lazily here because we don't have any
9424 way to recover whether or not a variable was `extern
9428 if (RIDBIT_SETP (RID_EXTERN, specbits))
9430 DECL_THIS_EXTERN (decl) = 1;
9431 DECL_EXTERNAL (decl) = !initialized;
9434 /* In class context, static means one per class,
9435 public access, and static storage. */
9436 if (DECL_CLASS_SCOPE_P (decl))
9438 TREE_PUBLIC (decl) = 1;
9439 TREE_STATIC (decl) = 1;
9440 DECL_EXTERNAL (decl) = 0;
9442 /* At top level, either `static' or no s.c. makes a definition
9443 (perhaps tentative), and absence of `static' makes it public. */
9444 else if (toplevel_bindings_p ())
9446 TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
9447 && (DECL_THIS_EXTERN (decl) || ! constp));
9448 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9450 /* Not at top level, only `static' makes a static definition. */
9453 TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
9454 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9457 if (RIDBIT_SETP (RID_THREAD, specbits))
9459 if (targetm.have_tls)
9460 DECL_THREAD_LOCAL (decl) = 1;
9462 /* A mere warning is sure to result in improper semantics
9463 at runtime. Don't bother to allow this to compile. */
9464 error ("thread-local storage not supported for this target");
9467 if (TREE_PUBLIC (decl))
9469 /* [basic.link]: A name with no linkage (notably, the name of a class
9470 or enumeration declared in a local scope) shall not be used to
9471 declare an entity with linkage.
9473 Only check this for public decls for now. */
9474 tree t = no_linkage_check (TREE_TYPE (decl));
9477 if (TYPE_ANONYMOUS_P (t))
9478 /* Ignore for now; `enum { foo } e' is pretty common. */;
9480 pedwarn ("non-local variable `%#D' uses local type `%T'",
9488 /* Create and return a canonical pointer to member function type, for
9489 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9492 build_ptrmemfunc_type (type)
9497 tree unqualified_variant = NULL_TREE;
9499 if (type == error_mark_node)
9502 /* If a canonical type already exists for this type, use it. We use
9503 this method instead of type_hash_canon, because it only does a
9504 simple equality check on the list of field members. */
9506 if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9509 /* Make sure that we always have the unqualified pointer-to-member
9511 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
9513 = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9515 t = make_aggr_type (RECORD_TYPE);
9516 /* Let the front-end know this is a pointer to member function... */
9517 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9518 /* ... and not really an aggregate. */
9519 SET_IS_AGGR_TYPE (t, 0);
9521 field = build_decl (FIELD_DECL, pfn_identifier, type);
9524 field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
9525 TREE_CHAIN (field) = fields;
9528 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9530 /* Zap out the name so that the back-end will give us the debugging
9531 information for this anonymous RECORD_TYPE. */
9532 TYPE_NAME (t) = NULL_TREE;
9534 /* If this is not the unqualified form of this pointer-to-member
9535 type, set the TYPE_MAIN_VARIANT for this type to be the
9536 unqualified type. Since they are actually RECORD_TYPEs that are
9537 not variants of each other, we must do this manually. */
9538 if (cp_type_quals (type) != TYPE_UNQUALIFIED)
9540 t = build_qualified_type (t, cp_type_quals (type));
9541 TYPE_MAIN_VARIANT (t) = unqualified_variant;
9542 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9543 TYPE_NEXT_VARIANT (unqualified_variant) = t;
9546 /* Cache this pointer-to-member type so that we can find it again
9548 TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9550 /* Seems to be wanted. */
9551 CLASSTYPE_GOT_SEMICOLON (t) = 1;
9556 /* Create and return a pointer to data member type. */
9559 build_ptrmem_type (tree class_type, tree member_type)
9561 return build_pointer_type (build_offset_type (class_type, member_type));
9564 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9565 Check to see that the definition is valid. Issue appropriate error
9566 messages. Return 1 if the definition is particularly bad, or 0
9570 check_static_variable_definition (decl, type)
9574 /* Motion 10 at San Diego: If a static const integral data member is
9575 initialized with an integral constant expression, the initializer
9576 may appear either in the declaration (within the class), or in
9577 the definition, but not both. If it appears in the class, the
9578 member is a member constant. The file-scope definition is always
9580 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9582 error ("invalid in-class initialization of static data member of non-integral type `%T'",
9584 /* If we just return the declaration, crashes will sometimes
9585 occur. We therefore return void_type_node, as if this was a
9586 friend declaration, to cause callers to completely ignore
9587 this declaration. */
9590 else if (!CP_TYPE_CONST_P (type))
9591 error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
9593 else if (pedantic && !INTEGRAL_TYPE_P (type))
9594 pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9599 /* Given the SIZE (i.e., number of elements) in an array, compute an
9600 appropriate index type for the array. If non-NULL, NAME is the
9601 name of the thing being declared. */
9604 compute_array_index_type (name, size)
9610 /* If this involves a template parameter, it will be a constant at
9611 instantiation time, but we don't know what the value is yet.
9612 Even if no template parameters are involved, we may an expression
9613 that is not a constant; we don't even simplify `1 + 2' when
9614 processing a template. */
9615 if (processing_template_decl)
9617 /* Resolve a qualified reference to an enumerator or static
9618 const data member of ours. */
9619 if (TREE_CODE (size) == SCOPE_REF
9620 && TREE_OPERAND (size, 0) == current_class_type)
9622 tree t = lookup_field (current_class_type,
9623 TREE_OPERAND (size, 1), 0, 0);
9628 return build_index_type (build_min (MINUS_EXPR, sizetype,
9629 size, integer_one_node));
9632 /* The size might be the result of a cast. */
9633 STRIP_TYPE_NOPS (size);
9635 /* It might be a const variable or enumeration constant. */
9636 size = decl_constant_value (size);
9638 /* The array bound must be an integer type. */
9639 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9640 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9641 && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9644 error ("size of array `%D' has non-integer type", name);
9646 error ("size of array has non-integer type");
9647 size = integer_one_node;
9650 /* Normally, the array-bound will be a constant. */
9651 if (TREE_CODE (size) == INTEGER_CST)
9653 /* Check to see if the array bound overflowed. Make that an
9654 error, no matter how generous we're being. */
9655 int old_flag_pedantic_errors = flag_pedantic_errors;
9656 int old_pedantic = pedantic;
9657 pedantic = flag_pedantic_errors = 1;
9658 constant_expression_warning (size);
9659 pedantic = old_pedantic;
9660 flag_pedantic_errors = old_flag_pedantic_errors;
9662 /* An array must have a positive number of elements. */
9663 if (INT_CST_LT (size, integer_zero_node))
9666 error ("size of array `%D' is negative", name);
9668 error ("size of array is negative");
9669 size = integer_one_node;
9671 /* Except that an extension we allow zero-sized arrays. We
9672 always allow them in system headers because glibc uses
9674 else if (integer_zerop (size) && pedantic && !in_system_header)
9677 pedwarn ("ISO C++ forbids zero-size array `%D'", name);
9679 pedwarn ("ISO C++ forbids zero-size array");
9682 else if (TREE_CONSTANT (size))
9684 /* `(int) &fn' is not a valid array bound. */
9686 error ("size of array `%D' is not an integral constant-expression",
9689 error ("size of array is not an integral constant-expression");
9692 /* Compute the index of the largest element in the array. It is
9693 one less than the number of elements in the array. */
9695 = fold (cp_build_binary_op (MINUS_EXPR,
9696 cp_convert (ssizetype, size),
9697 cp_convert (ssizetype,
9698 integer_one_node)));
9700 /* Check for variable-sized arrays. We allow such things as an
9701 extension, even though they are not allowed in ANSI/ISO C++. */
9702 if (!TREE_CONSTANT (itype))
9707 pedwarn ("ISO C++ forbids variable-size array `%D'",
9710 pedwarn ("ISO C++ forbids variable-size array");
9713 /* Create a variable-sized array index type. */
9714 itype = variable_size (itype);
9716 /* Make sure that there was no overflow when creating to a signed
9717 index type. (For example, on a 32-bit machine, an array with
9718 size 2^32 - 1 is too big.) */
9719 else if (TREE_OVERFLOW (itype))
9721 error ("overflow in array dimension");
9722 TREE_OVERFLOW (itype) = 0;
9725 /* Create and return the appropriate index type. */
9726 return build_index_type (itype);
9729 /* Returns the scope (if any) in which the entity declared by
9730 DECLARATOR will be located. If the entity was declared with an
9731 unqualified name, NULL_TREE is returned. */
9734 get_scope_of_declarator (declarator)
9740 switch (TREE_CODE (declarator))
9746 /* For any of these, the main declarator is the first operand. */
9747 return get_scope_of_declarator (TREE_OPERAND
9751 /* For a pointer-to-member, continue descending. */
9752 if (TREE_CODE (TREE_OPERAND (declarator, 1))
9754 return get_scope_of_declarator (TREE_OPERAND
9756 /* Otherwise, if the declarator-id is a SCOPE_REF, the scope in
9757 which the declaration occurs is the first operand. */
9758 return TREE_OPERAND (declarator, 0);
9761 /* Attributes to be applied. The declarator is TREE_VALUE. */
9762 return get_scope_of_declarator (TREE_VALUE (declarator));
9765 /* Otherwise, we have a declarator-id which is not a qualified
9766 name; the entity will be declared in the current scope. */
9771 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9772 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9776 create_array_type_for_decl (name, type, size)
9781 tree itype = NULL_TREE;
9782 const char* error_msg;
9784 /* If things have already gone awry, bail now. */
9785 if (type == error_mark_node || size == error_mark_node)
9786 return error_mark_node;
9788 /* Assume that everything will go OK. */
9791 /* There are some types which cannot be array elements. */
9792 switch (TREE_CODE (type))
9795 error_msg = "array of void";
9799 error_msg = "array of functions";
9802 case REFERENCE_TYPE:
9803 error_msg = "array of references";
9807 error_msg = "array of data members";
9811 error_msg = "array of function members";
9818 /* If something went wrong, issue an error-message and return. */
9822 error ("declaration of `%D' as %s", name, error_msg);
9824 error ("creating %s", error_msg);
9826 return error_mark_node;
9831 The constant expressions that specify the bounds of the arrays
9832 can be omitted only for the first member of the sequence. */
9833 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9836 error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
9839 error ("multidimensional array must have bounds for all dimensions except the first");
9841 return error_mark_node;
9844 /* Figure out the index type for the array. */
9846 itype = compute_array_index_type (name, size);
9848 return build_cplus_array_type (type, itype);
9851 /* Check that it's OK to declare a function with the indicated TYPE.
9852 SFK indicates the kind of special function (if any) that this
9853 function is. OPTYPE is the type given in a conversion operator
9854 declaration. Returns the actual return type of the function; that
9855 may be different than TYPE if an error occurs, or for certain
9856 special functions. */
9859 check_special_function_return_type (sfk, type, optype)
9860 special_function_kind sfk;
9866 case sfk_constructor:
9868 error ("return type specification for constructor invalid");
9870 type = void_type_node;
9873 case sfk_destructor:
9875 error ("return type specification for destructor invalid");
9876 type = void_type_node;
9879 case sfk_conversion:
9880 if (type && !same_type_p (type, optype))
9881 error ("operator `%T' declared to return `%T'", optype, type);
9883 pedwarn ("return type specified for `operator %T'", optype);
9895 /* Given declspecs and a declarator (abstract or otherwise), determine
9896 the name and type of the object declared and construct a DECL node
9899 DECLSPECS is a chain of tree_list nodes whose value fields
9900 are the storage classes and type specifiers.
9902 DECL_CONTEXT says which syntactic context this declaration is in:
9903 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9904 FUNCDEF for a function definition. Like NORMAL but a few different
9905 error messages in each case. Return value may be zero meaning
9906 this definition is too screwy to try to parse.
9907 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9908 handle member functions (which have FIELD context).
9909 Return value may be zero meaning this definition is too screwy to
9911 PARM for a parameter declaration (either within a function prototype
9912 or before a function body). Make a PARM_DECL, or return void_type_node.
9913 CATCHPARM for a parameter declaration before a catch clause.
9914 TYPENAME if for a typename (in a cast or sizeof).
9915 Don't make a DECL node; just return the ..._TYPE node.
9916 FIELD for a struct or union field; make a FIELD_DECL.
9917 BITFIELD for a field with specified width.
9918 INITIALIZED is 1 if the decl has an initializer.
9920 ATTRLIST is a pointer to the list of attributes, which may be NULL
9921 if there are none; *ATTRLIST may be modified if attributes from inside
9922 the declarator should be applied to the declaration.
9924 When this function is called, scoping variables (such as
9925 CURRENT_CLASS_TYPE) should reflect the scope in which the
9926 declaration occurs, not the scope in which the new declaration will
9927 be placed. For example, on:
9931 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9932 should not be `S'. */
9935 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9938 enum decl_context decl_context;
9942 RID_BIT_TYPE specbits;
9945 tree type = NULL_TREE;
9948 int virtualp, explicitp, friendp, inlinep, staticp;
9949 int explicit_int = 0;
9950 int explicit_char = 0;
9951 int defaulted_int = 0;
9952 int extern_langp = 0;
9953 tree dependant_name = NULL_TREE;
9955 tree typedef_decl = NULL_TREE;
9957 tree typedef_type = NULL_TREE;
9958 int funcdef_flag = 0;
9959 enum tree_code innermost_code = ERROR_MARK;
9962 /* See the code below that used this. */
9963 tree decl_attr = NULL_TREE;
9965 /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9966 All FIELD_DECLs we build here have `init' put into their DECL_INITIAL. */
9967 tree init = NULL_TREE;
9969 /* Keep track of what sort of function is being processed
9970 so that we can warn about default return values, or explicit
9971 return values which do not match prescribed defaults. */
9972 special_function_kind sfk = sfk_none;
9974 tree dname = NULL_TREE;
9975 tree ctype = current_class_type;
9976 tree ctor_return_type = NULL_TREE;
9977 enum overload_flags flags = NO_SPECIAL;
9978 tree quals = NULL_TREE;
9979 tree raises = NULL_TREE;
9980 int template_count = 0;
9981 tree in_namespace = NULL_TREE;
9982 tree returned_attrs = NULL_TREE;
9983 tree scope = NULL_TREE;
9985 RIDBIT_RESET_ALL (specbits);
9986 if (decl_context == FUNCDEF)
9987 funcdef_flag = 1, decl_context = NORMAL;
9988 else if (decl_context == MEMFUNCDEF)
9989 funcdef_flag = -1, decl_context = FIELD;
9990 else if (decl_context == BITFIELD)
9991 bitfield = 1, decl_context = FIELD;
9993 /* Look inside a declarator for the name being declared
9994 and get it as a string, for an error message. */
9996 tree *next = &declarator;
10000 while (next && *next)
10003 switch (TREE_CODE (decl))
10006 /* For attributes. */
10007 next = &TREE_VALUE (decl);
10012 next = &TREE_OPERAND (decl, 0);
10015 case BIT_NOT_EXPR: /* For C++ destructors! */
10017 tree name = TREE_OPERAND (decl, 0);
10018 tree rename = NULL_TREE;
10020 my_friendly_assert (flags == NO_SPECIAL, 152);
10022 sfk = sfk_destructor;
10024 TREE_OPERAND (decl, 0) = name = constructor_name (name);
10025 my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
10026 if (ctype == NULL_TREE)
10028 if (current_class_type == NULL_TREE)
10030 error ("destructors must be member functions");
10031 flags = NO_SPECIAL;
10035 tree t = constructor_name (current_class_type);
10042 tree t = constructor_name (ctype);
10049 error ("destructor `%T' must match class name `%T'",
10051 TREE_OPERAND (decl, 0) = rename;
10057 case ADDR_EXPR: /* C++ reference declaration */
10058 /* Fall through. */
10062 innermost_code = TREE_CODE (decl);
10063 next = &TREE_OPERAND (decl, 0);
10067 if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
10069 /* This is actually a variable declaration using
10070 constructor syntax. We need to call start_decl and
10071 cp_finish_decl so we can get the variable
10076 if (decl_context != NORMAL)
10078 error ("variable declaration is not allowed here");
10079 return error_mark_node;
10082 *next = TREE_OPERAND (decl, 0);
10083 init = CALL_DECLARATOR_PARMS (decl);
10087 attributes = *attrlist;
10091 attributes = NULL_TREE;
10094 decl = start_decl (declarator, declspecs, 1,
10095 attributes, NULL_TREE);
10096 decl_type_access_control (decl);
10099 /* Look for __unused__ attribute */
10100 if (TREE_USED (TREE_TYPE (decl)))
10101 TREE_USED (decl) = 1;
10102 finish_decl (decl, init, NULL_TREE);
10105 error ("invalid declarator");
10108 innermost_code = TREE_CODE (decl);
10109 if (decl_context == FIELD && ctype == NULL_TREE)
10110 ctype = current_class_type;
10112 && TREE_OPERAND (decl, 0)
10113 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
10114 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 0)),
10116 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10117 next = &TREE_OPERAND (decl, 0);
10119 if (ctype != NULL_TREE
10120 && decl != NULL_TREE && flags != DTOR_FLAG
10121 && constructor_name_p (decl, ctype))
10123 sfk = sfk_constructor;
10124 ctor_return_type = ctype;
10129 case TEMPLATE_ID_EXPR:
10131 tree fns = TREE_OPERAND (decl, 0);
10133 if (TREE_CODE (fns) == LOOKUP_EXPR)
10134 fns = TREE_OPERAND (fns, 0);
10137 if (TREE_CODE (dname) == COMPONENT_REF)
10138 dname = TREE_OPERAND (dname, 1);
10139 if (TREE_CODE (dname) != IDENTIFIER_NODE)
10141 my_friendly_assert (is_overloaded_fn (dname),
10143 dname = DECL_NAME (get_first_fn (dname));
10146 /* Fall through. */
10148 case IDENTIFIER_NODE:
10149 if (TREE_CODE (decl) == IDENTIFIER_NODE)
10154 if (C_IS_RESERVED_WORD (dname))
10156 error ("declarator-id missing; using reserved word `%D'",
10158 name = IDENTIFIER_POINTER (dname);
10160 else if (!IDENTIFIER_TYPENAME_P (dname))
10161 name = IDENTIFIER_POINTER (dname);
10164 my_friendly_assert (flags == NO_SPECIAL, 154);
10165 flags = TYPENAME_FLAG;
10166 ctor_return_type = TREE_TYPE (dname);
10167 sfk = sfk_conversion;
10168 if (IDENTIFIER_GLOBAL_VALUE (dname)
10169 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (dname))
10171 name = IDENTIFIER_POINTER (dname);
10173 name = "<invalid operator>";
10177 /* C++ extension */
10180 /* Perform error checking, and decide on a ctype. */
10181 tree cname = TREE_OPERAND (decl, 0);
10182 if (cname == NULL_TREE)
10184 else if (TREE_CODE (cname) == NAMESPACE_DECL)
10187 in_namespace = TREE_OPERAND (decl, 0);
10189 else if (! is_aggr_type (cname, 1))
10191 /* Must test TREE_OPERAND (decl, 1), in case user gives
10192 us `typedef (class::memfunc)(int); memfunc *memfuncptr;' */
10193 else if (TREE_OPERAND (decl, 1)
10194 && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
10196 else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
10197 || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
10199 /* This might be declaring a member of a template
10200 parm to be a friend. */
10202 dependant_name = TREE_OPERAND (decl, 1);
10204 else if (ctype == NULL_TREE)
10206 else if (TREE_COMPLEXITY (decl) == current_class_depth)
10210 if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
10212 error ("type `%T' is not derived from type `%T'",
10220 /* It is valid to write:
10222 class C { void f(); };
10226 The standard is not clear about whether `typedef const C D' is
10227 legal; as of 2002-09-15 the committee is considering
10228 that question. EDG 3.0 allows that syntax.
10229 Therefore, we do as well. */
10231 ctype = TYPE_MAIN_VARIANT (ctype);
10232 /* Update the declarator so that when we process it
10233 again the correct type is present. */
10234 TREE_OPERAND (decl, 0) = ctype;
10236 if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
10237 && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 1)),
10239 TREE_OPERAND (decl, 1) = constructor_name (ctype);
10240 next = &TREE_OPERAND (decl, 1);
10244 if (TREE_CODE (decl) == IDENTIFIER_NODE
10245 && constructor_name_p (decl, ctype))
10247 sfk = sfk_constructor;
10248 ctor_return_type = ctype;
10250 else if (TREE_CODE (decl) == BIT_NOT_EXPR
10251 && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
10252 && constructor_name_p (TREE_OPERAND (decl, 0),
10255 sfk = sfk_destructor;
10256 ctor_return_type = ctype;
10258 TREE_OPERAND (decl, 0) = constructor_name (ctype);
10259 next = &TREE_OPERAND (decl, 0);
10270 /* Parse error puts this typespec where
10271 a declarator should go. */
10272 error ("`%T' specified as declarator-id", DECL_NAME (decl));
10273 if (TREE_TYPE (decl) == current_class_type)
10274 error (" perhaps you want `%T' for a constructor",
10275 current_class_name);
10276 dname = DECL_NAME (decl);
10277 name = IDENTIFIER_POINTER (dname);
10279 /* Avoid giving two errors for this. */
10280 IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
10282 declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
10288 next = &BASELINK_FUNCTIONS (decl);
10291 case TEMPLATE_DECL:
10292 /* Sometimes, we see a template-name used as part of a
10293 decl-specifier like in
10294 std::allocator alloc;
10295 Handle that gracefully. */
10296 error ("invalid use of template-name '%E' in a declarator", decl);
10297 return error_mark_node;
10301 my_friendly_assert (0, 20020917);
10306 /* A function definition's declarator must have the form of
10307 a function declarator. */
10309 if (funcdef_flag && innermost_code != CALL_EXPR)
10312 if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
10313 && innermost_code != CALL_EXPR
10314 && ! (ctype && declspecs == NULL_TREE))
10316 error ("declaration of `%D' as non-function", dname);
10317 return void_type_node;
10320 /* Anything declared one level down from the top level
10321 must be one of the parameters of a function
10322 (because the body is at least two levels down). */
10324 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10325 by not allowing C++ class definitions to specify their parameters
10326 with xdecls (must be spec.d in the parmlist).
10328 Since we now wait to push a class scope until we are sure that
10329 we are in a legitimate method context, we must set oldcname
10330 explicitly (since current_class_name is not yet alive).
10332 We also want to avoid calling this a PARM if it is in a namespace. */
10334 if (decl_context == NORMAL && !toplevel_bindings_p ())
10336 struct cp_binding_level *b = current_binding_level;
10337 current_binding_level = b->level_chain;
10338 if (current_binding_level != 0 && toplevel_bindings_p ())
10339 decl_context = PARM;
10340 current_binding_level = b;
10344 name = decl_context == PARM ? "parameter" : "type name";
10346 /* Look through the decl specs and record which ones appear.
10347 Some typespecs are defined as built-in typenames.
10348 Others, the ones that are modifiers of other types,
10349 are represented by bits in SPECBITS: set the bits for
10350 the modifiers that appear. Storage class keywords are also in SPECBITS.
10352 If there is a typedef name or a type, store the type in TYPE.
10353 This includes builtin typedefs such as `int'.
10355 Set EXPLICIT_INT if the type is `int' or `char' and did not
10356 come from a user typedef.
10358 Set LONGLONG if `long' is mentioned twice.
10360 For C++, constructors and destructors have their own fast treatment. */
10362 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
10367 /* Certain parse errors slip through. For example,
10368 `int class;' is not caught by the parser. Try
10369 weakly to recover here. */
10370 if (TREE_CODE (spec) != TREE_LIST)
10373 id = TREE_VALUE (spec);
10375 /* If the entire declaration is itself tagged as deprecated then
10376 suppress reports of deprecated items. */
10377 if (!adding_implicit_members && id && TREE_DEPRECATED (id))
10379 if (deprecated_state != DEPRECATED_SUPPRESS)
10380 warn_deprecated_use (id);
10383 if (TREE_CODE (id) == IDENTIFIER_NODE)
10385 if (id == ridpointers[(int) RID_INT]
10386 || id == ridpointers[(int) RID_CHAR]
10387 || id == ridpointers[(int) RID_BOOL]
10388 || id == ridpointers[(int) RID_WCHAR])
10392 if (id == ridpointers[(int) RID_BOOL])
10393 error ("`bool' is now a keyword");
10395 error ("extraneous `%T' ignored", id);
10399 if (id == ridpointers[(int) RID_INT])
10401 else if (id == ridpointers[(int) RID_CHAR])
10403 type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
10407 /* C++ aggregate types. */
10408 if (IDENTIFIER_HAS_TYPE_VALUE (id))
10411 error ("multiple declarations `%T' and `%T'", type, id);
10413 type = IDENTIFIER_TYPE_VALUE (id);
10417 for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
10419 if (ridpointers[i] == id)
10421 if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
10423 if (pedantic && ! in_system_header && warn_long_long)
10424 pedwarn ("ISO C++ does not support `long long'");
10426 error ("`long long long' is too long for GCC");
10430 else if (RIDBIT_SETP (i, specbits))
10431 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
10433 /* Diagnose "__thread extern" or "__thread static". */
10434 if (RIDBIT_SETP (RID_THREAD, specbits))
10436 if (i == (int)RID_EXTERN)
10437 error ("`__thread' before `extern'");
10438 else if (i == (int)RID_STATIC)
10439 error ("`__thread' before `static'");
10442 if (i == (int)RID_EXTERN
10443 && TREE_PURPOSE (spec) == error_mark_node)
10444 /* This extern was part of a language linkage. */
10447 RIDBIT_SET (i, specbits);
10452 else if (TREE_CODE (id) == TYPE_DECL)
10455 error ("multiple declarations `%T' and `%T'", type,
10459 type = TREE_TYPE (id);
10460 TREE_VALUE (spec) = type;
10466 error ("two or more data types in declaration of `%s'", name);
10467 else if (TREE_CODE (id) == IDENTIFIER_NODE)
10469 register tree t = lookup_name (id, 1);
10470 if (!t || TREE_CODE (t) != TYPE_DECL)
10471 error ("`%s' fails to be a typedef or built in type",
10472 IDENTIFIER_POINTER (id));
10475 type = TREE_TYPE (t);
10479 else if (id != error_mark_node)
10480 /* Can't change CLASS nodes into RECORD nodes here! */
10487 /* See the code below that used this. */
10489 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10491 typedef_type = type;
10493 /* No type at all: default to `int', and set DEFAULTED_INT
10494 because it was not a user-defined typedef. */
10496 if (type == NULL_TREE
10497 && (RIDBIT_SETP (RID_SIGNED, specbits)
10498 || RIDBIT_SETP (RID_UNSIGNED, specbits)
10499 || RIDBIT_SETP (RID_LONG, specbits)
10500 || RIDBIT_SETP (RID_SHORT, specbits)))
10502 /* These imply 'int'. */
10503 type = integer_type_node;
10507 if (sfk != sfk_none)
10508 type = check_special_function_return_type (sfk, type,
10510 else if (type == NULL_TREE)
10516 /* We handle `main' specially here, because 'main () { }' is so
10517 common. With no options, it is allowed. With -Wreturn-type,
10518 it is a warning. It is only an error with -pedantic-errors. */
10519 is_main = (funcdef_flag
10520 && dname && MAIN_NAME_P (dname)
10521 && ctype == NULL_TREE
10522 && in_namespace == NULL_TREE
10523 && current_namespace == global_namespace);
10525 if (in_system_header || flag_ms_extensions)
10526 /* Allow it, sigh. */;
10527 else if (pedantic || ! is_main)
10528 pedwarn ("ISO C++ forbids declaration of `%s' with no type",
10530 else if (warn_return_type)
10531 warning ("ISO C++ forbids declaration of `%s' with no type",
10534 type = integer_type_node;
10537 if (type && IMPLICIT_TYPENAME_P (type))
10539 /* The implicit typename extension is deprecated and will be
10540 removed. Warn about its use now. */
10541 warning ("`%T' is implicitly a typename", type);
10542 cp_deprecated ("implicit typename");
10544 /* Now remove its implicitness, so that we don't warn again.
10545 For instance this might be a typedef, and we do not want to
10546 warn on uses of the typedef itself. Simply clearing the
10547 TREE_TYPE is insufficient. */
10548 type = copy_node (type);
10549 TREE_TYPE (type) = NULL_TREE;
10554 /* Now process the modifiers that were specified
10555 and check for invalid combinations. */
10557 /* Long double is a special combination. */
10559 if (RIDBIT_SETP (RID_LONG, specbits)
10560 && TYPE_MAIN_VARIANT (type) == double_type_node)
10562 RIDBIT_RESET (RID_LONG, specbits);
10563 type = build_qualified_type (long_double_type_node,
10564 cp_type_quals (type));
10567 /* Check all other uses of type modifiers. */
10569 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10570 || RIDBIT_SETP (RID_SIGNED, specbits)
10571 || RIDBIT_SETP (RID_LONG, specbits)
10572 || RIDBIT_SETP (RID_SHORT, specbits))
10576 if (TREE_CODE (type) == REAL_TYPE)
10577 error ("short, signed or unsigned invalid for `%s'", name);
10578 else if (TREE_CODE (type) != INTEGER_TYPE)
10579 error ("long, short, signed or unsigned invalid for `%s'", name);
10580 else if (RIDBIT_SETP (RID_LONG, specbits)
10581 && RIDBIT_SETP (RID_SHORT, specbits))
10582 error ("long and short specified together for `%s'", name);
10583 else if ((RIDBIT_SETP (RID_LONG, specbits)
10584 || RIDBIT_SETP (RID_SHORT, specbits))
10586 error ("long or short specified with char for `%s'", name);
10587 else if ((RIDBIT_SETP (RID_LONG, specbits)
10588 || RIDBIT_SETP (RID_SHORT, specbits))
10589 && TREE_CODE (type) == REAL_TYPE)
10590 error ("long or short specified with floating type for `%s'", name);
10591 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10592 && RIDBIT_SETP (RID_UNSIGNED, specbits))
10593 error ("signed and unsigned given together for `%s'", name);
10597 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
10599 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
10601 if (flag_pedantic_errors)
10606 /* Discard the type modifiers if they are invalid. */
10609 RIDBIT_RESET (RID_UNSIGNED, specbits);
10610 RIDBIT_RESET (RID_SIGNED, specbits);
10611 RIDBIT_RESET (RID_LONG, specbits);
10612 RIDBIT_RESET (RID_SHORT, specbits);
10617 if (RIDBIT_SETP (RID_COMPLEX, specbits)
10618 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10620 error ("complex invalid for `%s'", name);
10621 RIDBIT_RESET (RID_COMPLEX, specbits);
10624 /* Decide whether an integer type is signed or not.
10625 Optionally treat bitfields as signed by default. */
10626 if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10629 It is implementation-defined whether a plain (neither
10630 explicitly signed or unsigned) char, short, int, or long
10631 bit-field is signed or unsigned.
10633 Naturally, we extend this to long long as well. Note that
10634 this does not include wchar_t. */
10635 || (bitfield && !flag_signed_bitfields
10636 && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10637 /* A typedef for plain `int' without `signed' can be
10638 controlled just like plain `int', but a typedef for
10639 `signed int' cannot be so controlled. */
10641 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10642 && (TREE_CODE (type) == INTEGER_TYPE
10643 || TREE_CODE (type) == CHAR_TYPE)
10644 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10647 type = long_long_unsigned_type_node;
10648 else if (RIDBIT_SETP (RID_LONG, specbits))
10649 type = long_unsigned_type_node;
10650 else if (RIDBIT_SETP (RID_SHORT, specbits))
10651 type = short_unsigned_type_node;
10652 else if (type == char_type_node)
10653 type = unsigned_char_type_node;
10654 else if (typedef_decl)
10655 type = c_common_unsigned_type (type);
10657 type = unsigned_type_node;
10659 else if (RIDBIT_SETP (RID_SIGNED, specbits)
10660 && type == char_type_node)
10661 type = signed_char_type_node;
10663 type = long_long_integer_type_node;
10664 else if (RIDBIT_SETP (RID_LONG, specbits))
10665 type = long_integer_type_node;
10666 else if (RIDBIT_SETP (RID_SHORT, specbits))
10667 type = short_integer_type_node;
10669 if (RIDBIT_SETP (RID_COMPLEX, specbits))
10671 /* If we just have "complex", it is equivalent to
10672 "complex double", but if any modifiers at all are specified it is
10673 the complex form of TYPE. E.g, "complex short" is
10674 "complex short int". */
10676 if (defaulted_int && ! longlong
10677 && ! (RIDBIT_SETP (RID_LONG, specbits)
10678 || RIDBIT_SETP (RID_SHORT, specbits)
10679 || RIDBIT_SETP (RID_SIGNED, specbits)
10680 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10681 type = complex_double_type_node;
10682 else if (type == integer_type_node)
10683 type = complex_integer_type_node;
10684 else if (type == float_type_node)
10685 type = complex_float_type_node;
10686 else if (type == double_type_node)
10687 type = complex_double_type_node;
10688 else if (type == long_double_type_node)
10689 type = complex_long_double_type_node;
10691 type = build_complex_type (type);
10694 type_quals = TYPE_UNQUALIFIED;
10695 if (RIDBIT_SETP (RID_CONST, specbits))
10696 type_quals |= TYPE_QUAL_CONST;
10697 if (RIDBIT_SETP (RID_VOLATILE, specbits))
10698 type_quals |= TYPE_QUAL_VOLATILE;
10699 if (RIDBIT_SETP (RID_RESTRICT, specbits))
10700 type_quals |= TYPE_QUAL_RESTRICT;
10701 if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
10702 error ("qualifiers are not allowed on declaration of `operator %T'",
10705 type_quals |= cp_type_quals (type);
10706 type = cp_build_qualified_type_real
10707 (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
10708 ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
10709 /* We might have ignored or rejected some of the qualifiers. */
10710 type_quals = cp_type_quals (type);
10713 inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10714 virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10715 RIDBIT_RESET (RID_VIRTUAL, specbits);
10716 explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10717 RIDBIT_RESET (RID_EXPLICIT, specbits);
10719 if (RIDBIT_SETP (RID_STATIC, specbits))
10720 staticp = 1 + (decl_context == FIELD);
10722 if (virtualp && staticp == 2)
10724 error ("member `%D' cannot be declared both virtual and static",
10728 friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10729 RIDBIT_RESET (RID_FRIEND, specbits);
10731 if (dependant_name && !friendp)
10733 error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
10734 return void_type_node;
10737 /* Warn if two storage classes are given. Default to `auto'. */
10739 if (RIDBIT_ANY_SET (specbits))
10741 if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10742 if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
10743 if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
10744 if (decl_context == PARM && nclasses > 0)
10745 error ("storage class specifiers invalid in parameter declarations");
10746 if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10748 if (decl_context == PARM)
10749 error ("typedef declaration invalid in parameter declaration");
10752 if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10753 if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10754 if (!nclasses && !friendp && extern_langp)
10758 /* Give error if `virtual' is used outside of class declaration. */
10760 && (current_class_name == NULL_TREE || decl_context != FIELD))
10762 error ("virtual outside class declaration");
10766 /* Static anonymous unions are dealt with here. */
10767 if (staticp && decl_context == TYPENAME
10768 && TREE_CODE (declspecs) == TREE_LIST
10769 && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10770 decl_context = FIELD;
10772 /* Warn about storage classes that are invalid for certain
10773 kinds of declarations (parameters, typenames, etc.). */
10775 /* "static __thread" and "extern __thread" are allowed. */
10777 && RIDBIT_SETP (RID_THREAD, specbits)
10778 && (RIDBIT_SETP (RID_EXTERN, specbits)
10779 || RIDBIT_SETP (RID_STATIC, specbits)))
10783 error ("multiple storage classes in declaration of `%s'", name);
10784 else if (decl_context != NORMAL && nclasses > 0)
10786 if ((decl_context == PARM || decl_context == CATCHPARM)
10787 && (RIDBIT_SETP (RID_REGISTER, specbits)
10788 || RIDBIT_SETP (RID_AUTO, specbits)))
10790 else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10792 else if (decl_context == FIELD
10793 /* C++ allows static class elements */
10794 && RIDBIT_SETP (RID_STATIC, specbits))
10795 /* C++ also allows inlines and signed and unsigned elements,
10796 but in those cases we don't come in here. */
10800 if (decl_context == FIELD)
10802 tree tmp = NULL_TREE;
10803 register int op = 0;
10807 /* Avoid trying to get an operand off an identifier node. */
10808 if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10811 tmp = TREE_OPERAND (declarator, 0);
10812 op = IDENTIFIER_OPNAME_P (tmp);
10813 if (IDENTIFIER_TYPENAME_P (tmp))
10815 if (IDENTIFIER_GLOBAL_VALUE (tmp)
10816 && (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (tmp))
10818 name = IDENTIFIER_POINTER (tmp);
10820 name = "<invalid operator>";
10823 error ("storage class specified for %s `%s'",
10824 op ? "member operator" : "field",
10829 if (decl_context == PARM || decl_context == CATCHPARM)
10830 error ("storage class specified for parameter `%s'", name);
10832 error ("storage class specified for typename");
10834 RIDBIT_RESET (RID_REGISTER, specbits);
10835 RIDBIT_RESET (RID_AUTO, specbits);
10836 RIDBIT_RESET (RID_EXTERN, specbits);
10837 RIDBIT_RESET (RID_THREAD, specbits);
10840 else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10842 if (toplevel_bindings_p ())
10844 /* It's common practice (and completely valid) to have a const
10845 be initialized and declared extern. */
10846 if (!(type_quals & TYPE_QUAL_CONST))
10847 warning ("`%s' initialized and declared `extern'", name);
10850 error ("`%s' has both `extern' and initializer", name);
10852 else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10853 && ! toplevel_bindings_p ())
10854 error ("nested function `%s' declared `extern'", name);
10855 else if (toplevel_bindings_p ())
10857 if (RIDBIT_SETP (RID_AUTO, specbits))
10858 error ("top-level declaration of `%s' specifies `auto'", name);
10860 else if (RIDBIT_SETP (RID_THREAD, specbits)
10861 && !RIDBIT_SETP (RID_EXTERN, specbits)
10862 && !RIDBIT_SETP (RID_STATIC, specbits))
10864 error ("function-scope `%s' implicitly auto and declared `__thread'",
10866 RIDBIT_RESET (RID_THREAD, specbits);
10869 if (nclasses > 0 && friendp)
10870 error ("storage class specifiers invalid in friend function declarations");
10872 scope = get_scope_of_declarator (declarator);
10874 /* Now figure out the structure of the declarator proper.
10875 Descend through it, creating more complex types, until we reach
10876 the declared identifier (or NULL_TREE, in an abstract declarator). */
10878 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10879 && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10881 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10882 an INDIRECT_REF (for *...),
10883 a CALL_EXPR (for ...(...)),
10884 an identifier (for the name being declared)
10885 or a null pointer (for the place in an absolute declarator
10886 where the name was omitted).
10887 For the last two cases, we have just exited the loop.
10889 For C++ it could also be
10890 a SCOPE_REF (for class :: ...). In this case, we have converted
10891 sensible names to types, and those are the values we use to
10892 qualify the member name.
10893 an ADDR_EXPR (for &...),
10894 a BIT_NOT_EXPR (for destructors)
10896 At this point, TYPE is the type of elements of an array,
10897 or for a function to return, or for a pointer to point to.
10898 After this sequence of ifs, TYPE is the type of the
10899 array or function or pointer, and DECLARATOR has had its
10900 outermost layer removed. */
10902 if (type == error_mark_node)
10904 if (TREE_CODE (declarator) == SCOPE_REF)
10905 declarator = TREE_OPERAND (declarator, 1);
10907 declarator = TREE_OPERAND (declarator, 0);
10910 if (quals != NULL_TREE
10911 && (declarator == NULL_TREE
10912 || TREE_CODE (declarator) != SCOPE_REF))
10914 if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10915 ctype = TYPE_METHOD_BASETYPE (type);
10916 if (ctype != NULL_TREE)
10918 tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10919 grok_method_quals (ctype, dummy, quals);
10920 type = TREE_TYPE (dummy);
10925 switch (TREE_CODE (declarator))
10929 /* We encode a declarator with embedded attributes using
10931 tree attrs = TREE_PURPOSE (declarator);
10935 declarator = TREE_VALUE (declarator);
10936 inner_decl = declarator;
10937 while (inner_decl != NULL_TREE
10938 && TREE_CODE (inner_decl) == TREE_LIST)
10939 inner_decl = TREE_VALUE (inner_decl);
10941 if (inner_decl == NULL_TREE
10942 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
10943 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10944 if (TREE_CODE (inner_decl) == CALL_EXPR)
10945 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10946 if (TREE_CODE (inner_decl) == ARRAY_REF)
10947 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10948 returned_attrs = decl_attributes (&type,
10949 chainon (returned_attrs, attrs),
10956 register tree size;
10958 size = TREE_OPERAND (declarator, 1);
10960 /* VC++ spells a zero-sized array with []. */
10961 if (size == NULL_TREE && decl_context == FIELD && ! staticp
10962 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10963 size = integer_zero_node;
10965 declarator = TREE_OPERAND (declarator, 0);
10967 type = create_array_type_for_decl (dname, type, size);
10977 tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10978 tree inner_decl = TREE_OPERAND (declarator, 0);
10980 /* Declaring a function type.
10981 Make sure we have a valid type for the function to return. */
10983 /* We now know that the TYPE_QUALS don't apply to the
10984 decl, but to its return type. */
10985 type_quals = TYPE_UNQUALIFIED;
10987 /* Warn about some types functions can't return. */
10989 if (TREE_CODE (type) == FUNCTION_TYPE)
10991 error ("`%s' declared as function returning a function", name);
10992 type = integer_type_node;
10994 if (TREE_CODE (type) == ARRAY_TYPE)
10996 error ("`%s' declared as function returning an array", name);
10997 type = integer_type_node;
11000 if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
11001 inner_decl = TREE_OPERAND (inner_decl, 1);
11003 if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
11004 inner_decl = dname;
11006 /* Pick up type qualifiers which should be applied to `this'. */
11007 quals = CALL_DECLARATOR_QUALS (declarator);
11009 /* Pick up the exception specifications. */
11010 raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
11012 /* Say it's a definition only for the CALL_EXPR
11013 closest to the identifier. */
11016 && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
11017 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
11018 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
11020 if (ctype == NULL_TREE
11021 && decl_context == FIELD
11023 && (friendp == 0 || dname == current_class_name))
11024 ctype = current_class_type;
11026 if (ctype && sfk == sfk_conversion)
11027 TYPE_HAS_CONVERSION (ctype) = 1;
11028 if (ctype && constructor_name_p (dname, ctype))
11030 /* We are within a class's scope. If our declarator name
11031 is the same as the class name, and we are defining
11032 a function, then it is a constructor/destructor, and
11033 therefore returns a void type. */
11035 if (flags == DTOR_FLAG)
11037 /* ISO C++ 12.4/2. A destructor may not be
11038 declared const or volatile. A destructor may
11041 error ("destructor cannot be static member function");
11044 error ("destructors may not be `%s'",
11045 IDENTIFIER_POINTER (TREE_VALUE (quals)));
11048 if (decl_context == FIELD)
11050 if (! member_function_or_else (ctype,
11051 current_class_type,
11053 return void_type_node;
11056 else /* It's a constructor. */
11058 if (explicitp == 1)
11060 /* ISO C++ 12.1. A constructor may not be
11061 declared const or volatile. A constructor may
11062 not be virtual. A constructor may not be
11065 error ("constructor cannot be static member function");
11068 pedwarn ("constructors cannot be declared virtual");
11073 error ("constructors may not be `%s'",
11074 IDENTIFIER_POINTER (TREE_VALUE (quals)));
11078 RID_BIT_TYPE tmp_bits;
11079 memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
11080 RIDBIT_RESET (RID_INLINE, tmp_bits);
11081 RIDBIT_RESET (RID_STATIC, tmp_bits);
11082 if (RIDBIT_ANY_SET (tmp_bits))
11083 error ("return value type specifier for constructor ignored");
11085 if (decl_context == FIELD)
11087 if (! member_function_or_else (ctype,
11088 current_class_type,
11090 return void_type_node;
11091 TYPE_HAS_CONSTRUCTOR (ctype) = 1;
11092 if (sfk != sfk_constructor)
11096 if (decl_context == FIELD)
11102 error ("can't initialize friend function `%s'", name);
11105 /* Cannot be both friend and virtual. */
11106 error ("virtual functions cannot be friends");
11107 RIDBIT_RESET (RID_FRIEND, specbits);
11110 if (decl_context == NORMAL)
11111 error ("friend declaration not in class definition");
11112 if (current_function_decl && funcdef_flag)
11113 error ("can't define friend function `%s' in a local class definition",
11117 /* Construct the function type and go to the next
11118 inner layer of declarator. */
11120 declarator = TREE_OPERAND (declarator, 0);
11122 /* FIXME: This is where default args should be fully
11125 arg_types = grokparms (inner_parms);
11127 if (declarator && flags == DTOR_FLAG)
11129 /* A destructor declared in the body of a class will
11130 be represented as a BIT_NOT_EXPR. But, we just
11131 want the underlying IDENTIFIER. */
11132 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
11133 declarator = TREE_OPERAND (declarator, 0);
11135 if (arg_types != void_list_node)
11137 error ("destructors may not have parameters");
11138 arg_types = void_list_node;
11139 last_function_parms = NULL_TREE;
11143 /* ANSI says that `const int foo ();'
11144 does not make the function foo const. */
11145 type = build_function_type (type, arg_types);
11151 /* Filter out pointers-to-references and references-to-references.
11152 We can get these if a TYPE_DECL is used. */
11154 if (TREE_CODE (type) == REFERENCE_TYPE)
11156 error (TREE_CODE (declarator) == ADDR_EXPR
11157 ? "cannot declare reference to `%#T'"
11158 : "cannot declare pointer to `%#T'", type);
11159 type = TREE_TYPE (type);
11161 else if (VOID_TYPE_P (type)
11162 && (ctype || TREE_CODE (declarator) == ADDR_EXPR))
11163 error (ctype ? "cannot declare pointer to `%#T' member"
11164 : "cannot declare reference to `%#T'", type);
11166 /* Merge any constancy or volatility into the target type
11167 for the pointer. */
11169 /* We now know that the TYPE_QUALS don't apply to the decl,
11170 but to the target of the pointer. */
11171 type_quals = TYPE_UNQUALIFIED;
11173 if (TREE_CODE (declarator) == ADDR_EXPR)
11175 if (!VOID_TYPE_P (type))
11176 type = build_reference_type (type);
11178 else if (TREE_CODE (type) == METHOD_TYPE)
11179 type = build_ptrmemfunc_type (build_pointer_type (type));
11181 type = build_ptrmem_type (ctype, type);
11183 type = build_pointer_type (type);
11185 /* Process a list of type modifier keywords (such as
11186 const or volatile) that were given inside the `*' or `&'. */
11188 if (TREE_TYPE (declarator))
11190 register tree typemodlist;
11196 for (typemodlist = TREE_TYPE (declarator); typemodlist;
11197 typemodlist = TREE_CHAIN (typemodlist))
11199 tree qualifier = TREE_VALUE (typemodlist);
11201 if (qualifier == ridpointers[(int) RID_CONST])
11204 type_quals |= TYPE_QUAL_CONST;
11206 else if (qualifier == ridpointers[(int) RID_VOLATILE])
11209 type_quals |= TYPE_QUAL_VOLATILE;
11211 else if (qualifier == ridpointers[(int) RID_RESTRICT])
11214 type_quals |= TYPE_QUAL_RESTRICT;
11219 error ("invalid type modifier within pointer declarator");
11223 pedwarn ("duplicate `const'");
11225 pedwarn ("duplicate `volatile'");
11227 pedwarn ("duplicate `restrict'");
11228 type = cp_build_qualified_type (type, type_quals);
11229 type_quals = cp_type_quals (type);
11231 declarator = TREE_OPERAND (declarator, 0);
11237 /* We have converted type names to NULL_TREE if the
11238 name was bogus, or to a _TYPE node, if not.
11240 The variable CTYPE holds the type we will ultimately
11241 resolve to. The code here just needs to build
11242 up appropriate member types. */
11243 tree sname = TREE_OPERAND (declarator, 1);
11246 /* Destructors can have their visibilities changed as well. */
11247 if (TREE_CODE (sname) == BIT_NOT_EXPR)
11248 sname = TREE_OPERAND (sname, 0);
11250 if (TREE_OPERAND (declarator, 0) == NULL_TREE)
11252 /* We had a reference to a global decl, or
11253 perhaps we were given a non-aggregate typedef,
11254 in which case we cleared this out, and should just
11255 keep going as though it wasn't there. */
11256 declarator = sname;
11259 ctype = TREE_OPERAND (declarator, 0);
11262 while (t != NULL_TREE && CLASS_TYPE_P (t))
11264 /* You're supposed to have one `template <...>'
11265 for every template class, but you don't need one
11266 for a full specialization. For example:
11268 template <class T> struct S{};
11269 template <> struct S<int> { void f(); };
11270 void S<int>::f () {}
11272 is correct; there shouldn't be a `template <>' for
11273 the definition of `S<int>::f'. */
11274 if (CLASSTYPE_TEMPLATE_INFO (t)
11275 && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
11276 || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
11277 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
11278 template_count += 1;
11280 t = TYPE_MAIN_DECL (t);
11281 t = DECL_CONTEXT (t);
11284 if (sname == NULL_TREE)
11287 if (TREE_CODE (sname) == IDENTIFIER_NODE)
11289 /* This is the `standard' use of the scoping operator:
11290 basetype :: member . */
11292 if (ctype == current_class_type)
11298 Is this ill-formed? */
11301 pedwarn ("extra qualification `%T::' on member `%s' ignored",
11304 else if (TREE_CODE (type) == FUNCTION_TYPE)
11306 if (current_class_type == NULL_TREE || friendp)
11307 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11308 TYPE_ARG_TYPES (type));
11311 error ("cannot declare member function `%T::%s' within `%T'",
11312 ctype, name, current_class_type);
11313 return error_mark_node;
11316 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
11317 || COMPLETE_TYPE_P (complete_type (ctype)))
11319 /* Have to move this code elsewhere in this function.
11320 this code is used for i.e., typedef int A::M; M *pm;
11322 It is? How? jason 10/2/94 */
11324 if (current_class_type)
11326 error ("cannot declare member `%T::%s' within `%T'",
11327 ctype, name, current_class_type);
11328 return void_type_node;
11333 cxx_incomplete_type_error (NULL_TREE, ctype);
11334 return error_mark_node;
11337 declarator = sname;
11339 else if (TREE_CODE (sname) == SCOPE_REF)
11344 declarator = TREE_OPERAND (declarator, 1);
11345 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
11346 /* In this case, we will deal with it later. */
11348 else if (TREE_CODE (type) == FUNCTION_TYPE)
11349 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11350 TYPE_ARG_TYPES (type));
11356 declarator = TREE_OPERAND (declarator, 0);
11360 declarator = BASELINK_FUNCTIONS (declarator);
11365 case ENUMERAL_TYPE:
11366 declarator = NULL_TREE;
11370 declarator = NULL_TREE;
11378 if (returned_attrs)
11381 *attrlist = chainon (returned_attrs, *attrlist);
11383 attrlist = &returned_attrs;
11386 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq that refer
11387 to ctype. They couldn't be resolved earlier because we hadn't
11388 pushed into the class yet.
11390 For example, consider:
11392 template <typename T>
11398 template <typename T>
11399 typename S<T>::X f() {}
11401 When parsing the decl-specifier-seq for the definition of `f',
11402 we construct a TYPENAME_TYPE for `S<T>::X'. By substituting
11403 here, we resolve it to the correct type. */
11404 if (scope && CLASS_TYPE_P (scope)
11405 && current_template_parms
11406 && uses_template_parms (scope))
11408 tree args = current_template_args ();
11409 push_scope (scope);
11410 type = tsubst (type, args, tf_error | tf_warning,
11415 /* Now TYPE has the actual type. */
11417 /* Did array size calculations overflow? */
11419 if (TREE_CODE (type) == ARRAY_TYPE
11420 && COMPLETE_TYPE_P (type)
11421 && TREE_OVERFLOW (TYPE_SIZE (type)))
11423 error ("size of array `%s' is too large", name);
11424 /* If we proceed with the array type as it is, we'll eventually
11425 crash in tree_low_cst(). */
11426 type = error_mark_node;
11429 if (decl_context == FIELD
11430 && !processing_template_decl
11431 && variably_modified_type_p (type))
11433 error ("data member may not have variably modified type `%T'", type);
11434 type = error_mark_node;
11437 if (explicitp == 1 || (explicitp && friendp))
11439 /* [dcl.fct.spec] The explicit specifier shall only be used in
11440 declarations of constructors within a class definition. */
11441 error ("only declarations of constructors can be `explicit'");
11445 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11447 if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
11449 error ("non-member `%s' cannot be declared `mutable'", name);
11450 RIDBIT_RESET (RID_MUTABLE, specbits);
11452 else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
11454 error ("non-object member `%s' cannot be declared `mutable'", name);
11455 RIDBIT_RESET (RID_MUTABLE, specbits);
11457 else if (TREE_CODE (type) == FUNCTION_TYPE
11458 || TREE_CODE (type) == METHOD_TYPE)
11460 error ("function `%s' cannot be declared `mutable'", name);
11461 RIDBIT_RESET (RID_MUTABLE, specbits);
11465 error ("static `%s' cannot be declared `mutable'", name);
11466 RIDBIT_RESET (RID_MUTABLE, specbits);
11468 else if (type_quals & TYPE_QUAL_CONST)
11470 error ("const `%s' cannot be declared `mutable'", name);
11471 RIDBIT_RESET (RID_MUTABLE, specbits);
11475 if (declarator == NULL_TREE
11476 || TREE_CODE (declarator) == IDENTIFIER_NODE
11477 || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
11478 && (TREE_CODE (type) == FUNCTION_TYPE
11479 || TREE_CODE (type) == METHOD_TYPE)))
11481 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11483 error ("template-id `%D' used as a declarator", declarator);
11484 declarator = dname;
11487 /* Unexpected declarator format. */
11490 /* If this is declaring a typedef name, return a TYPE_DECL. */
11492 if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
11496 /* Note that the grammar rejects storage classes
11497 in typenames, fields or parameters. */
11498 if (current_lang_name == lang_name_java)
11499 TYPE_FOR_JAVA (type) = 1;
11501 if (decl_context == FIELD)
11503 if (constructor_name_p (declarator, current_class_type))
11504 pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
11506 decl = build_lang_decl (TYPE_DECL, declarator, type);
11510 decl = build_decl (TYPE_DECL, declarator, type);
11511 if (in_namespace || ctype)
11512 cp_error_at ("typedef name may not be a nested-name-specifier",
11514 if (!current_function_decl)
11515 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11518 /* If the user declares "typedef struct {...} foo" then the
11519 struct will have an anonymous name. Fill that name in now.
11520 Nothing can refer to it, so nothing needs know about the name
11522 if (type != error_mark_node
11524 && TYPE_NAME (type)
11525 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11526 && TYPE_ANONYMOUS_P (type)
11527 /* Don't do this if there are attributes. */
11528 && (!attrlist || !*attrlist)
11529 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11531 tree oldname = TYPE_NAME (type);
11534 /* Replace the anonymous name with the real name everywhere. */
11535 lookup_tag_reverse (type, declarator);
11536 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11537 if (TYPE_NAME (t) == oldname)
11538 TYPE_NAME (t) = decl;
11540 if (TYPE_LANG_SPECIFIC (type))
11541 TYPE_WAS_ANONYMOUS (type) = 1;
11543 /* If this is a typedef within a template class, the nested
11544 type is a (non-primary) template. The name for the
11545 template needs updating as well. */
11546 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11547 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
11548 = TYPE_IDENTIFIER (type);
11550 /* FIXME remangle member functions; member functions of a
11551 type with external linkage have external linkage. */
11556 if (ctype == NULL_TREE)
11558 if (TREE_CODE (type) != METHOD_TYPE)
11559 cp_error_at ("invalid type qualifier for non-member function type", decl);
11561 ctype = TYPE_METHOD_BASETYPE (type);
11563 if (ctype != NULL_TREE)
11564 grok_method_quals (ctype, decl, quals);
11567 if (RIDBIT_SETP (RID_SIGNED, specbits)
11568 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11569 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11571 bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11572 inlinep, friendp, raises != NULL_TREE);
11577 /* Detect the case of an array type of unspecified size
11578 which came, as such, direct from a typedef name.
11579 We must copy the type, so that the array's domain can be
11580 individually set by the object's initializer. */
11582 if (type && typedef_type
11583 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11584 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11585 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11587 /* Detect where we're using a typedef of function type to declare a
11588 function. last_function_parms will not be set, so we must create
11591 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11593 tree decls = NULL_TREE;
11596 for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
11598 tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
11600 TREE_CHAIN (decl) = decls;
11604 last_function_parms = nreverse (decls);
11607 /* If this is a type name (such as, in a cast or sizeof),
11608 compute the type and return it now. */
11610 if (decl_context == TYPENAME)
11612 /* Note that the grammar rejects storage classes
11613 in typenames, fields or parameters. */
11614 if (type_quals != TYPE_UNQUALIFIED)
11615 type_quals = TYPE_UNQUALIFIED;
11617 /* Special case: "friend class foo" looks like a TYPENAME context. */
11620 if (type_quals != TYPE_UNQUALIFIED)
11622 error ("type qualifiers specified for friend class declaration");
11623 type_quals = TYPE_UNQUALIFIED;
11627 error ("`inline' specified for friend class declaration");
11633 /* Don't allow friend declaration without a class-key. */
11634 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11635 pedwarn ("template parameters cannot be friends");
11636 else if (TREE_CODE (type) == TYPENAME_TYPE)
11637 pedwarn ("friend declaration requires class-key, "
11638 "i.e. `friend class %T::%D'",
11639 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11641 pedwarn ("friend declaration requires class-key, "
11642 "i.e. `friend %#T'",
11646 /* Only try to do this stuff if we didn't already give up. */
11647 if (type != integer_type_node)
11649 decl_type_access_control (TYPE_NAME (type));
11651 /* A friendly class? */
11652 if (current_class_type)
11653 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11655 error ("trying to make class `%T' a friend of global scope",
11658 type = void_type_node;
11663 if (ctype == NULL_TREE)
11665 if (TREE_CODE (type) != METHOD_TYPE)
11666 error ("invalid qualifiers on non-member function type");
11668 ctype = TYPE_METHOD_BASETYPE (type);
11672 tree dummy = build_decl (TYPE_DECL, declarator, type);
11673 grok_method_quals (ctype, dummy, quals);
11674 type = TREE_TYPE (dummy);
11680 else if (declarator == NULL_TREE && decl_context != PARM
11681 && decl_context != CATCHPARM
11682 && TREE_CODE (type) != UNION_TYPE
11685 error ("abstract declarator `%T' used as declaration", type);
11686 declarator = make_anon_name ();
11689 /* `void' at top level (not within pointer)
11690 is allowed only in typedefs or type names.
11691 We don't complain about parms either, but that is because
11692 a better error message can be made later. */
11694 if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11697 error ("unnamed variable or field declared void");
11698 else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11700 if (IDENTIFIER_OPNAME_P (declarator))
11703 error ("variable or field `%s' declared void", name);
11706 error ("variable or field declared void");
11707 type = integer_type_node;
11710 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11711 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11713 if (decl_context == PARM || decl_context == CATCHPARM)
11715 if (ctype || in_namespace)
11716 error ("cannot use `::' in parameter declaration");
11718 /* A parameter declared as an array of T is really a pointer to T.
11719 One declared as a function is really a pointer to a function.
11720 One declared as a member is really a pointer to member. */
11722 if (TREE_CODE (type) == ARRAY_TYPE)
11724 /* Transfer const-ness of array into that of type pointed to. */
11725 type = build_pointer_type (TREE_TYPE (type));
11726 type_quals = TYPE_UNQUALIFIED;
11728 else if (TREE_CODE (type) == FUNCTION_TYPE)
11729 type = build_pointer_type (type);
11730 else if (TREE_CODE (type) == OFFSET_TYPE)
11731 type = build_pointer_type (type);
11735 register tree decl;
11737 if (decl_context == PARM)
11739 decl = cp_build_parm_decl (declarator, type);
11741 bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11742 inlinep, friendp, raises != NULL_TREE);
11744 else if (decl_context == FIELD)
11746 if (type == error_mark_node)
11748 /* Happens when declaring arrays of sizes which
11749 are error_mark_node, for example. */
11752 else if (in_namespace && !friendp)
11754 /* Something like struct S { int N::j; }; */
11755 error ("invalid use of `::'");
11758 else if (TREE_CODE (type) == FUNCTION_TYPE)
11761 tree function_context;
11763 /* We catch the others as conflicts with the builtin
11765 if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11767 error ("function `%D' cannot be declared friend",
11774 if (ctype == NULL_TREE)
11775 ctype = current_class_type;
11777 if (ctype == NULL_TREE)
11779 error ("can't make `%D' into a method -- not in a class",
11781 return void_type_node;
11784 /* ``A union may [ ... ] not [ have ] virtual functions.''
11786 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11788 error ("function `%D' declared virtual inside a union",
11790 return void_type_node;
11793 if (declarator == ansi_opname (NEW_EXPR)
11794 || declarator == ansi_opname (VEC_NEW_EXPR)
11795 || declarator == ansi_opname (DELETE_EXPR)
11796 || declarator == ansi_opname (VEC_DELETE_EXPR))
11800 error ("`%D' cannot be declared virtual, since it is always static",
11805 else if (staticp < 2)
11806 type = build_cplus_method_type (ctype, TREE_TYPE (type),
11807 TYPE_ARG_TYPES (type));
11810 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11811 function_context = (ctype != NULL_TREE) ?
11812 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11813 publicp = (! friendp || ! staticp)
11814 && function_context == NULL_TREE;
11815 decl = grokfndecl (ctype, type,
11816 TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11817 ? declarator : dname,
11819 virtualp, flags, quals, raises,
11820 friendp ? -1 : 0, friendp, publicp, inlinep,
11821 funcdef_flag, template_count, in_namespace);
11822 if (decl == NULL_TREE)
11825 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11826 /* The decl and setting of decl_attr is also turned off. */
11827 decl = build_decl_attribute_variant (decl, decl_attr);
11830 /* [class.conv.ctor]
11832 A constructor declared without the function-specifier
11833 explicit that can be called with a single parameter
11834 specifies a conversion from the type of its first
11835 parameter to the type of its class. Such a constructor
11836 is called a converting constructor. */
11837 if (explicitp == 2)
11838 DECL_NONCONVERTING_P (decl) = 1;
11839 else if (DECL_CONSTRUCTOR_P (decl))
11841 /* The constructor can be called with exactly one
11842 parameter if there is at least one parameter, and
11843 any subsequent parameters have default arguments.
11844 Ignore any compiler-added parms. */
11845 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
11847 if (arg_types == void_list_node
11849 && TREE_CHAIN (arg_types)
11850 && TREE_CHAIN (arg_types) != void_list_node
11851 && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11852 DECL_NONCONVERTING_P (decl) = 1;
11855 else if (TREE_CODE (type) == METHOD_TYPE)
11857 /* We only get here for friend declarations of
11858 members of other classes. */
11859 /* All method decls are public, so tell grokfndecl to set
11860 TREE_PUBLIC, also. */
11861 decl = grokfndecl (ctype, type, declarator, declarator,
11862 virtualp, flags, quals, raises,
11863 friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11864 template_count, in_namespace);
11865 if (decl == NULL_TREE)
11868 else if (!staticp && ! processing_template_decl
11869 && !COMPLETE_TYPE_P (complete_type (type))
11870 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11873 error ("field `%D' has incomplete type", declarator);
11875 error ("name `%T' has incomplete type", type);
11877 /* If we're instantiating a template, tell them which
11878 instantiation made the field's type be incomplete. */
11879 if (current_class_type
11880 && TYPE_NAME (current_class_type)
11881 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11882 && declspecs && TREE_VALUE (declspecs)
11883 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11884 error (" in instantiation of template `%T'",
11885 current_class_type);
11887 type = error_mark_node;
11894 error ("`%s' is neither function nor member function; cannot be declared friend",
11895 IDENTIFIER_POINTER (declarator));
11903 /* Friends are treated specially. */
11904 if (ctype == current_class_type)
11905 warning ("member functions are implicitly friends of their class");
11908 tree t = NULL_TREE;
11909 if (decl && DECL_NAME (decl))
11911 if (template_class_depth (current_class_type) == 0)
11914 = check_explicit_specialization
11916 template_count, 2 * (funcdef_flag != 0) + 4);
11917 if (decl == error_mark_node)
11918 return error_mark_node;
11921 t = do_friend (ctype, declarator, decl,
11922 last_function_parms, *attrlist,
11923 flags, quals, funcdef_flag);
11925 if (t && funcdef_flag)
11928 return void_type_node;
11932 /* Structure field. It may not be a function, except for C++ */
11934 if (decl == NULL_TREE)
11940 /* An attempt is being made to initialize a non-static
11941 member. But, from [class.mem]:
11943 4 A member-declarator can contain a
11944 constant-initializer only if it declares a static
11945 member (_class.static_) of integral or enumeration
11946 type, see _class.static.data_.
11948 This used to be relatively common practice, but
11949 the rest of the compiler does not correctly
11950 handle the initialization unless the member is
11951 static so we make it static below. */
11952 pedwarn ("ISO C++ forbids initialization of member `%D'",
11954 pedwarn ("making `%D' static", declarator);
11958 if (uses_template_parms (type))
11959 /* We'll check at instantiation time. */
11961 else if (check_static_variable_definition (declarator,
11963 /* If we just return the declaration, crashes
11964 will sometimes occur. We therefore return
11965 void_type_node, as if this was a friend
11966 declaration, to cause callers to completely
11967 ignore this declaration. */
11968 return void_type_node;
11971 /* 9.2p13 [class.mem] */
11972 if (constructor_name_p (declarator, current_class_type)
11973 /* The standard does not allow non-static data members
11974 here either, but we agreed at the 10/99 meeting
11975 to change that in TC 1 so that they are allowed in
11976 classes with no user-defined constructors. */
11978 pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
11983 /* C++ allows static class members. All other work
11984 for this is done by grokfield. */
11985 decl = build_lang_decl (VAR_DECL, declarator, type);
11986 TREE_STATIC (decl) = 1;
11987 /* In class context, 'static' means public access. */
11988 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11992 decl = build_decl (FIELD_DECL, declarator, type);
11993 DECL_NONADDRESSABLE_P (decl) = bitfield;
11994 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11996 DECL_MUTABLE_P (decl) = 1;
11997 RIDBIT_RESET (RID_MUTABLE, specbits);
12001 bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
12002 inlinep, friendp, raises != NULL_TREE);
12005 else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
12007 tree original_name;
12013 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
12014 original_name = dname;
12016 original_name = declarator;
12018 if (RIDBIT_SETP (RID_AUTO, specbits))
12019 error ("storage class `auto' invalid for function `%s'", name);
12020 else if (RIDBIT_SETP (RID_REGISTER, specbits))
12021 error ("storage class `register' invalid for function `%s'", name);
12022 else if (RIDBIT_SETP (RID_THREAD, specbits))
12023 error ("storage class `__thread' invalid for function `%s'", name);
12025 /* Function declaration not at top level.
12026 Storage classes other than `extern' are not allowed
12027 and `extern' makes no difference. */
12028 if (! toplevel_bindings_p ()
12029 && (RIDBIT_SETP (RID_STATIC, specbits)
12030 || RIDBIT_SETP (RID_INLINE, specbits))
12033 if (RIDBIT_SETP (RID_STATIC, specbits))
12034 pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
12036 pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
12039 if (ctype == NULL_TREE)
12043 error ("virtual non-class function `%s'", name);
12047 else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
12048 type = build_cplus_method_type (ctype, TREE_TYPE (type),
12049 TYPE_ARG_TYPES (type));
12051 /* Record presence of `static'. */
12052 publicp = (ctype != NULL_TREE
12053 || RIDBIT_SETP (RID_EXTERN, specbits)
12054 || !RIDBIT_SETP (RID_STATIC, specbits));
12056 decl = grokfndecl (ctype, type, original_name, declarator,
12057 virtualp, flags, quals, raises,
12059 publicp, inlinep, funcdef_flag,
12060 template_count, in_namespace);
12061 if (decl == NULL_TREE)
12066 int invalid_static = 0;
12068 /* Don't allow a static member function in a class, and forbid
12069 declaring main to be static. */
12070 if (TREE_CODE (type) == METHOD_TYPE)
12072 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
12073 invalid_static = 1;
12075 else if (current_function_decl)
12077 /* FIXME need arm citation */
12078 error ("cannot declare static function inside another function");
12079 invalid_static = 1;
12082 if (invalid_static)
12085 RIDBIT_RESET (RID_STATIC, specbits);
12091 /* It's a variable. */
12093 /* An uninitialized decl with `extern' is a reference. */
12094 decl = grokvardecl (type, declarator, &specbits,
12096 (type_quals & TYPE_QUAL_CONST) != 0,
12097 ctype ? ctype : in_namespace);
12098 bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
12099 inlinep, friendp, raises != NULL_TREE);
12103 DECL_CONTEXT (decl) = ctype;
12106 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
12108 RIDBIT_RESET (RID_STATIC, specbits);
12110 if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
12112 error ("static member `%D' declared `register'", decl);
12113 RIDBIT_RESET (RID_REGISTER, specbits);
12115 if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
12117 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
12119 RIDBIT_RESET (RID_EXTERN, specbits);
12124 my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
12126 /* Record `register' declaration for warnings on &
12127 and in case doing stupid register allocation. */
12129 if (RIDBIT_SETP (RID_REGISTER, specbits))
12130 DECL_REGISTER (decl) = 1;
12132 if (RIDBIT_SETP (RID_EXTERN, specbits))
12133 DECL_THIS_EXTERN (decl) = 1;
12135 if (RIDBIT_SETP (RID_STATIC, specbits))
12136 DECL_THIS_STATIC (decl) = 1;
12138 /* Record constancy and volatility. There's no need to do this
12139 when processing a template; we'll do this for the instantiated
12140 declaration based on the type of DECL. */
12141 if (!processing_template_decl)
12142 c_apply_type_quals_to_decl (type_quals, decl);
12148 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
12149 An empty exprlist is a parmlist. An exprlist which
12150 contains only identifiers at the global level
12151 is a parmlist. Otherwise, it is an exprlist. */
12154 parmlist_is_exprlist (exprs)
12157 if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
12160 if (toplevel_bindings_p ())
12162 /* At the global level, if these are all identifiers,
12163 then it is a parmlist. */
12166 if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
12168 exprs = TREE_CHAIN (exprs);
12175 /* Subroutine of start_function. Ensure that each of the parameter
12176 types (as listed in PARMS) is complete, as is required for a
12177 function definition. */
12180 require_complete_types_for_parms (parms)
12183 for (; parms; parms = TREE_CHAIN (parms))
12185 if (VOID_TYPE_P (TREE_TYPE (parms)))
12186 /* grokparms will have already issued an error */
12187 TREE_TYPE (parms) = error_mark_node;
12188 else if (complete_type_or_else (TREE_TYPE (parms), parms))
12189 layout_decl (parms, 0);
12191 TREE_TYPE (parms) = error_mark_node;
12195 /* Returns nonzero if T is a local variable. */
12198 local_variable_p (t)
12201 if ((TREE_CODE (t) == VAR_DECL
12202 /* A VAR_DECL with a context that is a _TYPE is a static data
12204 && !TYPE_P (CP_DECL_CONTEXT (t))
12205 /* Any other non-local variable must be at namespace scope. */
12206 && !DECL_NAMESPACE_SCOPE_P (t))
12207 || (TREE_CODE (t) == PARM_DECL))
12213 /* Returns nonzero if T is an automatic local variable or a label.
12214 (These are the declarations that need to be remapped when the code
12215 containing them is duplicated.) */
12218 nonstatic_local_decl_p (t)
12221 return ((local_variable_p (t) && !TREE_STATIC (t))
12222 || TREE_CODE (t) == LABEL_DECL
12223 || TREE_CODE (t) == RESULT_DECL);
12226 /* Like local_variable_p, but suitable for use as a tree-walking
12230 local_variable_p_walkfn (tp, walk_subtrees, data)
12232 int *walk_subtrees ATTRIBUTE_UNUSED;
12233 void *data ATTRIBUTE_UNUSED;
12235 return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
12236 ? *tp : NULL_TREE);
12239 /* Check that ARG, which is a default-argument expression for a
12240 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12241 something goes wrong. DECL may also be a _TYPE node, rather than a
12242 DECL, if there is no DECL available. */
12245 check_default_argument (decl, arg)
12252 if (TREE_CODE (arg) == DEFAULT_ARG)
12253 /* We get a DEFAULT_ARG when looking at an in-class declaration
12254 with a default argument. Ignore the argument for now; we'll
12255 deal with it after the class is complete. */
12258 if (processing_template_decl || uses_template_parms (arg))
12259 /* We don't do anything checking until instantiation-time. Note
12260 that there may be uninstantiated arguments even for an
12261 instantiated function, since default arguments are not
12262 instantiated until they are needed. */
12271 decl_type = TREE_TYPE (decl);
12273 if (arg == error_mark_node
12274 || decl == error_mark_node
12275 || TREE_TYPE (arg) == error_mark_node
12276 || decl_type == error_mark_node)
12277 /* Something already went wrong. There's no need to check
12279 return error_mark_node;
12281 /* [dcl.fct.default]
12283 A default argument expression is implicitly converted to the
12285 if (!TREE_TYPE (arg)
12286 || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
12289 error ("default argument for `%#D' has type `%T'",
12290 decl, TREE_TYPE (arg));
12292 error ("default argument for parameter of type `%T' has type `%T'",
12293 decl_type, TREE_TYPE (arg));
12295 return error_mark_node;
12298 /* [dcl.fct.default]
12300 Local variables shall not be used in default argument
12303 The keyword `this' shall not be used in a default argument of a
12304 member function. */
12305 var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
12309 error ("default argument `%E' uses local variable `%D'",
12311 return error_mark_node;
12318 /* Decode the list of parameter types for a function type.
12319 Given the list of things declared inside the parens,
12320 return a list of types.
12322 We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
12323 flag. If unset, we append void_list_node. A parmlist declared
12324 as `(void)' is accepted as the empty parmlist.
12326 Also set last_function_parms to the chain of PARM_DECLs. */
12329 grokparms (first_parm)
12332 tree result = NULL_TREE;
12333 tree decls = NULL_TREE;
12334 int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
12338 my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
12340 for (parm = first_parm; parm != NULL_TREE; parm = chain)
12342 tree type = NULL_TREE;
12343 tree decl = TREE_VALUE (parm);
12344 tree init = TREE_PURPOSE (parm);
12347 chain = TREE_CHAIN (parm);
12348 /* @@ weak defense against parse errors. */
12349 if (TREE_CODE (decl) != VOID_TYPE
12350 && TREE_CODE (decl) != TREE_LIST)
12352 /* Give various messages as the need arises. */
12353 if (TREE_CODE (decl) == STRING_CST)
12354 error ("invalid string constant `%E'", decl);
12355 else if (TREE_CODE (decl) == INTEGER_CST)
12356 error ("invalid integer constant in parameter list, did you forget to give parameter name?");
12360 if (parm == void_list_node)
12363 split_specs_attrs (TREE_PURPOSE (decl), &specs, &attrs);
12364 decl = grokdeclarator (TREE_VALUE (decl), specs,
12365 PARM, init != NULL_TREE, &attrs);
12366 if (! decl || TREE_TYPE (decl) == error_mark_node)
12370 cplus_decl_attributes (&decl, attrs, 0);
12372 type = TREE_TYPE (decl);
12373 if (VOID_TYPE_P (type))
12375 if (same_type_p (type, void_type_node)
12376 && !DECL_NAME (decl) && !result && !chain && !ellipsis)
12377 /* this is a parmlist of `(void)', which is ok. */
12379 cxx_incomplete_type_error (decl, type);
12380 /* It's not a good idea to actually create parameters of
12381 type `void'; other parts of the compiler assume that a
12382 void type terminates the parameter list. */
12383 type = error_mark_node;
12384 TREE_TYPE (decl) = error_mark_node;
12387 if (type != error_mark_node)
12389 /* Top-level qualifiers on the parameters are
12390 ignored for function types. */
12391 type = TYPE_MAIN_VARIANT (type);
12392 if (TREE_CODE (type) == METHOD_TYPE)
12394 error ("parameter `%D' invalidly declared method type", decl);
12395 type = build_pointer_type (type);
12396 TREE_TYPE (decl) = type;
12398 else if (TREE_CODE (type) == OFFSET_TYPE)
12400 error ("parameter `%D' invalidly declared offset type", decl);
12401 type = build_pointer_type (type);
12402 TREE_TYPE (decl) = type;
12404 else if (abstract_virtuals_error (decl, type))
12405 any_error = 1; /* Seems like a good idea. */
12406 else if (POINTER_TYPE_P (type))
12408 /* [dcl.fct]/6, parameter types cannot contain pointers
12409 (references) to arrays of unknown bound. */
12410 tree t = TREE_TYPE (type);
12411 int ptr = TYPE_PTR_P (type);
12415 if (TYPE_PTR_P (t))
12417 else if (TREE_CODE (t) != ARRAY_TYPE)
12419 else if (!TYPE_DOMAIN (t))
12423 if (TREE_CODE (t) == ARRAY_TYPE)
12424 error ("parameter `%D' includes %s to array of unknown bound `%T'",
12425 decl, ptr ? "pointer" : "reference", t);
12428 if (!any_error && init)
12429 init = check_default_argument (decl, init);
12434 TREE_CHAIN (decl) = decls;
12436 result = tree_cons (init, type, result);
12438 decls = nreverse (decls);
12439 result = nreverse (result);
12441 result = chainon (result, void_list_node);
12442 last_function_parms = decls;
12448 /* D is a constructor or overloaded `operator='.
12450 Let T be the class in which D is declared. Then, this function
12453 -1 if D's is an ill-formed constructor or copy assignment operator
12454 whose first parameter is of type `T'.
12455 0 if D is not a copy constructor or copy assignment
12457 1 if D is a copy constructor or copy assignment operator whose
12458 first parameter is a reference to const qualified T.
12459 2 if D is a copy constructor or copy assignment operator whose
12460 first parameter is a reference to non-const qualified T.
12462 This function can be used as a predicate. Positive values indicate
12463 a copy constructor and nonzero values indicate a copy assignment
12474 my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
12476 if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
12477 /* Instantiations of template member functions are never copy
12478 functions. Note that member functions of templated classes are
12479 represented as template functions internally, and we must
12480 accept those as copy functions. */
12483 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12487 arg_type = TREE_VALUE (args);
12489 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12491 /* Pass by value copy assignment operator. */
12494 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12495 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12497 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12503 args = TREE_CHAIN (args);
12505 if (args && args != void_list_node && !TREE_PURPOSE (args))
12506 /* There are more non-optional args. */
12512 /* Remember any special properties of member function DECL. */
12514 void grok_special_member_properties (decl)
12517 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
12518 ; /* Not special. */
12519 else if (DECL_CONSTRUCTOR_P (decl))
12521 int ctor = copy_fn_p (decl);
12527 A non-template constructor for class X is a copy
12528 constructor if its first parameter is of type X&, const
12529 X&, volatile X& or const volatile X&, and either there
12530 are no other parameters or else all other parameters have
12531 default arguments. */
12532 TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
12534 TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
12536 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12537 TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
12539 else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
12543 A non-template assignment operator for class X is a copy
12544 assignment operator if its parameter is of type X, X&, const
12545 X&, volatile X& or const volatile X&. */
12547 int assop = copy_fn_p (decl);
12551 TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12553 TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12554 if (DECL_PURE_VIRTUAL_P (decl))
12555 TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
12560 /* Check a constructor DECL has the correct form. Complains
12561 if the class has a constructor of the form X(X). */
12564 grok_ctor_properties (ctype, decl)
12567 int ctor_parm = copy_fn_p (decl);
12573 A declaration of a constructor for a class X is ill-formed if
12574 its first parameter is of type (optionally cv-qualified) X
12575 and either there are no other parameters or else all other
12576 parameters have default arguments.
12578 We *don't* complain about member template instantiations that
12579 have this form, though; they can occur as we try to decide
12580 what constructor to use during overload resolution. Since
12581 overload resolution will never prefer such a constructor to
12582 the non-template copy constructor (which is either explicitly
12583 or implicitly defined), there's no need to worry about their
12584 existence. Theoretically, they should never even be
12585 instantiated, but that's hard to forestall. */
12586 error ("invalid constructor; you probably meant `%T (const %T&)'",
12588 SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12595 /* An operator with this code is unary, but can also be binary. */
12599 enum tree_code code;
12601 return (code == INDIRECT_REF
12602 || code == ADDR_EXPR
12603 || code == CONVERT_EXPR
12604 || code == NEGATE_EXPR
12605 || code == PREINCREMENT_EXPR
12606 || code == PREDECREMENT_EXPR);
12609 /* An operator with this name can only be unary. */
12613 enum tree_code code;
12615 return (code == TRUTH_NOT_EXPR
12616 || code == BIT_NOT_EXPR
12617 || code == COMPONENT_REF
12618 || code == TYPE_EXPR);
12621 /* Do a little sanity-checking on how they declared their operator. */
12624 grok_op_properties (decl, friendp)
12628 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12630 int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12631 tree name = DECL_NAME (decl);
12632 enum tree_code operator_code;
12635 /* Count the number of arguments. */
12636 for (argtype = argtypes, arity = 0;
12637 argtype && argtype != void_list_node;
12638 argtype = TREE_CHAIN (argtype))
12641 if (current_class_type == NULL_TREE)
12644 if (DECL_CONV_FN_P (decl))
12645 operator_code = TYPE_EXPR;
12649 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P) \
12650 if (ansi_opname (CODE) == name) \
12652 operator_code = (CODE); \
12655 else if (ansi_assopname (CODE) == name) \
12657 operator_code = (CODE); \
12658 DECL_ASSIGNMENT_OPERATOR_P (decl) = 1; \
12662 #include "operators.def"
12663 #undef DEF_OPERATOR
12668 my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
12669 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12673 switch (operator_code)
12676 TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12680 TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12683 case COMPONENT_REF:
12685 TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12689 TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12693 TYPE_GETS_DELETE (current_class_type) |= 1;
12697 TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12700 case VEC_DELETE_EXPR:
12701 TYPE_GETS_DELETE (current_class_type) |= 2;
12709 if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
12711 /* When the compiler encounters the definition of A::operator new, it
12712 doesn't look at the class declaration to find out if it's static. */
12714 revert_static_member_fn (decl);
12716 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12718 else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
12721 revert_static_member_fn (decl);
12723 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12727 /* An operator function must either be a non-static member function
12728 or have at least one parameter of a class, a reference to a class,
12729 an enumeration, or a reference to an enumeration. 13.4.0.6 */
12730 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12732 if (operator_code == TYPE_EXPR
12733 || operator_code == CALL_EXPR
12734 || operator_code == COMPONENT_REF
12735 || operator_code == ARRAY_REF
12736 || operator_code == NOP_EXPR)
12737 error ("`%D' must be a nonstatic member function", decl);
12742 if (DECL_STATIC_FUNCTION_P (decl))
12743 error ("`%D' must be either a non-static member function or a non-member function", decl);
12746 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12748 tree arg = TREE_VALUE (p);
12749 if (TREE_CODE (arg) == REFERENCE_TYPE)
12750 arg = TREE_TYPE (arg);
12752 /* This lets bad template code slip through. */
12753 if (IS_AGGR_TYPE (arg)
12754 || TREE_CODE (arg) == ENUMERAL_TYPE
12755 || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12756 || TREE_CODE (arg) == BOUND_TEMPLATE_TEMPLATE_PARM)
12760 ("`%D' must have an argument of class or enumerated type",
12767 if (operator_code == CALL_EXPR)
12768 return; /* No restrictions on args. */
12770 if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12772 tree t = TREE_TYPE (name);
12775 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12776 const char *what = 0;
12779 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12781 if (TREE_CODE (t) == VOID_TYPE)
12783 else if (t == current_class_type)
12784 what = "the same type";
12785 /* Don't force t to be complete here. */
12786 else if (IS_AGGR_TYPE (t)
12787 && COMPLETE_TYPE_P (t)
12788 && DERIVED_FROM_P (t, current_class_type))
12789 what = "a base class";
12792 warning ("conversion to %s%s will never use a type conversion operator",
12793 ref ? "a reference to " : "", what);
12796 if (operator_code == COND_EXPR)
12799 error ("ISO C++ prohibits overloading operator ?:");
12801 else if (ambi_op_p (operator_code))
12804 /* We pick the one-argument operator codes by default, so
12805 we don't have to change anything. */
12807 else if (arity == 2)
12809 /* If we thought this was a unary operator, we now know
12810 it to be a binary operator. */
12811 switch (operator_code)
12814 operator_code = MULT_EXPR;
12818 operator_code = BIT_AND_EXPR;
12822 operator_code = PLUS_EXPR;
12826 operator_code = MINUS_EXPR;
12829 case PREINCREMENT_EXPR:
12830 operator_code = POSTINCREMENT_EXPR;
12833 case PREDECREMENT_EXPR:
12834 operator_code = POSTDECREMENT_EXPR;
12841 SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
12843 if ((operator_code == POSTINCREMENT_EXPR
12844 || operator_code == POSTDECREMENT_EXPR)
12845 && ! processing_template_decl
12846 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12849 error ("postfix `%D' must take `int' as its argument",
12853 ("postfix `%D' must take `int' as its second argument",
12860 error ("`%D' must take either zero or one argument", decl);
12862 error ("`%D' must take either one or two arguments", decl);
12865 /* More Effective C++ rule 6. */
12867 && (operator_code == POSTINCREMENT_EXPR
12868 || operator_code == POSTDECREMENT_EXPR
12869 || operator_code == PREINCREMENT_EXPR
12870 || operator_code == PREDECREMENT_EXPR))
12872 tree arg = TREE_VALUE (argtypes);
12873 tree ret = TREE_TYPE (TREE_TYPE (decl));
12874 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12875 arg = TREE_TYPE (arg);
12876 arg = TYPE_MAIN_VARIANT (arg);
12877 if (operator_code == PREINCREMENT_EXPR
12878 || operator_code == PREDECREMENT_EXPR)
12880 if (TREE_CODE (ret) != REFERENCE_TYPE
12881 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12883 warning ("prefix `%D' should return `%T'", decl,
12884 build_reference_type (arg));
12888 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12889 warning ("postfix `%D' should return `%T'", decl, arg);
12893 else if (unary_op_p (operator_code))
12898 error ("`%D' must take `void'", decl);
12900 error ("`%D' must take exactly one argument", decl);
12903 else /* if (binary_op_p (operator_code)) */
12908 error ("`%D' must take exactly one argument", decl);
12910 error ("`%D' must take exactly two arguments", decl);
12913 /* More Effective C++ rule 7. */
12915 && (operator_code == TRUTH_ANDIF_EXPR
12916 || operator_code == TRUTH_ORIF_EXPR
12917 || operator_code == COMPOUND_EXPR))
12918 warning ("user-defined `%D' always evaluates both arguments",
12922 /* Effective C++ rule 23. */
12925 && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12926 && (operator_code == PLUS_EXPR
12927 || operator_code == MINUS_EXPR
12928 || operator_code == TRUNC_DIV_EXPR
12929 || operator_code == MULT_EXPR
12930 || operator_code == TRUNC_MOD_EXPR)
12931 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12932 warning ("`%D' should return by value", decl);
12934 /* [over.oper]/8 */
12935 for (; argtypes && argtypes != void_list_node;
12936 argtypes = TREE_CHAIN (argtypes))
12937 if (TREE_PURPOSE (argtypes))
12939 TREE_PURPOSE (argtypes) = NULL_TREE;
12940 if (operator_code == POSTINCREMENT_EXPR
12941 || operator_code == POSTDECREMENT_EXPR)
12944 pedwarn ("`%D' cannot have default arguments", decl);
12947 error ("`%D' cannot have default arguments", decl);
12953 static const char *
12955 enum tag_types code;
12972 /* Get the struct, enum or union (CODE says which) with tag NAME.
12973 Define the tag as a forward-reference if it is not defined.
12975 C++: If a class derivation is given, process it here, and report
12976 an error if multiple derivation declarations are not identical.
12978 If this is a definition, come in through xref_tag and only look in
12979 the current frame for the name (since C++ allows new names in any
12983 xref_tag (enum tag_types tag_code, tree name, tree attributes,
12986 enum tree_code code;
12987 register tree ref, t;
12988 struct cp_binding_level *b = current_binding_level;
12989 tree context = NULL_TREE;
12995 code = RECORD_TYPE;
13001 code = ENUMERAL_TYPE;
13007 /* If a cross reference is requested, look up the type
13008 already defined for this tag and return it. */
13012 name = TYPE_IDENTIFIER (t);
13015 t = IDENTIFIER_TYPE_VALUE (name);
13017 /* Warn about 'friend struct Inherited;' doing the wrong thing. */
13018 if (t && globalize && TREE_CODE (t) == TYPENAME_TYPE)
13020 static int explained;
13023 warning ("`%s %T' declares a new type at namespace scope",
13024 tag_name (tag_code), name);
13026 warning (" names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'",
13027 tag_name (tag_code),
13028 constructor_name (current_class_type),
13029 TYPE_IDENTIFIER (t));
13031 /* We need to remove the class scope binding for the
13032 TYPENAME_TYPE as otherwise poplevel_class gets confused. */
13033 for (shadowed = b->class_shadowed;
13035 shadowed = TREE_CHAIN (shadowed))
13036 if (TREE_TYPE (shadowed) == TYPE_NAME (t))
13038 TREE_PURPOSE (shadowed) = NULL_TREE;
13043 if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
13044 && TREE_CODE (t) != BOUND_TEMPLATE_TEMPLATE_PARM)
13049 /* If we know we are defining this tag, only look it up in
13050 this scope and don't try to find it as a type. */
13051 ref = lookup_tag (code, name, b, 1);
13057 ref = follow_tag_typedef (t);
13059 /* [dcl.type.elab] If the identifier resolves to a
13060 typedef-name or a template type-parameter, the
13061 elaborated-type-specifier is ill-formed. */
13064 pedwarn ("using typedef-name `%D' after `%s'",
13065 TYPE_NAME (t), tag_name (tag_code));
13068 else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
13069 error ("using template type parameter `%T' after `%s'",
13070 t, tag_name (tag_code));
13073 ref = lookup_tag (code, name, b, 0);
13077 /* Try finding it as a type declaration. If that wins,
13079 ref = lookup_name (name, 1);
13081 if (ref != NULL_TREE
13082 && processing_template_decl
13083 && DECL_CLASS_TEMPLATE_P (ref)
13084 && template_class_depth (current_class_type) == 0)
13085 /* Since GLOBALIZE is true, we're declaring a global
13086 template, so we want this type. */
13087 ref = DECL_TEMPLATE_RESULT (ref);
13089 if (ref && TREE_CODE (ref) == TYPE_DECL
13090 && TREE_CODE (TREE_TYPE (ref)) == code)
13091 ref = TREE_TYPE (ref);
13096 if (ref && current_class_type
13097 && template_class_depth (current_class_type)
13098 && PROCESSING_REAL_TEMPLATE_DECL_P ())
13100 /* Since GLOBALIZE is nonzero, we are not looking at a
13101 definition of this tag. Since, in addition, we are currently
13102 processing a (member) template declaration of a template
13103 class, we must be very careful; consider:
13110 { template <class V>
13111 friend struct S1; };
13113 Here, the S2::S1 declaration should not be confused with the
13114 outer declaration. In particular, the inner version should
13115 have a template parameter of level 2, not level 1. This
13116 would be particularly important if the member declaration
13119 template <class V = U> friend struct S1;
13121 say, when we should tsubst into `U' when instantiating
13122 S2. On the other hand, when presented with:
13132 we must find the inner binding eventually. We
13133 accomplish this by making sure that the new type we
13134 create to represent this declaration has the right
13136 context = TYPE_CONTEXT (ref);
13143 /* If no such tag is yet defined, create a forward-reference node
13144 and record it as the "definition".
13145 When a real declaration of this type is found,
13146 the forward-reference will be altered into a real type. */
13147 if (code == ENUMERAL_TYPE)
13149 error ("use of enum `%#D' without previous declaration", name);
13151 ref = make_node (ENUMERAL_TYPE);
13153 /* Give the type a default layout like unsigned int
13154 to avoid crashing if it does not get defined. */
13155 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
13156 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
13157 TYPE_USER_ALIGN (ref) = 0;
13158 TREE_UNSIGNED (ref) = 1;
13159 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
13160 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
13161 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
13163 /* Enable us to recognize when a type is created in class context.
13164 To do nested classes correctly, this should probably be cleared
13165 out when we leave this classes scope. Currently this in only
13166 done in `start_enum'. */
13168 pushtag (name, ref, globalize);
13172 struct cp_binding_level *old_b = class_binding_level;
13174 ref = make_aggr_type (code);
13175 TYPE_CONTEXT (ref) = context;
13177 #ifdef NONNESTED_CLASSES
13178 /* Class types don't nest the way enums do. */
13179 class_binding_level = (struct cp_binding_level *)0;
13181 pushtag (name, ref, globalize);
13182 class_binding_level = old_b;
13187 if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
13188 redeclare_class_template (ref, current_template_parms);
13191 TYPE_ATTRIBUTES (ref) = attributes;
13197 xref_tag_from_type (old, id, globalize)
13201 enum tag_types tag_kind;
13203 if (TREE_CODE (old) == RECORD_TYPE)
13204 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13206 tag_kind = union_type;
13208 if (id == NULL_TREE)
13209 id = TYPE_IDENTIFIER (old);
13211 return xref_tag (tag_kind, id, /*attributes=*/NULL_TREE, globalize);
13214 /* REF is a type (named NAME), for which we have just seen some
13215 baseclasses. BINFO is a list of those baseclasses; the
13216 TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
13217 the base-class. CODE_TYPE_NODE indicates whether REF is a class,
13218 struct, or union. */
13221 xref_basetypes (ref, binfo)
13225 /* In the declaration `A : X, Y, ... Z' we mark all the types
13226 (A, X, Y, ..., Z) so we can check for duplicates. */
13231 enum tag_types tag_code;
13233 if (TREE_CODE (ref) == UNION_TYPE)
13235 error ("derived union `%T' invalid", ref);
13239 tag_code = (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
13241 len = list_length (binfo);
13243 /* First, make sure that any templates in base-classes are
13244 instantiated. This ensures that if we call ourselves recursively
13245 we do not get confused about which classes are marked and which
13247 for (base = binfo; base; base = TREE_CHAIN (base))
13248 complete_type (TREE_VALUE (base));
13250 SET_CLASSTYPE_MARKED (ref);
13251 BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
13253 for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
13255 /* The base of a derived struct is public by default. */
13257 = (TREE_PURPOSE (binfo) == access_public_node
13258 || TREE_PURPOSE (binfo) == access_public_virtual_node
13259 || (tag_code != class_type
13260 && (TREE_PURPOSE (binfo) == access_default_node
13261 || TREE_PURPOSE (binfo) == access_default_virtual_node)));
13263 = (TREE_PURPOSE (binfo) == access_protected_node
13264 || TREE_PURPOSE (binfo) == access_protected_virtual_node);
13266 = (TREE_PURPOSE (binfo) == access_private_virtual_node
13267 || TREE_PURPOSE (binfo) == access_protected_virtual_node
13268 || TREE_PURPOSE (binfo) == access_public_virtual_node
13269 || TREE_PURPOSE (binfo) == access_default_virtual_node);
13270 tree basetype = TREE_VALUE (binfo);
13273 if (basetype && TREE_CODE (basetype) == TYPE_DECL)
13274 basetype = TREE_TYPE (basetype);
13276 || (TREE_CODE (basetype) != RECORD_TYPE
13277 && TREE_CODE (basetype) != TYPENAME_TYPE
13278 && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
13279 && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
13281 error ("base type `%T' fails to be a struct or class type",
13282 TREE_VALUE (binfo));
13286 /* This code replaces similar code in layout_basetypes.
13287 We put the complete_type first for implicit `typename'. */
13288 if (!COMPLETE_TYPE_P (basetype)
13289 && ! (current_template_parms && uses_template_parms (basetype)))
13291 error ("base class `%T' has incomplete type", basetype);
13296 if (CLASSTYPE_MARKED (basetype))
13298 if (basetype == ref)
13299 error ("recursive type `%T' undefined", basetype);
13301 error ("duplicate base type `%T' invalid", basetype);
13305 if (TYPE_FOR_JAVA (basetype)
13306 && (current_lang_depth () == 0))
13307 TYPE_FOR_JAVA (ref) = 1;
13309 /* Note that the BINFO records which describe individual
13310 inheritances are *not* shared in the lattice! They
13311 cannot be shared because a given baseclass may be
13312 inherited with different `accessibility' by different
13313 derived classes. (Each BINFO record describing an
13314 individual inheritance contains flags which say what
13315 the `accessibility' of that particular inheritance is.) */
13318 = make_binfo (size_zero_node, basetype,
13319 CLASS_TYPE_P (basetype)
13320 ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
13321 CLASS_TYPE_P (basetype)
13322 ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
13324 TREE_VEC_ELT (binfos, i) = base_binfo;
13325 TREE_VIA_PUBLIC (base_binfo) = via_public;
13326 TREE_VIA_PROTECTED (base_binfo) = via_protected;
13327 TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
13328 BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
13330 /* We need to unshare the binfos now so that lookups during class
13331 definition work. */
13332 unshare_base_binfos (base_binfo);
13334 SET_CLASSTYPE_MARKED (basetype);
13336 /* We are free to modify these bits because they are meaningless
13337 at top level, and BASETYPE is a top-level type. */
13338 if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
13340 TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
13341 /* Converting to a virtual base class requires looking
13342 up the offset of the virtual base. */
13343 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
13346 if (CLASS_TYPE_P (basetype))
13348 TYPE_HAS_NEW_OPERATOR (ref)
13349 |= TYPE_HAS_NEW_OPERATOR (basetype);
13350 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13351 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13352 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13353 /* If the base-class uses multiple inheritance, so do we. */
13354 TYPE_USES_MULTIPLE_INHERITANCE (ref)
13355 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
13356 /* Likewise, if converting to a base of the base may require
13357 code, then we may need to generate code to convert to a
13359 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
13360 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
13367 TREE_VEC_LENGTH (binfos) = i;
13369 BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
13373 TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
13374 /* If there is more than one non-empty they cannot be at the same
13376 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
13379 /* Unmark all the types. */
13381 CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
13382 CLEAR_CLASSTYPE_MARKED (ref);
13384 /* Now that we know all the base-classes, set up the list of virtual
13386 get_vbase_types (ref);
13390 /* Begin compiling the definition of an enumeration type.
13391 NAME is its name (or null if anonymous).
13392 Returns the type object, as yet incomplete.
13393 Also records info about it so that build_enumerator
13394 may be used to declare the individual values as they are read. */
13400 register tree enumtype = NULL_TREE;
13401 struct cp_binding_level *b = current_binding_level;
13403 /* If this is the real definition for a previous forward reference,
13404 fill in the contents in the same object that used to be the
13405 forward reference. */
13407 if (name != NULL_TREE)
13408 enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
13410 if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13412 error ("multiple definition of `%#T'", enumtype);
13413 cp_error_at ("previous definition here", enumtype);
13414 /* Clear out TYPE_VALUES, and start again. */
13415 TYPE_VALUES (enumtype) = NULL_TREE;
13419 enumtype = make_node (ENUMERAL_TYPE);
13420 pushtag (name, enumtype, 0);
13426 /* After processing and defining all the values of an enumeration type,
13427 install their decls in the enumeration type and finish it off.
13428 ENUMTYPE is the type object and VALUES a list of name-value pairs. */
13431 finish_enum (enumtype)
13443 /* We built up the VALUES in reverse order. */
13444 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
13448 Following the closing brace of an enum-specifier, each
13449 enumerator has the type of its enumeration. Prior to the
13450 closing brace, the type of each enumerator is the type of
13451 its initializing value. */
13452 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13453 TREE_TYPE (TREE_VALUE (pair)) = enumtype;
13455 /* For an enum defined in a template, all further processing is
13456 postponed until the template is instantiated. */
13457 if (processing_template_decl)
13459 if (at_function_scope_p ())
13460 add_stmt (build_min (TAG_DEFN, enumtype));
13464 /* Figure out what the minimum and maximum values of the enumerators
13466 if (TYPE_VALUES (enumtype))
13468 minnode = maxnode = NULL_TREE;
13470 for (pair = TYPE_VALUES (enumtype);
13472 pair = TREE_CHAIN (pair))
13476 value = DECL_INITIAL (TREE_VALUE (pair));
13479 minnode = maxnode = value;
13480 else if (tree_int_cst_lt (maxnode, value))
13482 else if (tree_int_cst_lt (value, minnode))
13487 minnode = maxnode = integer_zero_node;
13489 /* Compute the number of bits require to represent all values of the
13490 enumeration. We must do this before the type of MINNODE and
13491 MAXNODE are transformed, since min_precision relies on the
13492 TREE_TYPE of the value it is passed. */
13493 unsignedp = tree_int_cst_sgn (minnode) >= 0;
13494 lowprec = min_precision (minnode, unsignedp);
13495 highprec = min_precision (maxnode, unsignedp);
13496 precision = MAX (lowprec, highprec);
13498 /* Set the TREE_TYPE for the values as well. That's so that when we
13499 call decl_constant_value we get an entity of the right type (but
13500 with the constant value). In addition, transform the TYPE_VALUES
13501 list to contain the values, rather than the CONST_DECLs for them. */
13502 for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
13504 tree value = DECL_INITIAL (TREE_VALUE (pair));
13506 TREE_TYPE (value) = enumtype;
13507 TREE_VALUE (pair) = value;
13510 /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
13511 TYPE_SIZE (enumtype) = NULL_TREE;
13512 TYPE_PRECISION (enumtype) = precision;
13514 fixup_unsigned_type (enumtype);
13516 fixup_signed_type (enumtype);
13518 if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
13519 /* Use the width of the narrowest normal C type which is wide
13521 TYPE_PRECISION (enumtype) = TYPE_PRECISION (c_common_type_for_size
13524 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
13526 TYPE_SIZE (enumtype) = NULL_TREE;
13527 layout_type (enumtype);
13529 /* Fix up all variant types of this enum type. */
13530 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13532 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13533 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
13534 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
13535 TYPE_SIZE (t) = TYPE_SIZE (enumtype);
13536 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
13537 TYPE_MODE (t) = TYPE_MODE (enumtype);
13538 TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
13539 TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
13540 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
13541 TREE_UNSIGNED (t) = TREE_UNSIGNED (enumtype);
13544 /* Finish debugging output for this type. */
13545 rest_of_type_compilation (enumtype, namespace_bindings_p ());
13548 /* Build and install a CONST_DECL for an enumeration constant of the
13549 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13550 Assignment of sequential values by default is handled here. */
13553 build_enumerator (name, value, enumtype)
13563 /* Remove no-op casts from the value. */
13565 STRIP_TYPE_NOPS (value);
13567 if (! processing_template_decl)
13569 /* Validate and default VALUE. */
13570 if (value != NULL_TREE)
13572 value = decl_constant_value (value);
13574 if (TREE_CODE (value) == INTEGER_CST)
13576 value = default_conversion (value);
13577 constant_expression_warning (value);
13581 error ("enumerator value for `%D' not integer constant", name);
13586 /* Default based on previous value. */
13587 if (value == NULL_TREE && ! processing_template_decl)
13591 if (TYPE_VALUES (enumtype))
13593 /* The next value is the previous value ... */
13594 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13595 /* ... plus one. */
13596 value = cp_build_binary_op (PLUS_EXPR,
13600 if (tree_int_cst_lt (value, prev_value))
13601 error ("overflow in enumeration values at `%D'", name);
13604 value = integer_zero_node;
13607 /* Remove no-op casts from the value. */
13609 STRIP_TYPE_NOPS (value);
13611 /* To fix MAX_VAL enum consts. (bkoz) */
13612 TREE_TYPE (value) = integer_type_node;
13616 /* We always have to copy here; not all INTEGER_CSTs are unshared.
13617 Even in other cases, we will later (in finish_enum) be setting
13618 the type of VALUE. But, we don't need to make a copy if this
13619 VALUE is one of the enumeration constants for this same
13620 enumeration type. */
13621 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13622 if (TREE_VALUE (values) == value)
13624 /* If we didn't break out of the loop, then we do need a copy. */
13625 if (!values && value)
13626 value = copy_node (value);
13628 /* C++ associates enums with global, function, or class declarations. */
13629 context = current_scope ();
13631 /* Build the actual enumeration constant. Note that the enumeration
13632 constants have the type of their initializers until the
13633 enumeration is complete:
13637 Following the closing brace of an enum-specifier, each enumer-
13638 ator has the type of its enumeration. Prior to the closing
13639 brace, the type of each enumerator is the type of its
13640 initializing value.
13642 In finish_enum we will reset the type. Of course, if we're
13643 processing a template, there may be no value. */
13644 type = value ? TREE_TYPE (value) : NULL_TREE;
13646 if (context && context == current_class_type)
13647 /* This enum declaration is local to the class. We need the full
13648 lang_decl so that we can record DECL_CLASS_CONTEXT, for example. */
13649 decl = build_lang_decl (CONST_DECL, name, type);
13651 /* It's a global enum, or it's local to a function. (Note local to
13652 a function could mean local to a class method. */
13653 decl = build_decl (CONST_DECL, name, type);
13655 DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13656 DECL_INITIAL (decl) = value;
13657 TREE_READONLY (decl) = 1;
13659 if (context && context == current_class_type)
13660 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13661 on the TYPE_FIELDS list for `S'. (That's so that you can say
13662 things like `S::i' later.) */
13663 finish_member_declaration (decl);
13667 /* Add this enumeration constant to the list for this type. */
13668 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13672 /* We're defining DECL. Make sure that it's type is OK. */
13675 check_function_type (decl, current_function_parms)
13677 tree current_function_parms;
13679 tree fntype = TREE_TYPE (decl);
13680 tree return_type = complete_type (TREE_TYPE (fntype));
13682 /* In a function definition, arg types must be complete. */
13683 require_complete_types_for_parms (current_function_parms);
13685 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13687 error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13689 /* Make it return void instead, but don't change the
13690 type of the DECL_RESULT, in case we have a named return value. */
13691 if (TREE_CODE (fntype) == METHOD_TYPE)
13693 tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13695 = build_cplus_method_type (ctype,
13697 FUNCTION_ARG_CHAIN (decl));
13701 = build_function_type (void_type_node,
13702 TYPE_ARG_TYPES (TREE_TYPE (decl)));
13704 = build_exception_variant (fntype,
13705 TYPE_RAISES_EXCEPTIONS (fntype));
13708 abstract_virtuals_error (decl, TREE_TYPE (fntype));
13711 /* Create the FUNCTION_DECL for a function definition.
13712 DECLSPECS and DECLARATOR are the parts of the declaration;
13713 they describe the function's name and the type it returns,
13714 but twisted together in a fashion that parallels the syntax of C.
13716 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13717 DECLARATOR is really the DECL for the function we are about to
13718 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13719 indicating that the function is an inline defined in-class.
13721 This function creates a binding context for the function body
13722 as well as setting up the FUNCTION_DECL in current_function_decl.
13724 Returns 1 on success. If the DECLARATOR is not suitable for a function
13725 (it defines a datum instead), we return 0, which tells
13726 yyparse to report a parse error.
13728 For C++, we must first check whether that datum makes any sense.
13729 For example, "class A local_a(1,2);" means that variable local_a
13730 is an aggregate of type A, which should have a constructor
13731 applied to it with the argument list [1, 2]. */
13734 start_function (declspecs, declarator, attrs, flags)
13735 tree declspecs, declarator, attrs;
13739 tree ctype = NULL_TREE;
13742 int doing_friend = 0;
13743 struct cp_binding_level *bl;
13744 tree current_function_parms;
13746 /* Sanity check. */
13747 my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13748 my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13750 /* This should only be done once on the top most decl. */
13751 if (have_extern_spec)
13753 declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13754 have_extern_spec = false;
13757 if (flags & SF_PRE_PARSED)
13759 decl1 = declarator;
13761 fntype = TREE_TYPE (decl1);
13762 if (TREE_CODE (fntype) == METHOD_TYPE)
13763 ctype = TYPE_METHOD_BASETYPE (fntype);
13765 /* ISO C++ 11.4/5. A friend function defined in a class is in
13766 the (lexical) scope of the class in which it is defined. */
13767 if (!ctype && DECL_FRIEND_P (decl1))
13769 ctype = DECL_FRIEND_CONTEXT (decl1);
13771 /* CTYPE could be null here if we're dealing with a template;
13772 for example, `inline friend float foo()' inside a template
13773 will have no CTYPE set. */
13774 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13780 last_function_parms = DECL_ARGUMENTS (decl1);
13784 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL);
13785 /* If the declarator is not suitable for a function definition,
13786 cause a syntax error. */
13787 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13790 cplus_decl_attributes (&decl1, attrs, 0);
13792 /* If #pragma weak was used, mark the decl weak now. */
13793 if (current_binding_level == global_binding_level)
13794 maybe_apply_pragma_weak (decl1);
13796 fntype = TREE_TYPE (decl1);
13798 restype = TREE_TYPE (fntype);
13799 if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13801 error ("semicolon missing after declaration of `%#T'", restype);
13802 shadow_tag (build_tree_list (NULL_TREE, restype));
13803 CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13804 if (TREE_CODE (fntype) == FUNCTION_TYPE)
13805 fntype = build_function_type (integer_type_node,
13806 TYPE_ARG_TYPES (fntype));
13808 fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13810 TYPE_ARG_TYPES (fntype));
13811 TREE_TYPE (decl1) = fntype;
13814 if (TREE_CODE (fntype) == METHOD_TYPE)
13815 ctype = TYPE_METHOD_BASETYPE (fntype);
13816 else if (DECL_MAIN_P (decl1))
13818 /* If this doesn't return integer_type, complain. */
13819 if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13821 if (pedantic || warn_return_type)
13822 pedwarn ("return type for `main' changed to `int'");
13823 TREE_TYPE (decl1) = fntype = default_function_type;
13828 if (DECL_DECLARED_INLINE_P (decl1)
13829 && lookup_attribute ("noinline", attrs))
13830 warning_with_decl (decl1,
13831 "inline function `%s' given attribute noinline");
13833 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13834 /* This is a constructor, we must ensure that any default args
13835 introduced by this definition are propagated to the clones
13836 now. The clones are used directly in overload resolution. */
13837 adjust_clone_args (decl1);
13839 /* Sometimes we don't notice that a function is a static member, and
13840 build a METHOD_TYPE for it. Fix that up now. */
13841 if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13842 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13844 revert_static_member_fn (decl1);
13845 last_function_parms = TREE_CHAIN (last_function_parms);
13849 /* Warn if function was previously implicitly declared
13850 (but not if we warned then). */
13851 if (! warn_implicit
13852 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13853 cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13855 /* Set up current_class_type, and enter the scope of the class, if
13858 push_nested_class (ctype, 1);
13859 else if (DECL_STATIC_FUNCTION_P (decl1))
13860 push_nested_class (DECL_CONTEXT (decl1), 2);
13862 /* Now that we have entered the scope of the class, we must restore
13863 the bindings for any template parameters surrounding DECL1, if it
13864 is an inline member template. (Order is important; consider the
13865 case where a template parameter has the same name as a field of
13866 the class.) It is not until after this point that
13867 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
13868 if (flags & SF_INCLASS_INLINE)
13869 maybe_begin_member_template_processing (decl1);
13871 /* Effective C++ rule 15. */
13873 && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13874 && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13875 warning ("`operator=' should return a reference to `*this'");
13877 /* Make the init_value nonzero so pushdecl knows this is not tentative.
13878 error_mark_node is replaced below (in poplevel) with the BLOCK. */
13879 if (!DECL_INITIAL (decl1))
13880 DECL_INITIAL (decl1) = error_mark_node;
13882 /* This function exists in static storage.
13883 (This does not mean `static' in the C sense!) */
13884 TREE_STATIC (decl1) = 1;
13886 /* We must call push_template_decl after current_class_type is set
13887 up. (If we are processing inline definitions after exiting a
13888 class scope, current_class_type will be NULL_TREE until set above
13889 by push_nested_class.) */
13890 if (processing_template_decl)
13891 decl1 = push_template_decl (decl1);
13893 /* We are now in the scope of the function being defined. */
13894 current_function_decl = decl1;
13896 /* Save the parm names or decls from this function's declarator
13897 where store_parm_decls will find them. */
13898 current_function_parms = last_function_parms;
13900 /* Make sure the parameter and return types are reasonable. When
13901 you declare a function, these types can be incomplete, but they
13902 must be complete when you define the function. */
13903 if (! processing_template_decl)
13904 check_function_type (decl1, current_function_parms);
13906 /* Build the return declaration for the function. */
13907 restype = TREE_TYPE (fntype);
13908 /* Promote the value to int before returning it. */
13909 if (c_promoting_integer_type_p (restype))
13910 restype = type_promotes_to (restype);
13911 if (DECL_RESULT (decl1) == NULL_TREE)
13913 DECL_RESULT (decl1)
13914 = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13915 c_apply_type_quals_to_decl (cp_type_quals (restype),
13916 DECL_RESULT (decl1));
13919 /* Initialize RTL machinery. We cannot do this until
13920 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
13921 even when processing a template; this is how we get
13922 CFUN set up, and our per-function variables initialized.
13923 FIXME factor out the non-RTL stuff. */
13924 bl = current_binding_level;
13925 init_function_start (decl1, input_filename, lineno);
13926 current_binding_level = bl;
13928 /* Even though we're inside a function body, we still don't want to
13929 call expand_expr to calculate the size of a variable-sized array.
13930 We haven't necessarily assigned RTL to all variables yet, so it's
13931 not safe to try to expand expressions involving them. */
13932 immediate_size_expand = 0;
13933 cfun->x_dont_save_pending_sizes_p = 1;
13935 /* Start the statement-tree, start the tree now. */
13936 begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13938 /* Let the user know we're compiling this function. */
13939 announce_function (decl1);
13941 /* Record the decl so that the function name is defined.
13942 If we already have a decl for this name, and it is a FUNCTION_DECL,
13943 use the old decl. */
13944 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13946 /* A specialization is not used to guide overload resolution. */
13947 if (!DECL_TEMPLATE_SPECIALIZATION (decl1)
13948 && ! DECL_FUNCTION_MEMBER_P (decl1))
13949 decl1 = pushdecl (decl1);
13952 /* We need to set the DECL_CONTEXT. */
13953 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13954 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13955 /* And make sure we have enough default args. */
13956 check_default_args (decl1);
13958 fntype = TREE_TYPE (decl1);
13961 /* Reset these in case the call to pushdecl changed them. */
13962 current_function_decl = decl1;
13963 cfun->decl = decl1;
13965 /* If we are (erroneously) defining a function that we have already
13966 defined before, wipe out what we knew before. */
13967 if (!DECL_PENDING_INLINE_P (decl1))
13968 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13970 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13972 /* We know that this was set up by `grokclassfn'. We do not
13973 wait until `store_parm_decls', since evil parse errors may
13974 never get us to that point. Here we keep the consistency
13975 between `current_class_type' and `current_class_ptr'. */
13976 tree t = DECL_ARGUMENTS (decl1);
13978 my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
13980 my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13983 cp_function_chain->x_current_class_ref
13984 = build_indirect_ref (t, NULL);
13985 cp_function_chain->x_current_class_ptr = t;
13987 /* Constructors and destructors need to know whether they're "in
13988 charge" of initializing virtual base classes. */
13989 t = TREE_CHAIN (t);
13990 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13992 current_in_charge_parm = t;
13993 t = TREE_CHAIN (t);
13995 if (DECL_HAS_VTT_PARM_P (decl1))
13997 if (DECL_NAME (t) != vtt_parm_identifier)
13999 current_vtt_parm = t;
14003 if (DECL_INTERFACE_KNOWN (decl1))
14005 tree ctx = decl_function_context (decl1);
14007 if (DECL_NOT_REALLY_EXTERN (decl1))
14008 DECL_EXTERNAL (decl1) = 0;
14010 if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
14011 && TREE_PUBLIC (ctx))
14012 /* This is a function in a local class in an extern inline
14014 comdat_linkage (decl1);
14016 /* If this function belongs to an interface, it is public.
14017 If it belongs to someone else's interface, it is also external.
14018 This only affects inlines and template instantiations. */
14019 else if (interface_unknown == 0
14020 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
14021 || flag_alt_external_templates))
14023 if (DECL_DECLARED_INLINE_P (decl1)
14024 || DECL_TEMPLATE_INSTANTIATION (decl1)
14025 || processing_template_decl)
14027 DECL_EXTERNAL (decl1)
14029 || (DECL_DECLARED_INLINE_P (decl1)
14030 && ! flag_implement_inlines
14031 && !DECL_VINDEX (decl1)));
14033 /* For WIN32 we also want to put these in linkonce sections. */
14034 maybe_make_one_only (decl1);
14037 DECL_EXTERNAL (decl1) = 0;
14038 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14039 DECL_INTERFACE_KNOWN (decl1) = 1;
14041 else if (interface_unknown && interface_only
14042 && (! DECL_TEMPLATE_INSTANTIATION (decl1)
14043 || flag_alt_external_templates))
14045 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
14046 interface, we will have interface_only set but not
14047 interface_known. In that case, we don't want to use the normal
14048 heuristics because someone will supply a #pragma implementation
14049 elsewhere, and deducing it here would produce a conflict. */
14050 comdat_linkage (decl1);
14051 DECL_EXTERNAL (decl1) = 0;
14052 DECL_INTERFACE_KNOWN (decl1) = 1;
14053 DECL_DEFER_OUTPUT (decl1) = 1;
14057 /* This is a definition, not a reference.
14058 So clear DECL_EXTERNAL. */
14059 DECL_EXTERNAL (decl1) = 0;
14061 if ((DECL_DECLARED_INLINE_P (decl1)
14062 || DECL_TEMPLATE_INSTANTIATION (decl1))
14063 && ! DECL_INTERFACE_KNOWN (decl1)
14064 /* Don't try to defer nested functions for now. */
14065 && ! decl_function_context (decl1))
14066 DECL_DEFER_OUTPUT (decl1) = 1;
14068 DECL_INTERFACE_KNOWN (decl1) = 1;
14072 current_binding_level->parm_flag = 1;
14076 if (DECL_DESTRUCTOR_P (decl1))
14078 dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14079 DECL_CONTEXT (dtor_label) = current_function_decl;
14082 start_fname_decls ();
14084 store_parm_decls (current_function_parms);
14089 /* Store the parameter declarations into the current function declaration.
14090 This is called after parsing the parameter declarations, before
14091 digesting the body of the function.
14093 Also install to binding contour return value identifier, if any. */
14096 store_parm_decls (current_function_parms)
14097 tree current_function_parms;
14099 register tree fndecl = current_function_decl;
14100 register tree parm;
14102 /* This is a chain of any other decls that came in among the parm
14103 declarations. If a parm is declared with enum {foo, bar} x;
14104 then CONST_DECLs for foo and bar are put here. */
14105 tree nonparms = NULL_TREE;
14107 if (current_function_parms)
14109 /* This case is when the function was defined with an ANSI prototype.
14110 The parms already have decls, so we need not do anything here
14111 except record them as in effect
14112 and complain if any redundant old-style parm decls were written. */
14114 tree specparms = current_function_parms;
14117 /* Must clear this because it might contain TYPE_DECLs declared
14119 storedecls (NULL_TREE);
14121 /* If we're doing semantic analysis, then we'll call pushdecl
14122 for each of these. We must do them in reverse order so that
14123 they end in the correct forward order. */
14124 specparms = nreverse (specparms);
14126 for (parm = specparms; parm; parm = next)
14128 next = TREE_CHAIN (parm);
14129 if (TREE_CODE (parm) == PARM_DECL)
14131 if (DECL_NAME (parm) == NULL_TREE
14132 || TREE_CODE (parm) != VOID_TYPE)
14135 error ("parameter `%D' declared void", parm);
14139 /* If we find an enum constant or a type tag,
14140 put it aside for the moment. */
14141 TREE_CHAIN (parm) = NULL_TREE;
14142 nonparms = chainon (nonparms, parm);
14146 /* Get the decls in their original chain order and record in the
14147 function. This is all and only the PARM_DECLs that were
14148 pushed into scope by the loop above. */
14149 DECL_ARGUMENTS (fndecl) = getdecls ();
14150 storetags (gettags ());
14153 DECL_ARGUMENTS (fndecl) = NULL_TREE;
14155 /* Now store the final chain of decls for the arguments
14156 as the decl-chain of the current lexical scope.
14157 Put the enumerators in as well, at the front so that
14158 DECL_ARGUMENTS is not modified. */
14159 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
14161 /* Do the starting of the exception specifications, if we have any. */
14162 if (flag_exceptions && !processing_template_decl
14163 && flag_enforce_eh_specs
14164 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
14165 current_eh_spec_block = begin_eh_spec_block ();
14169 /* We have finished doing semantic analysis on DECL, but have not yet
14170 generated RTL for its body. Save away our current state, so that
14171 when we want to generate RTL later we know what to do. */
14174 save_function_data (decl)
14177 struct language_function *f;
14179 /* Save the language-specific per-function data so that we can
14180 get it back when we really expand this function. */
14181 my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
14185 f = ((struct language_function *)
14186 ggc_alloc (sizeof (struct language_function)));
14187 memcpy (f, cp_function_chain, sizeof (struct language_function));
14188 DECL_SAVED_FUNCTION_DATA (decl) = f;
14190 /* Clear out the bits we don't need. */
14191 f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
14192 f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
14193 f->x_named_label_uses = NULL;
14194 f->bindings = NULL;
14195 f->x_local_names = NULL;
14197 /* When we get back here again, we will be expanding. */
14198 f->x_expanding_p = 1;
14200 /* If we've already decided that we cannot inline this function, we
14201 must remember that fact when we actually go to expand the
14203 if (current_function_cannot_inline)
14205 f->cannot_inline = current_function_cannot_inline;
14206 DECL_INLINE (decl) = 0;
14210 /* Add a note to mark the beginning of the main body of the constructor.
14211 This is used to set up the data structures for the cleanup regions for
14212 fully-constructed bases and members. */
14215 begin_constructor_body ()
14219 /* Add a note to mark the end of the main body of the constructor. This is
14220 used to end the cleanup regions for fully-constructed bases and
14224 finish_constructor_body ()
14228 /* Do all the processing for the beginning of a destructor; set up the
14229 vtable pointers and cleanups for bases and members. */
14232 begin_destructor_body ()
14235 tree compound_stmt;
14237 /* If the dtor is empty, and we know there is not any possible
14238 way we could use any vtable entries, before they are possibly
14239 set by a base class dtor, we don't have to setup the vtables,
14240 as we know that any base class dtor will set up any vtables
14241 it needs. We avoid MI, because one base class dtor can do a
14242 virtual dispatch to an overridden function that would need to
14243 have a non-related vtable set up, we cannot avoid setting up
14244 vtables in that case. We could change this to see if there
14245 is just one vtable.
14247 ??? In the destructor for a class, the vtables are set
14248 appropriately for that class. There will be no non-related
14249 vtables. jason 2001-12-11. */
14250 if_stmt = begin_if_stmt ();
14252 /* If it is not safe to avoid setting up the vtables, then
14253 someone will change the condition to be boolean_true_node.
14254 (Actually, for now, we do not have code to set the condition
14255 appropriately, so we just assume that we always need to
14256 initialize the vtables.) */
14257 finish_if_stmt_cond (boolean_true_node, if_stmt);
14259 compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
14261 /* Make all virtual function table pointers in non-virtual base
14262 classes point to CURRENT_CLASS_TYPE's virtual function
14264 initialize_vtbl_ptrs (current_class_ptr);
14266 finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
14267 finish_then_clause (if_stmt);
14270 /* And insert cleanups for our bases and members so that they
14271 will be properly destroyed if we throw. */
14272 push_base_cleanups ();
14275 /* At the end of every destructor we generate code to delete the object if
14276 necessary. Do that now. */
14279 finish_destructor_body ()
14283 /* Any return from a destructor will end up here; that way all base
14284 and member cleanups will be run when the function returns. */
14285 add_stmt (build_stmt (LABEL_STMT, dtor_label));
14287 /* In a virtual destructor, we must call delete. */
14288 if (DECL_VIRTUAL_P (current_function_decl))
14291 tree virtual_size = cxx_sizeof (current_class_type);
14295 At the point of definition of a virtual destructor (including
14296 an implicit definition), non-placement operator delete shall
14297 be looked up in the scope of the destructor's class and if
14298 found shall be accessible and unambiguous. */
14299 exprstmt = build_op_delete_call
14300 (DELETE_EXPR, current_class_ptr, virtual_size,
14301 LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
14303 if_stmt = begin_if_stmt ();
14304 finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
14305 current_in_charge_parm,
14308 finish_expr_stmt (exprstmt);
14309 finish_then_clause (if_stmt);
14314 /* Do the necessary processing for the beginning of a function body, which
14315 in this case includes member-initializers, but not the catch clauses of
14316 a function-try-block. Currently, this means opening a binding level
14317 for the member-initializers (in a ctor) and member cleanups (in a dtor).
14318 In other functions, this isn't necessary, but it doesn't hurt. */
14321 begin_function_body ()
14325 if (processing_template_decl)
14326 /* Do nothing now. */;
14328 /* Always keep the BLOCK node associated with the outermost pair of
14329 curly braces of a function. These are needed for correct
14330 operation of dwarfout.c. */
14331 keep_next_level (1);
14333 stmt = begin_compound_stmt (0);
14334 COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
14336 if (processing_template_decl)
14337 /* Do nothing now. */;
14338 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14339 begin_constructor_body ();
14340 else if (DECL_DESTRUCTOR_P (current_function_decl))
14341 begin_destructor_body ();
14346 /* Do the processing for the end of a function body. Currently, this means
14347 closing out the cleanups for fully-constructed bases and members, and in
14348 the case of the destructor, deleting the object if desired. Again, this
14349 is only meaningful for [cd]tors, since they are the only functions where
14350 there is a significant distinction between the main body and any
14351 function catch clauses. Handling, say, main() return semantics here
14352 would be wrong, as flowing off the end of a function catch clause for
14353 main() would also need to return 0. */
14356 finish_function_body (compstmt)
14359 /* Close the block. */
14360 finish_compound_stmt (0, compstmt);
14362 if (processing_template_decl)
14363 /* Do nothing now. */;
14364 else if (DECL_CONSTRUCTOR_P (current_function_decl))
14365 finish_constructor_body ();
14366 else if (DECL_DESTRUCTOR_P (current_function_decl))
14367 finish_destructor_body ();
14370 /* Finish up a function declaration and compile that function
14371 all the way to assembler language output. The free the storage
14372 for the function definition.
14374 FLAGS is a bitwise or of the following values:
14376 We just finished processing the body of an in-class inline
14377 function definition. (This processing will have taken place
14378 after the class definition is complete.) */
14381 finish_function (flags)
14384 register tree fndecl = current_function_decl;
14385 tree fntype, ctype = NULL_TREE;
14386 int inclass_inline = (flags & 2) != 0;
14389 /* When we get some parse errors, we can end up without a
14390 current_function_decl, so cope. */
14391 if (fndecl == NULL_TREE)
14392 return error_mark_node;
14394 nested = function_depth > 1;
14395 fntype = TREE_TYPE (fndecl);
14397 /* TREE_READONLY (fndecl) = 1;
14398 This caused &foo to be of type ptr-to-const-function
14399 which then got a warning when stored in a ptr-to-function variable. */
14401 my_friendly_assert (building_stmt_tree (), 20000911);
14403 finish_fname_decls ();
14405 /* For a cloned function, we've already got all the code we need;
14406 there's no need to add any extra bits. */
14407 if (!DECL_CLONED_FUNCTION_P (fndecl))
14409 if (DECL_MAIN_P (current_function_decl))
14411 /* Make it so that `main' always returns 0 by default. */
14413 finish_return_stmt (integer_one_node);
14415 finish_return_stmt (integer_zero_node);
14419 /* Finish dealing with exception specifiers. */
14420 if (flag_exceptions && !processing_template_decl
14421 && flag_enforce_eh_specs
14422 && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
14423 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14424 (TREE_TYPE (current_function_decl)),
14425 current_eh_spec_block);
14428 /* If we're saving up tree structure, tie off the function now. */
14429 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
14431 /* This must come after expand_function_end because cleanups might
14432 have declarations (from inline functions) that need to go into
14433 this function's blocks. */
14435 /* If the current binding level isn't the outermost binding level
14436 for this function, either there is a bug, or we have experienced
14437 syntax errors and the statement tree is malformed. */
14438 if (current_binding_level->parm_flag != 1)
14440 /* Make sure we have already experienced errors. */
14441 if (errorcount == 0)
14444 /* Throw away the broken statement tree and extra binding
14446 DECL_SAVED_TREE (fndecl) = build_stmt (COMPOUND_STMT, NULL_TREE);
14448 while (current_binding_level->parm_flag != 1)
14450 if (current_binding_level->parm_flag == 2)
14451 pop_nested_class ();
14453 poplevel (0, 0, 0);
14456 poplevel (1, 0, 1);
14458 /* Set up the named return value optimization, if we can. Here, we
14459 eliminate the copy from the nrv into the RESULT_DECL and any cleanup
14460 for the nrv. genrtl_start_function and declare_return_variable
14461 handle making the nrv and RESULT_DECL share space. */
14462 if (current_function_return_value)
14464 tree r = current_function_return_value;
14465 /* This is only worth doing for fns that return in memory--and
14466 simpler, since we don't have to worry about promoted modes. */
14467 if (r != error_mark_node
14468 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl))))
14470 DECL_ALIGN (r) = DECL_ALIGN (DECL_RESULT (fndecl));
14471 walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
14472 nullify_returns_r, r);
14475 /* Clear it so genrtl_start_function and declare_return_variable
14476 know we're not optimizing. */
14477 current_function_return_value = NULL_TREE;
14480 /* Remember that we were in class scope. */
14481 if (current_class_name)
14482 ctype = current_class_type;
14484 /* Must mark the RESULT_DECL as being in this function. */
14485 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14487 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14488 to the FUNCTION_DECL node itself. */
14489 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14491 /* Save away current state, if appropriate. */
14492 if (!processing_template_decl)
14493 save_function_data (fndecl);
14495 /* If this function calls `setjmp' it cannot be inlined. When
14496 `longjmp' is called it is not guaranteed to restore the value of
14497 local variables that have been modified since the call to
14498 `setjmp'. So, if were to inline this function into some caller
14499 `c', then when we `longjmp', we might not restore all variables
14500 in `c'. (It might seem, at first blush, that there's no way for
14501 this function to modify local variables in `c', but their
14502 addresses may have been stored somewhere accessible to this
14504 if (!processing_template_decl && calls_setjmp_p (fndecl))
14505 DECL_UNINLINABLE (fndecl) = 1;
14507 /* Complain if there's just no return statement. */
14508 if (warn_return_type
14509 && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
14510 && !current_function_returns_value && !current_function_returns_null
14511 /* Don't complain if we abort or throw. */
14512 && !current_function_returns_abnormally
14513 && !DECL_NAME (DECL_RESULT (fndecl))
14514 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
14515 inline function, as we might never be compiled separately. */
14516 && (DECL_INLINE (fndecl) || processing_template_decl))
14517 warning ("no return statement in function returning non-void");
14519 /* Clear out memory we no longer need. */
14520 free_after_parsing (cfun);
14521 /* Since we never call rest_of_compilation, we never clear
14522 CFUN. Do so explicitly. */
14523 free_after_compilation (cfun);
14526 /* If this is an in-class inline definition, we may have to pop the
14527 bindings for the template parameters that we added in
14528 maybe_begin_member_template_processing when start_function was
14530 if (inclass_inline)
14531 maybe_end_member_template_processing ();
14533 /* Leave the scope of the class. */
14535 pop_nested_class ();
14541 /* Let the error reporting routines know that we're outside a
14542 function. For a nested function, this value is used in
14543 cxx_pop_function_context and then reset via pop_function_context. */
14544 current_function_decl = NULL_TREE;
14549 /* Create the FUNCTION_DECL for a function definition.
14550 DECLSPECS and DECLARATOR are the parts of the declaration;
14551 they describe the return type and the name of the function,
14552 but twisted together in a fashion that parallels the syntax of C.
14554 This function creates a binding context for the function body
14555 as well as setting up the FUNCTION_DECL in current_function_decl.
14557 Returns a FUNCTION_DECL on success.
14559 If the DECLARATOR is not suitable for a function (it defines a datum
14560 instead), we return 0, which tells yyparse to report a parse error.
14562 May return void_type_node indicating that this method is actually
14563 a friend. See grokfield for more details.
14565 Came here with a `.pushlevel' .
14567 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14568 CHANGES TO CODE IN `grokfield'. */
14571 start_method (declspecs, declarator, attrlist)
14572 tree declarator, declspecs, attrlist;
14574 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14577 if (fndecl == error_mark_node)
14578 return error_mark_node;
14580 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14582 error ("invalid member function declaration");
14583 return error_mark_node;
14587 cplus_decl_attributes (&fndecl, attrlist, 0);
14589 /* Pass friends other than inline friend functions back. */
14590 if (fndecl == void_type_node)
14593 if (DECL_IN_AGGR_P (fndecl))
14595 if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14597 if (DECL_CONTEXT (fndecl)
14598 && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14599 error ("`%D' is already defined in class `%T'", fndecl,
14600 DECL_CONTEXT (fndecl));
14602 return void_type_node;
14605 check_template_shadow (fndecl);
14607 DECL_DECLARED_INLINE_P (fndecl) = 1;
14609 if (flag_default_inline)
14610 DECL_INLINE (fndecl) = 1;
14612 /* We process method specializations in finish_struct_1. */
14613 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14614 fndecl = push_template_decl (fndecl);
14616 if (! DECL_FRIEND_P (fndecl))
14618 if (TREE_CHAIN (fndecl))
14620 fndecl = copy_node (fndecl);
14621 TREE_CHAIN (fndecl) = NULL_TREE;
14623 grok_special_member_properties (fndecl);
14626 cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
14628 /* Make a place for the parms */
14630 current_binding_level->parm_flag = 1;
14632 DECL_IN_AGGR_P (fndecl) = 1;
14636 /* Go through the motions of finishing a function definition.
14637 We don't compile this method until after the whole class has
14640 FINISH_METHOD must return something that looks as though it
14641 came from GROKFIELD (since we are defining a method, after all).
14643 This is called after parsing the body of the function definition.
14644 STMTS is the chain of statements that makes up the function body.
14646 DECL is the ..._DECL that `start_method' provided. */
14649 finish_method (decl)
14652 register tree fndecl = decl;
14655 register tree link;
14657 if (decl == void_type_node)
14660 old_initial = DECL_INITIAL (fndecl);
14662 /* Undo the level for the parms (from start_method).
14663 This is like poplevel, but it causes nothing to be
14664 saved. Saving information here confuses symbol-table
14665 output routines. Besides, this information will
14666 be correctly output when this method is actually
14669 /* Clear out the meanings of the local variables of this level;
14670 also record in each decl which block it belongs to. */
14672 for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14674 if (DECL_NAME (link) != NULL_TREE)
14675 pop_binding (DECL_NAME (link), link);
14676 my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14677 DECL_CONTEXT (link) = NULL_TREE;
14680 poplevel (0, 0, 0);
14682 DECL_INITIAL (fndecl) = old_initial;
14684 /* We used to check if the context of FNDECL was different from
14685 current_class_type as another way to get inside here. This didn't work
14686 for String.cc in libg++. */
14687 if (DECL_FRIEND_P (fndecl))
14689 CLASSTYPE_INLINE_FRIENDS (current_class_type)
14690 = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14691 decl = void_type_node;
14698 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
14699 we can lay it out later, when and if its type becomes complete. */
14702 maybe_register_incomplete_var (var)
14705 my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
14707 /* Keep track of variables with incomplete types. */
14708 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14709 && DECL_EXTERNAL (var))
14711 tree inner_type = TREE_TYPE (var);
14713 while (TREE_CODE (inner_type) == ARRAY_TYPE)
14714 inner_type = TREE_TYPE (inner_type);
14715 inner_type = TYPE_MAIN_VARIANT (inner_type);
14717 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14718 /* RTTI TD entries are created while defining the type_info. */
14719 || (TYPE_LANG_SPECIFIC (inner_type)
14720 && TYPE_BEING_DEFINED (inner_type)))
14721 incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
14725 /* Called when a class type (given by TYPE) is defined. If there are
14726 any existing VAR_DECLs whose type hsa been completed by this
14727 declaration, update them now. */
14730 complete_vars (type)
14733 tree *list = &incomplete_vars;
14735 my_friendly_assert (CLASS_TYPE_P (type), 20020406);
14738 if (same_type_p (type, TREE_PURPOSE (*list)))
14740 tree var = TREE_VALUE (*list);
14741 /* Complete the type of the variable. The VAR_DECL itself
14742 will be laid out in expand_expr. */
14743 complete_type (TREE_TYPE (var));
14744 /* Remove this entry from the list. */
14745 *list = TREE_CHAIN (*list);
14748 list = &TREE_CHAIN (*list);
14752 /* If DECL is of a type which needs a cleanup, build that cleanup
14756 cxx_maybe_build_cleanup (decl)
14759 tree type = TREE_TYPE (decl);
14761 if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14763 int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14766 if (TREE_CODE (type) == ARRAY_TYPE)
14770 cxx_mark_addressable (decl);
14771 rval = build_unary_op (ADDR_EXPR, decl, 0);
14774 /* Optimize for space over speed here. */
14775 if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14776 || flag_expensive_optimizations)
14777 flags |= LOOKUP_NONVIRTUAL;
14779 rval = build_delete (TREE_TYPE (rval), rval,
14780 sfk_complete_destructor, flags, 0);
14782 if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14783 && ! TYPE_HAS_DESTRUCTOR (type))
14784 rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14785 build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
14792 /* When a stmt has been parsed, this function is called. */
14797 /* Always assume this statement was not an expression statement. If
14798 it actually was an expression statement, its our callers
14799 responsibility to fix this up. */
14800 last_expr_type = NULL_TREE;
14803 /* DECL was originally constructed as a non-static member function,
14804 but turned out to be static. Update it accordingly. */
14807 revert_static_member_fn (decl)
14811 tree function = TREE_TYPE (decl);
14812 tree args = TYPE_ARG_TYPES (function);
14814 if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
14815 != TYPE_UNQUALIFIED)
14816 error ("static member function `%#D' declared with type qualifiers",
14819 args = TREE_CHAIN (args);
14820 tmp = build_function_type (TREE_TYPE (function), args);
14821 tmp = build_qualified_type (tmp, cp_type_quals (function));
14822 tmp = build_exception_variant (tmp,
14823 TYPE_RAISES_EXCEPTIONS (function));
14824 TREE_TYPE (decl) = tmp;
14825 if (DECL_ARGUMENTS (decl))
14826 DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14827 DECL_STATIC_FUNCTION_P (decl) = 1;
14830 /* Initialize the variables used during compilation of a C++
14834 cxx_push_function_context (f)
14835 struct function *f;
14837 struct language_function *p
14838 = ((struct language_function *)
14839 ggc_alloc_cleared (sizeof (struct language_function)));
14842 /* It takes an explicit call to expand_body to generate RTL for a
14846 /* Whenever we start a new function, we destroy temporaries in the
14848 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14851 /* Free the language-specific parts of F, now that we've finished
14852 compiling the function. */
14855 cxx_pop_function_context (f)
14856 struct function *f;
14861 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14862 one of the language-independent trees. */
14864 enum cp_tree_node_structure_enum
14865 cp_tree_node_structure (t)
14866 union lang_tree_node *t;
14868 switch (TREE_CODE (&t->generic))
14870 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
14871 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
14872 case CPLUS_BINDING: return TS_CP_BINDING;
14873 case OVERLOAD: return TS_CP_OVERLOAD;
14874 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
14875 case PTRMEM_CST: return TS_CP_PTRMEM;
14876 case WRAPPER: return TS_CP_WRAPPER;
14877 case SRCLOC: return TS_CP_SRCLOC;
14878 default: return TS_CP_GENERIC;
14882 /* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
14883 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
14886 identifier_global_value (t)
14889 return IDENTIFIER_GLOBAL_VALUE (t);
14892 /* Build the void_list_node (void_type_node having been created). */
14894 build_void_list_node ()
14896 tree t = build_tree_list (NULL_TREE, void_type_node);
14897 TREE_PARMLIST (t) = 1;
14902 cp_missing_noreturn_ok_p (decl)
14905 /* A missing noreturn is ok for the `main' function. */
14906 return DECL_MAIN_P (decl);
14909 #include "gt-cp-decl.h"
14910 #include "gtype-cp.h"